
같은 알파벳이 반복되도 되지만 다른 알파벳이 나오면서 끊기게 되면 다시 나오면 안되는!
그런 규칙이다...
좀 오랫동안 고민했던 문제인데
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 num = Integer.parseInt(br.readLine());
int count = 0;
for (int c = 0; c < num; c++) {
String st = br.readLine();
boolean[] test = new boolean[26];
boolean isGroupWord = true;
for (int i = 0; i < st.length(); i++) {
if (i > 0 && st.charAt(i) != st.charAt(i - 1)) {
if (test[st.charAt(i) - 'a']) {
isGroupWord = false;
break;
}
}
test[st.charAt(i) - 'a'] = true;
}
if (isGroupWord) {
count++;
}
}
System.out.println(count);
}
}
count 를 0으로 해놓고,
test 배열을 만들어서
각 단어별로 검사할때마다 초기화 되도록 하였다.
각 단어를 검사할때, 현재 문자가 이전 문자와 다르다면,
이전에 본 문자인지 확인해보는 과정이다.
만약 이미 본 문자라면 그룹 단어가 아니므로
isGroupWord를 false로 설정하고 반복 종료한다.
반복이 끝나면 isGroupWord가 true인 경우 count를 증가시킨다.
아래는 다른 방식으로 해본것이다!
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 num = Integer.parseInt(br.readLine());
int count=num;
for(int c = 0;c<num;c++) {
String st = br.readLine();
boolean test[] = new boolean[26];
for(int i=0;i<st.length()-1;i++) {
if(st.charAt(i)!=st.charAt(i+1)) {
if(test[st.charAt(i+1)-97]==true) {
count--;
break;
}
}
test[st.charAt(i)-97]=true;
}
}
System.out.println(count);
}
}
이 코드에서는 count를 0이 아닌 num 으로 설정하여
특정 조건에 해당되면 1씩 감소하는 식으로 되어 있다.
for문 안에서는 각 단어를 먼저 검사한 후,
boolean 배열을 만들어
이중for문 안에서는 단어의 문자를 검사한다.
if문으로 현재 문자와 다음 문자를 비교한 후,
그륩 단어의 참 거짓을 나눈다.
연속된 문자가 아니면서 이전에 나온 문자라면 그룹 단어가 아니므로 카운트를 감소시킨다.
결론
첫번째 코드와 두번째 코드는,
count 를 증가시키냐, 감소시키냐의 차이,
그래서 첫번째 코드는 그룹 단어가 아닌 단어의 수를 출력하는거고
두번째 코드는 그룹 단어인 수를 세어 출력하는 것이다.
'Coding Test > Baekjoon' 카테고리의 다른 글
| [JAVA] 2566번 최댓값 (0) | 2024.07.22 |
|---|---|
| [JAVA] 25306번 너의 평점은 (0) | 2024.07.15 |