문제 url:
그룹 단어 체커
문제:
1. BufferedReader를 통해 입력을 받도록 한다.
2. 해당 단어가 등장했는지 여부를 확인하기 위해 알파뱃 26개 배열을 생성한 후
여부를 확인할 수 있도록 boolean 타입으로 false(미확인된)을 초기화 시켜주자
3. N개 단어를 받을 수 있도록 N을 입력받는다.
4. N번만큼 반복문을 생성
5. 코드가 연속되는지 확인하기 위해 char prev라는 변수를 정의해준 다음
prev를 통해 같은 단어가 연속적으로 등장하는지 여부를 확인한다.
6. 연속되지 않거나 새로운 단어가 등장할 시 해당 단어가 속한 인덱스의 값을 false(미확인) -> true(확인)으로 변경한다.
7. true가 존재하는데, 해당 인덱스가 등장하면 그룹단어가 아닌것으로 판정나므로 해당 단어는 세지 않도록 조치한다.
8. 그룹 단어 개수를 출력한다.
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//qc: 이전의 알파뱃을 가지고 있고, 알파뱃 26자리 배열을 만든 다음, 그 안에 false값을 넣고 존재하면 true로 바꾸며 한개씩 찾는 방식으로 진행
int count = 0;
// 첫줄에 단어 개수 입력
int n = Integer.parseInt(br.readLine());
// n번만큼 반복할 수 있도록 반복문 생성
for (int i = 0; i < n; i++) {
// 알파뱃 26자리의 공간을 담당할 배열 생성 (true, false로만 나타낼것이니 boolean타입)
boolean[] isExist = new boolean[26];
for (int b = 0; b < isExist.length; b++) {
isExist[b] = false;
}
char prev = ' ';
String word = br.readLine();
// 단어의 길이만큼 반복하며 존재 여부를 검토
for (int j = 0; j < word.length(); j++) {
// 현재 문자형이 이전 문자형과 다르면서 본인 자리 배열에 있는 boolean이 true이면 for문을 벗어나라.
if(word.charAt(j) != prev && isExist[word.charAt(j) - 'a']) {
break;
}
// 이전단어와 현재 단어가 다르다면 본인 자리 배열에 true 입력과 prev 변수에 현재 문자형을 초기화
if(prev != word.charAt(j)) {
isExist[word.charAt(j) - 'a'] = true;
prev = word.charAt(j);
}
//count에 값을 더할 목적으로 j인덱스가 마지막 인덱스일 경우엔 count를 더해 그룹단어로 인정.
if(j == word.length()-1) {
count++;
}
}
}
System.out.println(count);
}
}
int count
: 그룹 단어의 개수를 의미
boolean[] isExist = new boolean[26];
for (int b = 0; b < isExist.length; b++) {
isExist[b] = false;
}
위 코드가 해당 알파뱃의 등장여부를 확인하기 위한 배열 생성 코드이다.
char prev = ' '
는 이전 알파뱃의 값을 저장하는 변수
if(word.charAt(j) != prev && isExist[word.charAt(j) - 'a']) {
break;
}
먼저 현재 알파뱃이 이전 알파뱃(연속되는 않는)이 아니거나, 현재 알파뱃 배열에 값이 true(존재)할 시 현재 반복문을 중지
if(prev != word.charAt(j)) {
isExist[word.charAt(j) - 'a'] = true;
prev = word.charAt(j);
}
위 코드는 만약 연속되지 않으면서 새로운 코드일 시, 현재 알파뱃 배열에 값이 true(존재)로 초기화
-> 즉 이제는 존재한다는 의미!
if(j == word.length()-1) {
count++;
}
위 코드는 j가 마지막 인덱스 번호 일때 그룹 단어를 의미하기에 개수를 한개 더한다.