[구현] 1316번 - 그룹 단어 체커

안수진·2023년 7월 30일

Baekjoon

목록 보기
1/55
post-thumbnail

🔎 1316번 - 그룹 단어 체커

  • 주의할 점
  1. 문자열의 문자가 연속되지 않으면서 이미 앞서 해당 문자가 입력된 적이 있을 경우 그룹 단어가 아니다.
  2. 그룹 단어의 개수를 출력해야 한다.

📝 풀이 코드

import java.util.Scanner;

public class Main {
	static Scanner sc = new Scanner(System.in);
	
	public static void main(String args[]) {
		int n = sc.nextInt();
		int count = 0;
		
		for(int i = 0; i < n; i++) {
			if(check() == true) count++;
		}
		
		System.out.println(count);
	}
	
	public static boolean check() {
		int prev = 0;
		String word = sc.next();
		boolean[] check = new boolean[26]; //알파벳 중복 확인을 위한 배열
		
		
		for(int i = 0; i < word.length(); i++) {
			int now = word.charAt(i);
			//char ow = word.charAt(i);
			
			//앞선 문자와 i번째 문자가 같지 않다면?
			if(prev != now) {
				
				//해당 문자가 처음 나오는 경우
				if(check[now - 'a'] == false) {
					check[now - 'a'] = true;
					prev = now;
				}
				
				//해당 문자가 이미 나온 적이 있는 경우 -> 그룹 단어 X
				else {
					return false;
				}
			}
			
			//앞선 문자와 i번째 문자가 같다면? (연속된 문자)
			else {
				continue;
			}
		}
		
		
		return true;
	}
}

📍check 함수

그룹 단어를 체크할 함수이다.
26개의 단어를 체크할 길이 26의 boolean 배열을 선언하고 문자열을 입력받는다.
(boolean 배열은 디폴트 값이 false이다.)

반복문에서 문자를 가져올때마다 앞선 문자와 연속되는지 아닌지 판별하기 위해 prev 변수를 생성한다.
그리고 now 변수는 현재 반복하고 있는 문자의 ASCII 값(정수)을 나타낸다.

  • prev의 문자와 해당 문자가 같다면?
    ➡️ 해당 문자가 중복된 문자인지 검사하지 않는다.

  • prev의 문자와 해당 문자가 다르다면?
    ➡️ check 배열에서 해당 문자가 중복된 문자인지 여부를 검사한다.

  • 주의할 점
    Main 함수와 check 함수에서도 Scanner를 쓰기에 반드시 main 함수 밖에 전역 변수로 static을 붙여 Scanner 객체를 생성해야 한다.
    또한 문자열을 입력받을 때 nextLine()을 쓰면 에러가 난다.
    ➡️ 개행이 버퍼에 남아있어서 다음 입력때 개행이 str에 저장된다.

  • check[now - 'a'] 이유
    charAt()은 해당 문자의 아스키코드 값을 반환한다.
    a의 경우 97의 값을 갖고있기에 만약 now = a 라고 한다면, 이는 97이라는 값을 갖고있고 0번째 인덱스에 위치시키기 위해서는 -'a' 즉, 97을 빼주어야 한다.
    c라는 문자는 99일테고, 2번째 인덱스에 위치해야하니, 마찬가지로 'a'(97)을 빼주어야 한다.



reference

[백준] 1316번 : 그룹 단어 체커
풀이 참고 티스토리

profile
항상 궁금해하기

0개의 댓글