문제
해결 방안 고민
•
문자열의 문자가 연속되지 않아야 하며 이미 앞에서 해당 문자가 입력된 경우 그룹 단어가 아니다.
•
그룹 단어의 개수를 출력해야 한다.
•
main 함수와 그룹 단어를 체크하는 함수를 만들어서 문제를 해결하기로 한다.
해결 방법
•
그룹 단어 체크 함수
boolean check() {
// 26개의 단어를 체크할 길이의 26 길이의 boolean 배열 선언
boolean[] check = new Boolean[26];
// 알고리즘에서 중요하게 작용할 prev 변수 선언 (이전 문자와 현재 문자 확인)
int prev = 0;
String str = input();
}
Java
복사
•
prev 의 문자와 해당 문자가 같다면?
◦
해당 문자가 중복된 문자인지 여부를 검사하지 않는다.
•
prev 의 문자와 해당 문자가 다르다면?
◦
해당 문자가 중복된 문자인지 여부를 검사한다.
boolean check() {
// 26개의 단어를 체크할 길이의 26 길이의 boolean 배열 선언
boolean[] check = new Boolean[26];
// 알고리즘에서 중요하게 작용할 prev 변수 선언 (이전 문자와 현재 문자 확인)
int prev = 0;
String str = input();
// 입력받은 문자열을 하나씩 꺼내서 그룹 단어인지 아닌지를 검사해야 함
for (int i = 0; i < str.length; i++) {
int now = str.charAt(i) // i 번째 문자 저장
if (prev != now) {
// 해당 문자가 처음 나오는 경우 (false 인 경우)
if (!check[now - 'a']) {
check[now - 'a'] = true;
} else {// 해당 문자가 이미 나온 적이 있는 경우 (그룹단어가 아님)
return false; // 함수 종료
}
} else { // 연속된 문자인 경우 그냥 continue
continue;
}
}
return true;
}
Java
복사
•
main 함수
◦
main 에서는 먼저 그룹단어 개수를 셀 answer 변수를 생성한다.
◦
N번 반복해야 하므로 for 문을 활용하며 check 메소드 호출 시 true 인 경우 answer를 1 증가 시킨다.
main() {
for (int i = 0; i < N; i++) {
if (check() == true) {
answer++;
}
}
print(answer);
}
Java
복사
코드
•
전역적으로 BufferedReader를 활용하기 위해 static으로 선언하여 진행
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws IOException {
// 단어의 개수 입력
int N = Integer.parseInt(br.readLine());
// 단어의 개수 출력
int answer = 0;
// 문자열 입력
for (int i = 0; i < N; i++) {
if (check()) {
answer++;
}
}
System.out.print(answer);
}
// 체크 함수 만들기
public static boolean check() throws IOException {
boolean[] check = new boolean[26];
int prev = 0; // 이전 문자 확인 위해 prev 변수 활용
String str = br.readLine();
for (int i = 0; i < str.length(); i++) {
int now = str.charAt(i); // i 번째 문자 저장 (현재 문자)
// 앞선 문자와 i 번째 문자가 같지 않을 경우
if (prev != now) {
// 해당 문자가 처음 나오는 경우
if (!check[now - 'a']) {
check[now - 'a'] = true;
prev = now; // 다음 문자 확인을 위해 prev = now
} else {
return false;
}
} else { // 앞선 문자와 i 번째 문자가 같은 경우 (연속된 문자)
continue;
}
}
return true;
}
}
Java
복사