본문 바로가기
PS/BOJ

[자바] 백준 2941 - 크로아티아 알파벳 (java)

by Nahwasa 2022. 12. 7.

 문제 : boj2941


 

필요 알고리즘 개념

  • 구현, 문자열
    • 문자열을 다루는 구현 문제이다.

※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.

 


 

풀이

  이 문제의 관건은 크로아티아 알파벳을 변경해서 사용한 부분을 하나의 알파벳으로 세주면 된다. 문자의 갯수만 알면 되므로 다음과 같이 생각해보자.

 

"ljes=njak" -> "?e??ak"

(lj, s=, nj 가 ?로 치환되었다.)

 

즉, 어떤 문자인지는 상관없고 아무튼 크로아티아 알파벳이 쓰인 부분을 하나의 Character로 변경한다면 남은 문자열의 길이가 답이 된다.

String[] wd = {"c=","c-","dz=","d-","lj","nj","s=","z="};
...
for (String w : wd) 	// 각 크로아티아 알파벳에 대해
	s = s.replaceAll(w, ",");	// 해당 크로아티아 알파벳을 전부 1 Character로 변경한다.
System.out.print(s.length());	// 이후 남은 문자열의 길이가 답이다.

 


 

코드 : github

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        String[] wd = {"c=","c-","dz=","d-","lj","nj","s=","z="};
        String s = new Scanner(System.in).next();
        for (String w : wd) s = s.replaceAll(w, ",");
        System.out.print(s.length());
    }
}

댓글