처음 생각
비교 기준이 되는 알파벳을 @, @ 바로 이전의 알파벳을 #, @ 이전의 알파벳들 중 # 을 제외한 알파벳들을 % 라고 하자
그러면 비교하려는 시점의 알파벳은 %...%#@ 라고 표현할 수 있다
처음에는 charAt 을 이용해서 이중 for 문으로 비교하려고 했다
@이 바로 #과 같으면 %들과 비교해서 바로 # 이외에 또 중복되는 게 있는지 확인하고
@이 #과 다르면 %들과 비교해서 중복되는 게 있는지 확인한다
지금 생각해보면 비교하는 기준이 이상하긴 한데 여튼 이렇게 생각하니까 풀리지 않았다
그리고 한 가지 간과한 사실은 @이 #과 같다는 것은 이미 %들이 중복되는 것이 없다는 말이다
즉, @과 #을 비교하려 하는 시점에는 %들은 중복되지 않았다는 검증을 거친 것이다
그러므로, @이 #과 같다면 %들이 중복되는지 검사 하지 않아도 되고
@이 #과 같다면 %들이 중복되는지 검사해야 한다
위의 모형 개념은 아래의 풀이에도 적용된다
내가 푼 방법
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 testCase = Integer.parseInt(br.readLine());
int cnt =0;
for(int i=0; i<testCase; i++) {
String word = br.readLine();
if(checkApb(word)) cnt++; // true 면 cnt++
}
System.out.println(cnt);
}
static boolean checkApb(String word) {
int[] apbCase = new int[26]; // 알파벳 케이스
boolean result = true;
for(int i=0; i<word.length()-1; i++) {
char now = word.charAt(i);
char next = word.charAt(i+1);
apbCase[now-'a'] = 1; // @ 인덱스를 1로 바꾸기
if(next==now) continue; // @ == # 이면 continue
else { // 아니면 중복비교
if(apbCase[next-'a'] == 1) {// 이미 존재하면
result = false;
break;
} else continue; // for문 처음으로
}
}
return result;
}
}
'백준 풀이' 카테고리의 다른 글
[백준 풀이_Java] 2875 대회 or 인턴 (0) | 2021.10.28 |
---|---|
[백준 풀이_Java] 7568 덩치 (0) | 2021.10.28 |
[백준 풀이_Java] 1946 신입사원 (0) | 2021.10.23 |
[백준 풀이_Java] 1026 보물 (0) | 2021.10.22 |
[백준 풀이_Java] 1463 1로 만들기 (0) | 2021.10.19 |