반응형
https://www.acmicpc.net/problem/1316
- 문제
- 문제 풀이
백준 1316번 그룹 단어 체커는 실버 5 난이도의 구현 및 문자열 문제이다. 이 문제에서는 N개의 단어가 주어진다. 그리고 이 N개 단어들 중에서 그룹 단어가 몇 개인지를 출력해주면 된다. 그리고 그룹 단어는 단어에 있는 모든 문자가 연속해서 나타날 때 그룹 단어라고 한다.
이 문제에서는 한 문자 s가 이미 나타났는지 아닌지를 확인해야 하니 boolean형 배열 arr을 선언해준다. 알파벳이 총 26개이므로 이 배열의 크기도 26이다. 그리고 한 단어를 loop 돌리기 전에 우선 첫 번째 문자를 배열에 확인해준다.
그리고 for-loop을 i = 1부터 i < s.length()까지 돌려준다. 그리고 char c는 s.charAt(i)라고 정의하겠다. 이때 크게 두 가지의 경우로 나눌 수 있다. c가 이전 문자와 같은 경우와 c가 이전 문자와 다른 경우로 나눌 수 있다.
c가 이전 문자와 같으면 당연히 연속된 문자이니 continue 시켜준다.
c가 이전 문자와 다른 경우면 또 두 가지의 경우로 나눌 수 있다. 이전 문자와 다르고 이미 c가 나타났던 문자라면 그룹 단어가 아니게 된다. 하지만 이전 문자와 다르더라도 c가 처음으로 나타나는 경우라면 continue 시켜준다.
자세한 코드는 밑에서 참고할 수 있다.
- 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int count = n; //그룹 단어의 개수
for (int i = 0; i < n; i++) {
boolean[] arr = new boolean[26]; //이미 나타난 문자 확인용
String s = br.readLine();
arr[(int)s.charAt(0) - 97] = true; //우선 첫 단어 확인
for (int j = 1; j < s.length(); j++) {
char c = s.charAt(j);
//이전 문자와 같으면 continue
if (c == s.charAt(j-1)) continue;
//이전 문자와 다르고 이미 나타난 문자면 그룹 단어가 아니므로 count - 1
if (arr[(int)c - 97]) {
count--;
break;
}
arr[(int)c - 97] = true; //나타난 단어라고 확인
}
}
System.out.println(count);
}
}
반응형
'백준' 카테고리의 다른 글
[백준] 2441번 : 별 찍기 - 4 – JAVA [자바] (0) | 2022.07.10 |
---|---|
[백준] 10870번 : 피보나치 수 5 – JAVA [자바] (0) | 2022.07.10 |
[백준] 10828번 : 스택 – JAVA [자바] (0) | 2022.07.09 |
[백준] 1712번 : 손익분기점 – JAVA [자바] (0) | 2022.07.09 |
[백준] 5622번 : 다이얼 – JAVA [자바] (0) | 2022.07.09 |
댓글