https://www.acmicpc.net/problem/1316
1316번: 그룹 단어 체커
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때
www.acmicpc.net
문제
알고리즘
1. N을 입력받는다.
2. for문을 N만큼 돌면서 String str을 입력받는다.
3. str이 그룹단어인지 확인하고 boolean값을 리턴하는 check함수를 만든다.
- check 함수에 str을 인자로 넘겨주면 str의 길이만큼 for문을 돌린다.
- 이전 문자와 현재 문자를 저장하기 위해 int pre와 int now를 생성한다.
- pre와 now가 같지 않다면, now가 이전에 나왔던 문자인지 확인한다.
- 만약 이전에 나왔던 문자라면 바로 false를 리턴한다.
- 만약 처음 나온 문자라면 arr[현재 문자]를 true로 바꿔주고 pre에 now를 저장한다.
- 정상적으로 for문이 끝나면 true를 리턴한다.
4. check가 true를 리턴하면 그룹단어의 개수를 세는 cnt에 1을 더해준다.
풀이
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int cnt = 0;
int N = Integer.parseInt(br.readLine());
for(int i=0; i<N; i++){
String str = br.readLine();
if(check(str)) {
cnt++;
}
}
br.close();
bw.write(Integer.toString(cnt));
bw.flush();
bw.close();
}
public static boolean check(String str) {
int pre = 0;
int now = 0;
boolean [] arr = new boolean[26];
for(int i=0; i<str.length(); i++){
now = str.charAt(i);
// 이전 문자와 현재 문자가 같지 않으면,
if(pre != now) {
// 현재 문자가 처음 나온 문자라면,
if(!arr[now - 'a']) {
arr[now -'a'] = true;
pre = now ;
}
// 현재 문자가 이전에 나왔던 문자라면,
else if(arr[now - 'a']){
return false;
}
}
}
return true;
}
}
'Baekjoon' 카테고리의 다른 글
[백준] 2745번 진법 변환 (Java) (0) | 2024.02.12 |
---|---|
[백준] 2563번 색종이 (Java) (0) | 2024.02.12 |
[백준] 2941번 크로아티아 알파벳 (Java) (0) | 2024.01.31 |
[백준] 1157번 단어 공부 (Java) (0) | 2024.01.31 |
[백준] 2557번 Hello World (Java) (0) | 2024.01.26 |