백준
[백준 1316 with JAVA] 그룹 단어 체커
종식당
2025. 1. 30. 16:15
728x90
반응형
https://www.acmicpc.net/problem/1316
📝 문제 설명
문자열이 주어졌을 때 해당 문자열 내에서 같은 문자는 무조건 연속적으로 나와야 한다. 예를 들어 aaabbkkk 이는 그룹단어이다.
반대로 aakkaa이는 그룹단어가 아니다. 그룹단어가 몇 개인지 출력하면 된다.
✨ 제출 코드
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());
String [] lst = new String[N];
for(int i = 0; i < N; i++){
lst[i] = br.readLine();
}
int result = N;
for(int i = 0; i < N; i++){
boolean [] check = new boolean[26];
for (int j = 0; j < lst[i].length(); j++){
char ch = lst[i].charAt(j);
if(check[ch - 'a'] == false){
check[ch - 'a'] = true;
} else if(j > 0 && ch!= lst[i].charAt(j-1)){
result -= 1;
break;
}
}
}
System.out.println(result);
}
}
✌️ 코드 설명
문자열 하나 내에서 같은 문자가 연속적으로 나오는 지 체크하기 위해서 boolean배열을 알파벳 개수만큼 선언해 주었다.
그리고 for문을 통해 문자열 하나하나 돌고 다시 for문을 통해 문자열 내의 문자 하나하나를 돌았다. 이때 charAt를 통해서 문자 하나하나에 접근했다.
이 문자 하나들은 모두 소문자로 이루어져 있어 a b c d 이렇게 구성되어 있을 것이다. 이 문자 하나에서 a를 빼면 0 1 2 3 이렇게 구성이 될 테니 이 값들을 통해 알파벳 순서대로 boolean배열에 값을 저장할 수 있다.
처음 배열을 선언했을 때 모두 false로 되어 있을 테니 for문을 통해 문자 하나에 접근할 때 false면 true로 바꿔준다.
그리고 만약에 해당 값이 true인데 이전의 값과 다음 값이 다르다면 result -1을 해준다. 이때 result는 전체 문자열의 개수이다.
그룹단어가 아닌 것들을 골라내어 그룹단어의 개수를 출력해 주었다.
😎 마무리
알파벳의 등장 여부 및 상태를 저장하기 위해서는 알파벳 크기만큼의 배열을 만들어서 푸는 것이 가장 좋은 방법인 것 같다.
728x90
반응형