Algorithm/BOJ

[BOJ - Silver V] 그룹 단어 체커 / ⭕

cks._.hong 2024. 8. 20. 22:50

그룹 단어 체커

1. 제출 코드 (12분 23초 / 구현)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

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 answer = 0;
        for(int i = 0; i < N; i++) {
            String input = br.readLine();
            Map<Character, Integer> map = new HashMap<>();
            char prev = input.charAt(0);
            map.put(input.charAt(0), 0);
            boolean isValid = true;
            for(int j = 1; j < input.length(); j++) {
                if(prev != input.charAt(j)) {
                    if(map.get(input.charAt(j)) == null) {
                        map.put(input.charAt(j), 0);
                    } else {
                        isValid = false;
                        break;
                    }
                }
                prev = input.charAt(j);
            }
            if(isValid) {
                answer++;
            }
        }
        System.out.println(answer);
    }
}

 

2. 구현 로직

  • 가장 처음에 문자를 map에 저장
  • 문자열을 하나씩 탐색하면서 이전에 문자와 동일한지 판별
  • 다를 경우에 map에 해당 key가 있는 지 확인하고 없다면 map에 put 있다면 2번째로 나온 것이므로 연속되지 않음 그룹 판별
  • 문자열을 다 돌고 isValid가 유효하다면 정답

3. 유의할 점

  • array를 활용해서 탐색을 하려다가 문자열의 크기가 커지면 시간이 오래걸릴 거 같아 map을 이용해봤다.