[Java][1316] 그룹 단어 체커
문제:
https://www.acmicpc.net/problem/1316
1316번: 그룹 단어 체커
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때
www.acmicpc.net
코드:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // n개 입력 받음
int ans = 0;
for(int i=0;i<n;i++) {
String s = sc.next(); // 단어 입력
boolean flag = true; // 연속 체크
int [] cnt = new int[s.length()]; // 같은 문자 개수 체크
// 입력받은 단어의 각 알파벳 개수를 센다.
// happy의 경우 cnt[0] =1(h) , cnt[1](a) = 1,
// cnt[2](p) =2, cnt[3](p) = 1, cnt[4](y) = 1
for(int j=0;j<s.length();j++) {
for(int k=j;k<s.length();k++) {
if(s.charAt(j) == s.charAt(k)) {
cnt[j]++;
}
}
}
//알파벳의 개수만큼 다른 알파벳이 존재하는지 체크
//존재한다면 flag = false;
for(int j=0;j<s.length();j++) {
for(int k=j;k<j+cnt[j];k++) {
if(k < s.length() && s.charAt(j) != s.charAt(k)) {
flag = false;
}
}
}
// 존재하지 않는다면 ans를 1 증가
if(flag) {
ans++;
}
}
System.out.println(ans);
}
}
s = aaba를 입력 받았을 경우
cnt[0] = 3 , cnt[1] = 2, cnt[2] = 1, cnt[3] = 1 이다.
s.charAt(0)이 s.charAt(0)~s.charAt(2) 까지 다른 알파벳이 있는지 체크한다.
s.charAt(2) = b 이므로 flag가 false가 된다.
s = aaab를 입력 받았을 경우
cnt[0] = 3 , cnt[1] = 2, cnt[2] = 1, cnt[3] = 1 이다.
s.charAt(0)이 s.charAt(0)~s.charAt(2) 까지 다른 알파벳이 있는지 체크한다.
s.charAt(1)이 s.charAt(1)~s.charAt(2) 까지 다른 알파벳이 있는지 체크한다.
s.charAt(2)이 s.charAt(2)~s.charAt(2) 까지 다른 알파벳이 있는지 체크한다.
s.charAt(3)이 s.charAt(3)~s.charAt(3) 까지 다른 알파벳이 있는지 체크한다.
다른 알파벳이 존재하지 않으므로 ans를 1 증가시킨다.
위와 같은 과정을 n 만큼 반복한다.
다른 분의 풀이
[백준] 1316번 : 그룹 단어 체커 - JAVA [자바]
https://www.acmicpc.net/problem/1316 1316번: 그룹 단어 체커 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속..
st-lab.tistory.com