본문 바로가기

백준

백준 1316 그룹 단어 체커 (JAVA)

문제

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

 

1316번: 그룹 단어 체커

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

www.acmicpc.net

코드

package com.company;

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, ans = 0;
        String word;
        char prev =' ', now = ' ';
        boolean[] visit;
        boolean check = true;

        N = Integer.parseInt(br.readLine());

        for (int i = 0; i < N; i++) {
            word = br.readLine();
            prev = ' ';
            now = ' ';
            visit = new boolean['z' - 'a' + 1];
            for (int j = 0; j < word.length(); j++) {
                now = word.charAt(j);
                if(prev == now){
                    continue;
                }
                else if(prev != now && visit[now - 'a'] == false){
                    visit[now - 'a'] = true;
                    prev = now;
                }
                else{
                    check = false;
                    break;
                }
            }

            if(check)
                ans++;
            else if(!check)
                check = true;
        }

        System.out.println(ans);
    }

}

풀이

먼저 그룹 단어인지 체크 할 문자열을 입력받아 저장을 한다. 그리고 해당 문자열에서 필요한 변수는 4가지가 있는데 먼저 현재 확인해야할 문자를 나타내는 변수, 이전의 문자를 확인할수 있는 변수, 그리고 현재 문자열에서 방문했는지 안했는지 확인하는 boolean형 배열, 그리고 현재의 단어가 그룹단어인지 아닌지를 확인하는 boolean형 변수가 있다.

핵심 알고리즘은 다음과 같다. 이전 문자를 뜻하는 단어인 prev 와 현재 문자를 뜻하는 now가 같다면 같은 문자가 연속되기 때문에 반복문을 계속해서 진행한다. 그리고 만약 prev와 now가 다르고 now의 문자를 한번도 방문한적이 없다면 새로운 문자가 들어왔다고 판단을 하고 현재 문자를 방문처리하고 prev문자를 now 문자로 업데이트 해주고 반복문을 계속해서 진행해준다. 그리고 만약 다음중에서 아무것도 해당하지 않는다면 이는 그룹단어가 아니라고 판단을 하고 그룹단어임을 확인하는 변수를 false로 만들고 반복문을 탈출해준다. 그리고 그룹단어인지 아닌지를 판단하는 변수를 통해서 만약 그룹단어라면 ans를 +1증가시키고 그게 아니라면 다시 그룹단어를 판단하는 변수를 초기화하고 반복문을 진행한다.

'백준' 카테고리의 다른 글

백준 2729 이진수 덧셈(JAVA)  (0) 2022.08.17
백준 18311 왕복 (JAVA)  (0) 2022.08.15
백준 1316 그룹 단어 체커(JAVA)  (0) 2022.08.15
백준 16719 ZOAC(JAVA)  (0) 2022.08.15
백준 14719 빗물 (JAVA)  (0) 2022.08.11