중복이라 하여 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 |