공log/[P&B]

[P&B] #62 BAEKJOON 1316

ming_OoO 2023. 9. 17. 23:57
728x90

백준 1316번 그룹 단어 체커

문제 설명

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

단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오.

 

입력

첫째 줄에 단어의 개수 N이 들어온다. N은 100보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 단어가 들어온다. 단어는 알파벳 소문자로만 되어있고 중복되지 않으며, 길이는 최대 100이다.

 

출력

첫째 줄에 그룹 단어의 개수를 출력한다.

 

나의 문제 풀이 코드

import java.io.*;
public class bj1316 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int N = Integer.parseInt(br.readLine());
        int count= 0;
        for (int i = 0; i < N; i++) {
            String s = br.readLine();
            if (!check(s))
                count++;
        }
        bw.write(String.valueOf(count));
        bw.flush();
    }

    private static boolean check(String s){
        boolean checkNum = false;
        for (int i = 0; i < s.length(); i++) {
            for (int j = i+2; j < s.length(); j++) {
                if (s.charAt(i) == s.charAt(j)){
                    if (s.charAt(i) != s.charAt(j-1)){
                        checkNum = true;
                        break;
                    }
                }
            }
        }
        return checkNum;
    }
}

 

문제 풀이 코멘트

그룹 단어란, 어떤 문자가 연속해서 나타나는 경우를 말합니다. 코드를 이해하기 위해 check 함수에 초점을 맞추어 설명하겠습니다.

 

for (int i = 0; i < s.length(); i++) : 문자열 s를 처음부터 끝까지 반복합니다.

for (int j = i + 2; j < s.length(); j++) : 현재 문자 i와 떨어진 두 글자 뒤의 문자 j를 비교합니다. 이렇게 하는 이유는 그룹 단어의 조건 중 하나는 어떤 문자가 두 번 연속해서 나타나지 않는 것입니다.

if (s.charAt(i) == s.charAt(j)) : 만약 현재 문자 i와 j가 같다면, 연속해서 나타나는 문자가 발견되었습니다.

if (s.charAt(i) != s.charAt(j - 1)) : 현재 문자 i와 j가 같은데, 바로 직전 문자 j-1와는 다르다면, 이는 그룹 단어가 아닌 경우입니다.

  • 예를 들어, "aba"에서 문자 a가 0번째와 2번째에 위치하면서, 바로 직전에는 b가 있으므로 그룹 단어가 아닙니다.

checkNum = true; : 그룹 단어가 아닌 경우 checkNum 변수를 true로 설정합니다.

반복문이 종료되면 checkNum 변수의 값에 따라 true 또는 false를 반환합니다. 따라서 check 함수는 입력된 문자열이 그룹 단어이면 false, 아니면 true를 반환합니다.

 

이렇게 check함수를 통해 입력받은 문자열 중에서 그룹 단어가 아닌 문자열을 찾아내고, 해당 개수를 계산하는 방식으로 풀었습니다.

728x90

'공log > [P&B]' 카테고리의 다른 글

[P&B] #64 BAEKJOON 2475  (0) 2023.09.18
[P&B] #63 BAEKJOON 25206  (0) 2023.09.17
[P&B] #61 BAEKJOON 2941  (0) 2023.09.17
[P&B] #60 BAEKJOON 1157  (0) 2023.09.17
[P&B] #59 BAEKJOON 10988  (0) 2023.09.17