1. 문제
https://www.acmicpc.net/problem/1316
2. 풀이
- 문제 핵심은 입력에 주어진 문자가 연속적으로 들어오는지 확인 이전에 들어왔던 문자가 같은지가 핵심이다.
- boolean 배열을 활용하여 풀이
- 테스트 케이스가 주어지고 for문 안에 문자열을 입력한다.
- 각 문자열 마다 확인을 해주어야 함으로써 배열 초기화를 위하여 boolean 변수를 담은 배열을 for문 안에 생성한다. (알파벳 개수에 비례하여 26칸)
- check 라는 boolean 변수를 생성한다.
- 문자열 길이만큼 반복하는 for문을 만들어주고, charAt(j)으로 쪼개어 준다. (charAt(j) - 97 은 아스키코드로 변환 시 소문자 a는 97이라는 값을 가지고 있어, 해당 문자 - 97을 해준것이다.)
- 조건을 주어 arr[ch] 번째에 true를 만들어주고, 이중 if을 통하여 j번째 값과 j-1번째 값이 같지 않은지 확인한다. 같지 않으면 boolean변수를 false로 바꾸어 주고 해당 for문을 break문을 통해 나온다.
- boolean 배열의 초기값은 false를 가지고 있어서. 처음에는 무조건 else로 빠져나가게 될 것이다.
- 인덱스 안에 값이 true에 해당하고, 이전에 값이 같지 않으면 이미 그룹단어가 아니라는 것에 해당하기에 바로 빠져나오도록 해놓은 것이다.
3. 코드
package review;
import java.util.Scanner;
public class Q1316_220214 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int count = 0;
for (int i = 0; i < n; i++) {
String str = scanner.next();
boolean[] arr = new boolean[26];
boolean check = true;
for (int j = 0; j < str.length(); j++) {
int ch = str.charAt(j) - 97;
if (arr[ch]) {
if (str.charAt(j) != str.charAt(j - 1)) {
check = false;
break;
}
} else {
arr[ch] = true;
}
}
if (check) {
count++;
}
}
System.out.println(count);
}
}
'Algorithm' 카테고리의 다른 글
[Java] 백준 10798번 : 세로읽기 ver.2 (0) | 2022.02.16 |
---|---|
[Java] 백준 10804번 : 카드 역배치 (0) | 2022.02.16 |
[Java] 백준 10798번 : 세로읽기 (0) | 2022.02.15 |
[Java] 백준 1159번 : 농구 경기 (0) | 2022.02.13 |
[Java] 백준 9093번 : 단어 뒤집기 (0) | 2022.02.11 |