반응형
출처: https://www.acmicpc.net/problem/2941
Input
nljj
Output
3
Input
c=c=
Output
2
변경된 문자에서 크로아티아 알파벳이 몇 개 인지 출력하는 문제이다.
예를 들어, [ljes=njak]은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다.
단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다.
lj와 nj도 마찬가지이다. 목록 외에 알파벳은 한 글자씩 센다.
* 주의해야하는 case는 'dz='만 주어진 목록에서 3글자이므로 배열 indxe 제어 예외 처리
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
// 문자열 입력
String str = sc.next();
sc.close();
String[] changedCroatia = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};
String[] firstLetter = {"c", "d", "l", "n", "s", "z"};
int i=0;
int answer = 0;
// 입력받은 모든 문자열길이 만큼 탐색
while(i < str.length()) {
String target = str.substring(i, i+1);
// 변경된 크로아티아 알파벳의 '가능성'이 있는지 앞글자를 이용해 우선 확인
boolean isFirstLetter = false;
for(int j=0; j<firstLetter.length; j++) {
if(target.equals(firstLetter[j])) {
isFirstLetter = true;
break;
}
}
// 변경된 크로아티아 문자열인지 확이한다.
boolean isChangedCroatia = false;
if(isFirstLetter) {
// 먼저 dz= 조합이 가능한지 확인한다. 왜냐하면 이 조합만 길이가 3이므로
// 배열을 벗어나지 않는 한에서 target을 포함한 길이가 3인 문자열을 들고와서 대조한다.
if(i+3 <= str.length() && str.substring(i,i+3).equals("dz=")) {
answer++;
isChangedCroatia = true;
i = i + 3;
}else { // target을 포함한 길이가 2인 문자열을 들고와 변경된 크로아티아 문자열인지 확인한다.
// 배열을 벗어나는지 먼저 확인
if(i+2 <= str.length()) {
for(int j=0; j<changedCroatia.length; j++) {
if(str.substring(i,i+2).equals(changedCroatia[j])) {
i = i+2;
answer++;
isChangedCroatia = true;
break;
}
}
}
}
}
if(!isChangedCroatia) {
// 문제에서 주어진 목록이 없다면
// 변경없이 단순한 크로아티아 문자이다.
// 다음 탐색을 이어간다.
answer++; i++;
}
}
System.out.println(answer);
}
}
반응형
'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글
[BOJ] 백준 15651 N과 M(3) (0) | 2021.02.21 |
---|---|
[BOJ] 백준 1002 터렛 (0) | 2021.02.21 |
[BOJ] 백준 2960 에라토스테네스의 체 (0) | 2021.02.21 |
[BOJ] 백준 1929 소수 구하기 (0) | 2021.02.21 |
[BOJ] 백준 1747 소수&팰린드롬 (0) | 2021.02.21 |
댓글