티스토리 뷰
문제
https://www.acmicpc.net/problem/1316
언어
자바 JAVA
로직
배열 생성
알파벳 a-z까지 총 26개가 존재하므로 배열을 만들어준다.
boolean[] check = new boolean[26];
반복문
입력받은 문자열의 길이만큼 반복문 실행
boolean[] check = new boolean[26];
for (int i = 0; i < word.length(); i++) {
..생략
}
연속되는 문자인지 확인
- if문을 걸어 현재 index가 check 배열에서 true인지 false인지 판단한다.
- true : 현재 문자를 확인하기 전에 이미 나온 적이 있다. -> 그룹 단어 x
- false : 현재 문자가 처음으로 나왔다. 2번으로 이동
- 현재 index + 1부터 문자열의 끝까지 반복문을 돌린다.
- 현재 index의 문자 = 현재 index + 1의 문자 : 연속되는 단어이므로 계속 반복문 실행
- 현재 index 문자 != 현재 index +1의 문자 : 더 이상 연속되는 단어가 아니므로 반복문 종료.
2-1의 경우 i++을 해야하는 이유 : i번째 인덱스와 j번째 인덱스가 같은 문자이기 때문이다. 따라서 i와 j번째 인덱스가 같은 문자를 언제까지 갖는지 체크하기 위함이다.
2-2의 경우 i = j - 1을 해야 하는 이유 : i번째 인덱스와 j번째 인덱스의 문자가 다르기 때문이다. j에 대한 for문이 종료되면 i번째 for문을 돌리기 위해 i++이 수행되고 i번째 인덱스에는 다른 문자를 만나 종료된 j번째 인덱스가 되기 때문이다.
for (int i = 0; i < word.length(); i++) {
char c = word.charAt(i);
// 그룹 단어 체커가 아닌 경우
if (check[c - 'a']) {
return false;
}
// 현재 index의 문자가 처음으로 나왔을 때
check[c - 'a'] = true;
// 연속되는 문자인지 확인 -> 새로운 문자를 만날 때까지 반복
for (int j = i + 1; j < word.length(); j++) {
char c2 = word.charAt(j);
if (c != c2) {
i = j - 1;
break;
}
i++;
}
}
최종 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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 = 0;
for (int i = 0; i < n; i++) {
String word = br.readLine();
if (isContinuous(word)) {
count++;
}
}
System.out.println(count);
}
private static boolean isContinuous(String word) {
boolean[] check = new boolean[26];
for (int i = 0; i < word.length(); i++) {
char c = word.charAt(i);
if (check[c - 'a']) {
return false;
}
check[c - 'a'] = true;
for (int j = i + 1; j < word.length(); j++) {
char c2 = word.charAt(j);
if (c != c2) {
i = j - 1;
break;
}
i++;
}
}
return true;
}
}