본문 바로가기
Baekjoon

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

by Chaewon Park 2024. 2. 2.

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

 

1316번: 그룹 단어 체커

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

www.acmicpc.net


문제

 

알고리즘

 

1. N을 입력받는다.

2. for문을 N만큼 돌면서 String str을 입력받는다.

3. str이 그룹단어인지 확인하고 boolean값을 리턴하는 check함수를 만든다.

  • check 함수에 str을 인자로 넘겨주면 str의 길이만큼 for문을 돌린다.
  • 이전 문자와 현재 문자를 저장하기 위해 int pre와 int now를 생성한다.
  • pre와 now가 같지 않다면, now가 이전에 나왔던 문자인지 확인한다.
  • 만약 이전에 나왔던 문자라면 바로 false를 리턴한다.
  • 만약 처음 나온 문자라면 arr[현재 문자]를 true로 바꿔주고 pre에 now를 저장한다.
  • 정상적으로 for문이 끝나면 true를 리턴한다.

4. check가 true를 리턴하면 그룹단어의 개수를 세는 cnt에 1을 더해준다.

 

풀이
import java.util.*;
import java.io.*;

public class Main {
    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 cnt = 0;

        int N = Integer.parseInt(br.readLine());
        for(int i=0; i<N; i++){
            String str = br.readLine();
            if(check(str)) {
                cnt++;
            }
        }
        br.close();
        bw.write(Integer.toString(cnt));
        bw.flush();
        bw.close();
    }

    public static boolean check(String str) {
        int pre = 0;
        int now = 0;
        boolean [] arr = new boolean[26];

        for(int i=0; i<str.length(); i++){
            now = str.charAt(i);

            // 이전 문자와 현재 문자가 같지 않으면,
            if(pre != now) {
                // 현재 문자가 처음 나온 문자라면,
                if(!arr[now - 'a']) {
                    arr[now -'a'] = true;
                    pre = now ;
                }
                // 현재 문자가 이전에 나왔던 문자라면,
                else if(arr[now - 'a']){
                    return false;
                }
            }
        }
        return true;
    }
}