Coding Test/Baekjoon

[JAVA] 1316번 그룹 단어 체커

gozer0 2024. 7. 16. 23:59

 

 

같은 알파벳이 반복되도 되지만 다른 알파벳이 나오면서 끊기게 되면 다시 나오면 안되는!

그런 규칙이다...

 

좀 오랫동안 고민했던 문제인데

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int num = Integer.parseInt(br.readLine());
        int count = 0;

        for (int c = 0; c < num; c++) {
            String st = br.readLine();
            boolean[] test = new boolean[26];
            boolean isGroupWord = true;

            for (int i = 0; i < st.length(); i++) {
                if (i > 0 && st.charAt(i) != st.charAt(i - 1)) {
                    if (test[st.charAt(i) - 'a']) {
                        isGroupWord = false;
                        break;
                    }
                }
                test[st.charAt(i) - 'a'] = true;
            }

            if (isGroupWord) {
                count++;
            }
        }

        System.out.println(count);
    }
}

 

count 를 0으로 해놓고,

test 배열을 만들어서 

각 단어별로 검사할때마다 초기화 되도록 하였다.

 

각 단어를 검사할때, 현재 문자가 이전 문자와 다르다면,

이전에 본 문자인지 확인해보는 과정이다.

 

만약 이미 본 문자라면 그룹 단어가 아니므로

isGroupWord를 false로 설정하고 반복 종료한다.

 

반복이 끝나면 isGroupWord가 true인 경우 count를 증가시킨다.

 

 

 

아래는 다른 방식으로 해본것이다!

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int num = Integer.parseInt(br.readLine());
        int count=num;

        for(int c = 0;c<num;c++) {
            String st = br.readLine();
            boolean test[] = new boolean[26];

            for(int i=0;i<st.length()-1;i++) {
                if(st.charAt(i)!=st.charAt(i+1)) {
                    if(test[st.charAt(i+1)-97]==true) {
                        count--;
                        break;
                    }
                }
                test[st.charAt(i)-97]=true;
            }
        }
        System.out.println(count);
    }
}

 

이 코드에서는 count를 0이 아닌 num 으로 설정하여

특정 조건에 해당되면 1씩 감소하는 식으로 되어 있다.

 

 

for문 안에서는 각 단어를 먼저 검사한 후,

boolean 배열을 만들어

이중for문 안에서는 단어의 문자를 검사한다.

 

if문으로 현재 문자와 다음 문자를 비교한 후,

그륩 단어의 참 거짓을 나눈다.

 

연속된 문자가 아니면서 이전에 나온 문자라면 그룹 단어가 아니므로 카운트를 감소시킨다.

 

 

결론

첫번째 코드와 두번째 코드는,

count 를 증가시키냐, 감소시키냐의 차이,

그래서 첫번째 코드는 그룹 단어가 아닌 단어의 수를 출력하는거고

두번째 코드는 그룹 단어인 수를 세어 출력하는 것이다.

'Coding Test > Baekjoon' 카테고리의 다른 글

[JAVA] 2566번 최댓값  (0) 2024.07.22
[JAVA] 25306번 너의 평점은  (0) 2024.07.15