일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Android
- androidstudio
- bitmap
- BOJ
- Canvas
- CS
- Database
- DBeaver
- DP
- Ecilpse
- Eclipse
- firebase
- git
- github
- GooglePlayServices
- gradle
- IDE
- IntelliJ
- java
- json
- kotlin
- level2
- linux
- mariadb
- MYSQL
- Paint
- permission
- python
- Sorting
- sourcetree
Archives
will come true
[백준] 1346번 - 그룹 단어 체커 (Java) 본문
728x90
문제
https://www.acmicpc.net/problem/1316
코드
import java.util.Arrays;
import java.util.Scanner;
// 그룹 단어 체커
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = Integer.parseInt(sc.nextLine());
boolean[] alphabet = new boolean[26];
int count = 0;
for (int i = 0; i < N; i++) {
Arrays.fill(alphabet, false); // 알파벳 등장 여부 초기화
String str = sc.nextLine();
char before = str.charAt(0); // 이전 문자
int j = 0;
for (j = 0; j < str.length(); j++) {
char curr = str.charAt(j);
// 이전에 나온적 있는데, 앞 문자와 다를 경우 (연속으로 사용된 게 아닐 경우)
if (before != curr && alphabet[curr - 'a'] == true) {
break;
}
alphabet[curr - 'a'] = true;
before = curr;
}
// for문 중간에 break 걸리지 않고 끝까지 진행됐을 경우 그룹단어 OK
if (j == str.length()) {
count++;
}
}
System.out.println(count);
}
}
- 문자열 내에서 a~z 소문자 알파벳의 등장 여부를 boolean[] 배열에 저장한다. 새로운 문자열 체크 전에 모든 알파벳이 아직 등장하지 않았다는 의미로 배열을 false로 초기화해줘야 한다.
- true : 이전에 등장한 적 있는 알파벳
- false : 이전에 등장한 적 없는 알파벳
- 그룹 단어가 아닌 경우는 문자가 연속으로 사용되지 않고, 다른 문자 뒤에 한번 더 등장했을 때 뿐이다.
- 즉, 이전에 나온적 있는 알파벳이고(boolean[] 배열 값이 true), 앞 문자와 다를 경우 그룹 단어가 아니다.
- boolean[] alphabet : 이전에 나온적 있는 문자인지 체크용
- char before : 해당 문자의 바로 이전 문자 확인용
- for문 중간에 break 조건에 걸리지 않고 끝가지 진행되었을 경우, 마지막 반복을 수행한 후 j++ 된 값으로 for문 반복 여부를 체크하기 때문에 j값은 str.length()이 된다. 이를 위해 for문 밖에 변수 j를 선언해둬서 for문 밖에서 j값을 참조할 수 있도록 한다.
int j = 0;
for (j = 0; j < str.length(); j++) {
// 반복코드
}
if (j == str.length()) {
count++;
}
728x90
'Algorithm' 카테고리의 다른 글
[백준] 1193번 - 분수찾기 (Java) (0) | 2022.02.08 |
---|---|
[백준] 2292번 - 벌집 (Java) (0) | 2022.02.08 |
[백준] 2941번 - 크로아티아 알파벳 (Java) (0) | 2022.02.07 |
[백준] 5622번 - 다이얼 (Java) (0) | 2022.02.07 |
[백준] 2908 번 - 상수 (Java) (0) | 2022.02.07 |
Comments