본문 바로가기
짱구 굴리기 (Q) -

[백준 1316] 그룹단어 체크

by skwzz 2019. 1. 23.

출처 : https://www.acmicpc.net/problem/1316


메인

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int n = Integer.parseInt(br.readLine());
		int answer = 0;
		String str;
		for(int i=0; i<n; i++) {
			str = br.readLine();
			if(isGroupWord(str)) {
				answer++;
			}
		}
		System.out.print(answer);
	}

메인은 단어 갯수받고 갯수만큼 돌리면서 받는 즉시 그룹단어인지 체크를 해 카운트를 늘리는 식으로 햇습니다



isGroupWord 메소드

public static boolean isGroupWord(String str) {
	int[] checker = new int[26];
	char c;
	char beforeC=' '; //방금 사용한 문자 저장용 변수
	for(int i=0; i<str.length(); i++) {
		c = str.charAt(i);
		//처음
		if(beforeC==' ') {
			beforeC=c;
			continue;
		}else {
			if(beforeC == c) { //현재 문자가 방금 앞의 문자와 똑같다면
				continue;
			}else { //다르다면
				if(checker[c-'a']!=0) { //예전에 사용을 했던 문자라면 바로 false 리턴
					return false;
				}else { // 처음 만난 문자일 경우 체커에 카운트 올리고 beforeC에 현재 단어 저장
					checker[beforeC-'a']++;
					beforeC=c;
				}
			}
			
		}
	}
	return true;
}

일단 뭔가 코드 작성 다 하고 나서 굉장이 조건문이 복잡해보여서 별로였습니다
주석에 간단히 적어놨긴 했지만 순서는
알파벳 갯수만큼 체킹용 배열을 생성하고 charAt으로 받을 변수 c,
그리고 이전에 사용한 문자를 저장할 beforeC 라는 변수 만들었고 문자열을 반복문으로 돌리며 하나씩 꺼내옵니당

첫바퀴는 beforeC에 공백이므로 바로 현재 문자 넣어주고 continue,
이후 하나씩 받으며 전의 문자와 동일하다면 continue,
다른 문자가 들어왔을 경우 이게 처음 사용된 알파벳인지, 이전에 사용된 알파벳인지 판별해
처음 사용된 문자라면 체킹용 배열의 알파벳 순서 부분을 올려주고 beforeC에 현재 문자를 저장.
체킹용 배열이 0이 아닌(이미 사용된 경우) 바로 false로 리턴해주는식으로 햇습니다(이부분 조건문 부분은 순서가 반대로 되있네요. (코드상엔 이미 사용된지 먼저 확인함)


이상하거나 모자른 부분이 있다면 말씀해주세요. 확인하고 고치겠습니당

'짱구 굴리기 (Q) - ' 카테고리의 다른 글

[백준 1012] 유기농 배추  (0) 2019.01.25
[백준 1475] 방 번호  (0) 2019.01.25
[백준 4344] 평균은 넘겠지  (0) 2019.01.23
[백준 1546] 평균  (0) 2019.01.23
[백준 4673] 셀프넘버  (0) 2019.01.22