반응형
https://www.acmicpc.net/problem/1316
이번 포스팅은 백준 알고리즘의 1316번: 그룹 단어 체크입니다.
그룹 단어란 입력받은 단어의 모든 문자에 대해서, 각 문자들이 모두 연속해서 나타나는 경우를 말합니다.
이번 문제에서 포인트는 아래의 두 가지입니다.
- 그룹 단어는 하나의 연속된 문자가 끝이 나면 다음 문자부턴 존재하지 않는다.
- 1개의 문자도 연속된 문자이다.
입력받은 단어 중에 그룹 단어의 갯수를 출력하면 됩니다.
문자열을 이용한 알고리즘 문제에서 자주 등장하는 패턴 중 하나는 아스키코드를 이용하는 것입니다.
아스키코드는 아래와 같은 표로 이루어져 있습니다.
대문자 A는 십진수로 65, 소문자 a는 십진수로 97입니다.
자바에서는 문자열을 사칙연산을 하면 알파벳들을 아스키코드표에 따라 십진수로 변환 후 계산해주기 때문에
알파벳의 개수 26개만큼 배열을 선언 후 아래와 같이 계산식을 넣으면 알파벳들을 체크해줄 수 있습니다.
alphabet[nowWord - 'a']
nowWord 가 b라면 소문자 b는 98이기 때문에 alphabet [1]이 되어 개발자가 원하는 방향으로 체크해줄 수 있습니다.
이러한 아스키코드를 이용한 패턴으로 그룹 단어 체크를 해주면 아래의 정답이 나오게 됩니다.
아스키코드를 이용한 문자열 알고리즘 문제는 비교적 자주 나오는 거 같습니다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int result = 0;
int count = Integer.parseInt(br.readLine());
for(int i = 0 ; i < count ; i++) {
if(check() == true) {
result++;
}
}
bw.write(String.format("%d", result));
br.close();
bw.flush();
bw.close();
}
public static boolean check() throws IOException {
boolean[] alphabet = new boolean[26];
int prevWord = 0; // 이전 문자
int nowWord = 0; // 현재 문자
String str = br.readLine();
for(int y = 0 ; y < str.length() ; y++) {
nowWord = str.charAt(y);
if(prevWord != nowWord) { // 이전문자와 같지 않다면 => 중복이 끝난 것
if(alphabet[nowWord - 'a'] == false) { // 해당문자가 처음 나온 경우
alphabet[nowWord - 'a'] = true;
prevWord = nowWord;
}else { // 해당문자가 이미 나온 경우 => 그룹단어가 아닌 것!!
return false; // 리턴
}
}else { // 같다면 => 중복문자
continue;
}
}
return true; // return false 되지 않았으면 그룹 단어 !!
}
}
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준 알고리즘][자바] 2292번 : 벌집 (0) | 2021.07.03 |
---|---|
[백준 알고리즘][자바] 1712번 : 손익분기점 (0) | 2021.06.13 |
[백준 알고리즘][자바] 2941번 : 크로아티아 알파벳 (0) | 2021.06.05 |
[백준 알고리즘][자바] 2908번 : 상수 (0) | 2021.06.05 |
[백준 알고리즘][자바] 1152번 : 단어의 개수 (0) | 2021.05.12 |
댓글