코딩테스트/백준

[백준 JAVA] 1316 - 그룹 단어 체커

kittae 2024. 11. 25. 23:21

 

해당 문제는 2년전에 푼 문제이기도 하고 쉽게 구현할 수 있는 문제였다.

 

먼저 나의 큰틀을 주석으로 정리해보았다.

/*
* Boolean을 사용, 총 26개의 int형 배열을 선언
* 각각의 아스키코드를 사용하여 배열 위치를 지정
* 한 번 사용된 문자는 false -> true로 변경
* 만약 i - 1이 같은 문자 && 해당 배열이 true이면? -> 넘어감
*  만약 i - 1이 같은 문자가 아니며, && 해당 배열이 true이면? -> break
*
* i - 1의 값을 사용하니깐, StirngIndex에러가 안뜨게 조심!
* */

 

해당 시간과 메모리는 충분하다고 판단해 구현에 제약이 있진 않았다.

그리고 나는 Boolean을 사용하여 문제를 풀었다.

Boolean을 사용한 이유는 추후 연속되지 않는 중복된 문자를 판단하기 위함이다!

 

최종코드

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[] barr = new Boolean[26];
            Arrays.fill(barr, Boolean.FALSE);
            String str = br.readLine();

            for (int j = 0; j < str.length() - 1; j++) {

                barr[str.charAt(j)-97] = true;

                if (str.charAt(j) == str.charAt(j+1) && barr[str.charAt(j+1)-97] == true)
                    continue;

                if (str.charAt(j) != str.charAt(j+1) && barr[str.charAt(j+1)-97] == true) {
                    count--;
                    break;
                }
            }
        }

        System.out.println(count);
    }
}

 

볼때마다 느끼는건데, C++의 처리속도는 놀랍다

 

배운점

점점 문자열과 문법에 대해 이해가 되는 느낌이 든다. 차근차근  단계별로 풀어보고, 새로운 문법을 배우면 좋을 거 같다!