[백준 JAVA] 1316번 풀이 - 그룹 단어 체커
by mini_minimport java.util.Scanner;
/**
* 1316번 풀이
* 그룹 단어란 단어에 존재하는 모든 문자에 대하여, 각 문자가 연속으로 나타나는 경우만 말한다.
* 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고,
* kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만,
* aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다.
*
* 첫째줄에는 단어의 개수 n이 들어온다.
* 둘째줄부터 n개의 줄에 단어가 들어온다.
* = 첫째줄에 그룹 단어의 개수를 출력한다.
*
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int group = 0;
//알파벳 -> a는 97 , z 는 122
//97해서 계산하기
for ( int i = 0; i < n; i++ )
{
int [] arr = new int[26];
int pre = -1; //이전값
String s = sc.next();
for ( int j = 0; j < s.length(); j++ )
{
int word = s.charAt(j) - 97;
if ( pre != word ) {
pre = word;
arr[word] ++; //word 세팅.
}
}
for ( int k = 0; k < arr.length; k++ )
{
//System.out.print(arr[k] + " ");
if (arr[k] > 1) {
group++;
break;
}
}
//System.out.println();
}
System.out.println(n - group);
sc.close();
}
}
풀이
붙어 있는 알파벳이 아니면 그룹 단어로 보지 않는 문제이다.
이제 "단어" 라고 하면 아스키 코드를 활용하는 것을 먼저 떠올리는 것 같다.
아스키 코드 값을 가지고 배열을 만들어서, 그룹으로 나오는 단어인지 체크하는 로직을 생각했다.
알파벳 배열(26개) = [ 0 0 0 0 0 ...] 으로 세팅하고, 연속으로 나오는 단어인지 아닌지 체크했다.
✨ 참고로 알파벳 소문자 a 는 97, z 는 122이다. (s.charAt(j) - 97 해줬다.)
'매일매일 알고리즘 공부' 카테고리의 다른 글
[백준 JAVA] 2292번 풀이 - 벌집 (0) | 2023.07.26 |
---|---|
[백준 JAVA] 25206번 풀이 - 너의 평점은 (Hashmap 활용) (0) | 2023.07.25 |
[백준 JAVA] 24267번 풀이 - 알고리즘 수행시간 6 (0) | 2023.07.19 |
[백준 JAVA] 24266번 풀이 - 알고리즘 수행시간5 (0) | 2023.07.19 |
[백준 JAVA] 24265번 풀이 - 알고리즘 수행시간4 (0) | 2023.07.18 |
블로그의 정보
개발자 미니민의 개발로그
mini_min