https://www.acmicpc.net/problem/1316
백준 1316번 그룹 단어 체커 문제 링크입니다.
핵심
그룹 단어의 개수를 찾는 것입니다. 하지만 규칙이 있는데, 연속된 문자는 허용하지만, 같은 문자가 떨어져서 나오면 그룹 단어가 아니게 됩니다.
정답 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num=sc.nextInt();
int count=0;
for(int i = 0;i<num;i++) {
String str = sc.next();
loop:
for(int k = 0;k<str.length();k++) {
for(int j=k; j<str.length();j++) {
if(str.charAt(k)==str.charAt(j)) {
if(j-k==1)break;
else if(j-k>1) {
count++;
break loop; }
}
}
}
}
System.out.println(num-count);
}
}
코드 해설
num에 총 입력받을 문자열의 수를 넣는다.
이후 문자열을 입력받는다.
그 다음 charAt()을 사용하여, 문자열의 한 문자만 비교를 한다.
즉 처음부터 그 뒤에 나오는 문자들을 비교하는 것이다.
같은 문자가 나오면 그 문자들 사이의 간격을 비교하는 것이다.
만약 간격이 1이라면, 바로 옆에 나왔다는 뜻이다. 즉 aa, bb.. 이런 식의 형태이다.
이때 break를 쓰는 이유는 aaa와 같이 반복된 문자가 2번을 넘어가면,
간격이 1을 넘게되는데,
그룹 단어로 구별되는 오류를 막기 위해 k값을 올리는 곳으로 탈출하여 aaa는 맨 앞 a를 넘어가 aa를 분석하게 된다.
간격이 1을 넘게 되면, count를 1 올리고, 지정된 루프를 탈출하게 된다.
이때 loop를 사용하는 이유는 이중 for문을 탈출하기 위해 사용되었다.
탈출하는 곳은 단어를 입력받는 곳으로 간다.
이미 그룹 단어가 아니라는 것을 알게 되었으므로, 다음 단어를 분석하기 위해서 이다.
count 된 값은 그룹 단어가 아닌 값이므로, 전체 값인 num에서 count를 뺀 값이 그룹 단어의 수이다.
개선점이나 오류가 있다면, 댓글로 알려주시면 감사하겠습니다.
'PS > 알고리즘 문제풀이' 카테고리의 다른 글
[백준]2108번 통계학(java) (1) | 2022.07.04 |
---|---|
[백준]2581번 소수(java) (0) | 2022.07.04 |
[백준]2838번 설탕 배달(java) (2) | 2022.07.04 |
[백준]10757번 큰수A+B(java) (0) | 2022.07.04 |
[백준]4673번 셀프넘버(java) (0) | 2022.07.04 |