will come true

[백준] 1346번 - 그룹 단어 체커 (Java) 본문

Algorithm

[백준] 1346번 - 그룹 단어 체커 (Java)

haehyun 2022. 2. 7. 18:24

문제

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

 

1316번: 그룹 단어 체커

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때

www.acmicpc.net

 

코드

import java.util.Arrays;
import java.util.Scanner;

// 그룹 단어 체커
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = Integer.parseInt(sc.nextLine());
        boolean[] alphabet = new boolean[26];
        int count = 0;

        for (int i = 0; i < N; i++) {
            Arrays.fill(alphabet, false);   // 알파벳 등장 여부 초기화

            String str = sc.nextLine();
            char before = str.charAt(0);        // 이전 문자
            int j = 0;

            for (j = 0; j < str.length(); j++) {
                char curr = str.charAt(j);
                // 이전에 나온적 있는데, 앞 문자와 다를 경우 (연속으로 사용된 게 아닐 경우)
                if (before != curr && alphabet[curr - 'a'] == true) {
                    break;
                }
                alphabet[curr - 'a'] = true;
                before = curr;
            }
            // for문 중간에 break 걸리지 않고 끝까지 진행됐을 경우 그룹단어 OK
            if (j == str.length()) {
                count++;
            }
        }
        System.out.println(count);
    }
}

 

  • 문자열 내에서 a~z 소문자 알파벳의 등장 여부를 boolean[] 배열에 저장한다. 새로운 문자열 체크 전에 모든 알파벳이 아직 등장하지 않았다는 의미로 배열을 false로 초기화해줘야 한다.
    • true : 이전에 등장한 적 있는 알파벳
    • false : 이전에 등장한 적 없는 알파벳
  • 그룹 단어가 아닌 경우는 문자가 연속으로 사용되지 않고, 다른 문자 뒤에 한번 더 등장했을 때 뿐이다.
    • 즉, 이전에 나온적 있는 알파벳이고(boolean[] 배열 값이 true), 앞 문자와 다를 경우 그룹 단어가 아니다.
    • boolean[] alphabet : 이전에 나온적 있는 문자인지 체크용
    • char before : 해당 문자의 바로 이전 문자 확인용
  • for문 중간에 break 조건에 걸리지 않고 끝가지 진행되었을 경우, 마지막 반복을 수행한 후 j++ 된 값으로 for문 반복 여부를 체크하기 때문에 j값은 str.length()이 된다. 이를 위해 for문 밖에 변수 j를 선언해둬서 for문 밖에서 j값을 참조할 수 있도록 한다.
int j = 0;

for (j = 0; j < str.length(); j++) {
	// 반복코드
}

if (j == str.length()) {
    count++;
}

 

Comments