문제 링크
https://www.acmicpc.net/problem/1316
풀이
결과값이 될 그룹 단어의 개수를 N으로 초기화 한다.
입력 받은 단어의 글자수만큼 반복문을 실행한다.
반복문 안에서 단어를 한글자씩 읽고, map을 활용한다
1) getOrDefault를 사용하여 존재하는 경우 값을 가져오고, 없는 경우 -1로 처리한다.
2) -1인 경우에는 현재 단어가 몇번째 단어인지 인덱스를 같이 넣어준다
3) 값이 존재하는데, 그 값이 현재 단어의 인덱스와 1 차이가 아니라면 그룹 단어가 되지 못하기 때문에 그룹 단어의 수를 감소하고 다음 입력으로 넘어간다.
예를 들어 aba 를 읽었는데 map에서 'a'의 값은 0이다. 현재 인덱스는 2이기 때문에 둘의 차이가 1이 아니다. 따라서 그룹 단어가 되지 못한다.
4) 값이 존재하고, 인덱스 차이가 1이라면 현재 인덱스로 map의 값을 갱신한다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
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 res = N;
for (int i = 0; i < N; i++) {
HashMap<Character, Integer> map = new HashMap<>();
String str = br.readLine();
for (int j = 0; j < str.length(); j++) {
char w = str.charAt(j);
int val = map.getOrDefault(w, -1);
if(val == -1){ //존재하지 않는 경우
map.put(w, j);
continue;
}
//값이 존재하는 경우 인덱스 비교
if(j-1 != val){
//연속으로 존재하지 않는다 그룹단어가 아님
res--;
break;
}
//값이 존재하고 인덱스가 1개 차이 날 때
map.replace(w, j);
}
}
System.out.println(res);
}
}'Problem Solving > BOJ' 카테고리의 다른 글
| [백준 Java] 14503 로봇 청소기 (0) | 2023.06.09 |
|---|---|
| [백준 Java] 13458 시험 감독 (0) | 2023.06.01 |
| [백준 Java] 1018 체스판 다시 칠하기 (0) | 2023.05.09 |
| [백준 Java] 1439 뒤집기 (0) | 2023.04.18 |
| [백준 Java] 7562 나이트의 이동 (0) | 2023.04.09 |