티스토리 뷰

Q.1316 그룹 단어 체커

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

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

 

입력 :

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

 

출력 :

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

 

<소스 코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.*;
public class Prac {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        int i = 0;
        int n = sc.nextInt();//단어 갯수 입력
        int answer = n;//answer에 단어 갯수 대입
        
        for(int test_case = 0; test_case < n; test_case++) {
            String word = sc.next();//단어 입력
            boolean[] checker = new boolean[26];//체커 배열 선언. 등장한 문자는 true로 변경한다. 
            
            for(i = 1; i < word.length(); i++) {//단어의 길이만큼 반복
                if(word.charAt(i-1!= word.charAt(i)) {//현재 문자와 이전 문자가 같지 않다면
                    if(checker[word.charAt(i)-97== true) { //현재 문자가 이전에 나온적이 있다면 
                        answer--;            //그룹단어가 아니므로 answer - 1
                        break;               //더 이상 확인할 필요가 없으므로 break;
                    }
                    checker[word.charAt(i-1- 97= true;//checker 배열의 현재 단어 위치를 true로 변경한다.
                }
            }
        }
        System.out.println(answer);
    }
}
cs

 

<실행 결과>

 

<해법>

boolean 타입의 checker 배열을 선언해 등장한 문자를 확인하는 배열을 선언한다.

반복문을 통해 현재 문자가 이전에 등장한 문자인지 확인하는 과정을 거치는데, 이전의 문자가 현재 문자와 다를시 연속단어가 아니므로

이 때 checker 배열을 통해 이전에 이 문자가 등장했는지 확인하면 문제가 해결된다.

 

for i = 1 word의 길이까지

if 현재 단어(i)이전 단어(i -1)와 다를 시

if 현재 단어가 이전에 등장한 적이 있다면 (checker[현재 단어 index] == true)

answer -= 1;

break;

등장한 적이 없다면 checker[현재 단어 index] = true. 단어가 등장했음을 표시한다. 

문제 사이트 및 참고 사이트 : https://www.acmicpc.net/problem/1316



본 게시물은 개인적인 용도로 작성된 게시물입니다. 이후 포트폴리오로 사용될 정리 자료이니 불펌과 무단도용은 하지 말아주시고 개인 공부 목적으로만 이용해주시기 바랍니다.

댓글