안녕하세요. 회사와 함께 성장하고 싶은 KOSE입니다.

이번 포스팅은 백준 크로아티아 알파벳 자바 풀이를 진행하고자 합니다.

 

문제 출처: https://www.acmicpc.net/problem/2941

 

2941번: 크로아티아 알파벳

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z=

www.acmicpc.net

 

1. 풀이 소스

 

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));
        Set<String> set = new HashSet<>(List.of("c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="));
        
        int result = 0; // 결과 출력
        String str = br.readLine();
        String tmp = ""; // 문자열
        
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);            
            tmp += c; // 문자열 추가 하기
            
            if (tmp.length() == 3) { // 3개인 경우 dz 이후 문자
                if (tmp.equals("dz=")) {
                    result++; // 하나의 문자
                    tmp = ""; // 문자를 모두 소모한 경우이므로
                } else {
                    result += 2; // 앞의 두개가 불가한 문자이므로
                    tmp = String.valueOf(c); // 새로운 c 설정
                }
            }
            
            if (tmp.length() == 2) {
                if (tmp.equals("dz")) continue; // dz=일수 있으므로 넘기기
                if (set.contains(tmp)) tmp = "";
                else tmp = String.valueOf(c);
                result++; // 만약 set에 있다면 하나로 쳐서 ++, 만약 아니라면, 이전 길이에 대한 ++,                
            }
        }
        
        if (tmp.length() >= 1) { // 한개 혹은 두개에서 끝난 경우
            result += tmp.length(); // 문자열이 있다는 것은 크로아티아 알파벳 만족 불가
        }
        
        System.out.print(result);
    }
}

 

2, 풀이 중점 사항

 

정의해야 할 문자를 미리 set에 컬렉션 생성자로 생성하여 tmp 문자가 같은지 판단하는 방법으로 문제를 해결할 수 있었습니다.

실수하기 좋은 위치가 마지막에 한 번 더 tmp.length() >= 1 인지 확인하는 로직입니다.

 

예를 들어 tmp가 "" 아닌 상태에서 종료될 수 있습니다. 특정 문자 하나가 남아있거나, dz의 특성으로 continue 하여 넘어간 것일 수 있습니다. 따라서, tmp의 길이가 1 이상이라면 남아있는 문자열 개수를 더해주는 것이 중요하였습니다.

이상으로 크로아티아 알파벳 자바 풀이를 마치도록 하겠습니다. 

감사합니다!

+ Recent posts