본문 바로가기
알고리즘

[BOJ]1316 그룹단어체커

by 슈슈슉민 2023. 6. 22.

  중복이라 하여 map을 생각했다. 내가 map을 생각할 때면 락커룸에 이름 태그를 붙인 책들이 연상된다.
그래서 python에서는 dictionary라고 부르는 것 같다.

 

  코드에서 핵심은 단어를 정직하게 순회하는 것이다. 그리고 boolean으로 이 책들의 상태를 어떠한 로직으로 하자가 있는지 없는지 판단하는 method문을 짠다.

 

package BOJ1316_그룹단어체커;

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

public class Main {
	
	static int N;
	static String[] arr;
	static int cnt = 0;
	
	static boolean isGroup(String str) {
		
		Map<Character, Integer> map = new HashMap<>();
		
		//단어 순회
		for (int i = 0; i < str.length(); i++) {
			char now = str.charAt(i);
			//현재 글자가 없다면 추가 map에 추가 ㄱㄱ
			if(!map.containsKey(now)) { // 같은 글자 아니면
				map.put(now, i); 
			}else {//같은 글자면
				//연속되었을까?
				if(map.get(now) != i-1) { // 현재 글자의 인덱스와 그전에 나왔던 인덱스가 연속적이지 않을 때
					return false;
				}	
				map.put(now, i);//같은글자이고 현재 글자의 인덱스와 그전에 나왔던 인덱스가 연속적이면 map에 넣어주라
			}
		}
		return true;
	}
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		N = Integer.parseInt(br.readLine());
		arr = new String[N];
		
		for (int i = 0; i < N; i++) {
			arr[i] = br.readLine();
		}
		
		for (int i = 0; i < N; i++) {
			if(isGroup(arr[i])) {
				cnt++;
			}
		}
		
		System.out.println(cnt);
	}
}

 

'알고리즘' 카테고리의 다른 글

[나머지 연산] BOJ4375  (0) 2024.03.14
Sort  (0) 2023.08.03
[이론 노트]단순조합과 단순재귀  (0) 2023.06.19
[알고리즘 문제 해결 전략] 20장 문자열  (0) 2023.06.16
[BOJ]4358 생태학  (0) 2023.06.09