백준/JAVA

[백준/JAVA] 2941번 크로아티아 알파벳

누룽지맛치킨 2023. 1. 18. 09:58
  • 크로아티아 알파벳의 개수를 세는 문제

https://www.acmicpc.net/problem/2941

1. 문제

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.

예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.

2. 문제 접근

  • 문자열을 입력받는다.
  • 정수형 변수에 문자열의 길이를 저장한다.
  • 문자열의 char를 하나씩 접근하면서 다음 조건이 있을 경우 정수형 변수의 값을 1씩 뺀다.
    1) '-'이고 앞의 char가 'c' 혹은 'd'일 경우
    2) '='이고 앞의 char가 'c' 혹은 'z' 혹은 's' 혹은 'z'인 경우
    3) 2)번의 'z'인 경우 중 하나 더 앞의 char가 'd'인 경우

3. 코드

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class b_2941 {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = br.readLine();
        int word = input.length();
        for(int i=1;i<input.length();i++) {
            if(input.charAt(i)=='-' && (input.charAt(i-1)=='c' || input.charAt(i-1)=='d')) {
                word--;
            }
            else if(input.charAt(i)=='=' && (input.charAt(i-1)=='c' || input.charAt(i-1)=='z' || input.charAt(i-1)=='s')) {
                if(i>=2 && input.charAt(i-2)=='d' && input.charAt(i-1)=='z') {
                    word--;
                }
                word--;
            }
            else if(input.charAt(i)=='j' && (input.charAt(i-1)=='l' || input.charAt(i-1)=='n')) {
                word--;
            }
        }
        System.out.println(word);
    }
}