본문 바로가기
백준

[백준] 1316번 : 그룹 단어 체커 – JAVA [자바]

by Hongwoo 2022. 7. 9.
반응형

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

 

1316번: 그룹 단어 체커

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

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

백준 1316번 그룹 단어 체커는 실버 5 난이도의 구현 및 문자열 문제이다. 이 문제에서는 N개의 단어가 주어진다. 그리고 이 N개 단어들 중에서 그룹 단어가 몇 개인지를 출력해주면 된다. 그리고 그룹 단어는 단어에 있는 모든 문자가 연속해서 나타날 때 그룹 단어라고 한다.

 

이 문제에서는 한 문자 s가 이미 나타났는지 아닌지를 확인해야 하니 boolean형 배열 arr을 선언해준다. 알파벳이 총 26개이므로 이 배열의 크기도 26이다. 그리고 한 단어를 loop 돌리기 전에 우선 첫 번째 문자를 배열에 확인해준다.

 

그리고 for-loop을 i = 1부터 i < s.length()까지 돌려준다. 그리고 char c는 s.charAt(i)라고 정의하겠다. 이때 크게 두 가지의 경우로 나눌 수 있다. c가 이전 문자와 같은 경우와 c가 이전 문자와 다른 경우로 나눌 수 있다.

 

c가 이전 문자와 같으면 당연히 연속된 문자이니 continue 시켜준다.

 

c가 이전 문자와 다른 경우면 또 두 가지의 경우로 나눌 수 있다. 이전 문자와 다르고 이미 c가 나타났던 문자라면 그룹 단어가 아니게 된다. 하지만 이전 문자와 다르더라도 c가 처음으로 나타나는 경우라면 continue 시켜준다.

 

자세한 코드는 밑에서 참고할 수 있다.

 


  • 코드

 

import java.io.*;
import java.util.*;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int count = n;  //그룹 단어의 개수
        for (int i = 0; i < n; i++) {
            boolean[] arr = new boolean[26];  //이미 나타난 문자 확인용
            String s = br.readLine();
            arr[(int)s.charAt(0) - 97] = true;  //우선 첫 단어 확인
            for (int j = 1; j < s.length(); j++) {
                char c = s.charAt(j);
                //이전 문자와 같으면 continue
                if (c == s.charAt(j-1)) continue;

                //이전 문자와 다르고 이미 나타난 문자면 그룹 단어가 아니므로 count - 1
                if (arr[(int)c - 97]) {
                    count--;
                    break;
                }
                arr[(int)c - 97] = true;  //나타난 단어라고 확인
            }
        }
        System.out.println(count);
    }
}

 

 

반응형

댓글