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

백준 단계별로 풀어보기하다가 얻어갈게 있는 문제인 것 같아서 확실히 익히기 위해서 가져와봤습니다!

풀이는 항상 그렇듯 누구든 생각해낼수 있도록  풀어 봤습니다.

 

백준 2941번: 크로아티아 알파벳

 

etc-image-0
etc-image-1

 

항상 그렇듯 문제를 잘 읽는게 중요한데요. 위 목록에 있는것만이 저런 문자를 적을 수 없어 두글자로 대체된 크로아티아 알파벳입니다. 저 목록에 속한 문자들은 두 글자가 한 글자구요. a나 e같은 것들도 하나의 크로아티아 알파벳입니다.

 

자 먼저 목록표를 작성해 봅시다.

 

        String[] croatiaAlphabet = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};

 

입력값으로 받아온 문자가 저 목록에 속한다면? c=라고 되있는것을 두글자가 아닌 한글자로 읽어줘야겠죠.

 

그것을 위해 replace 함수를 사용합니다. 

 

  • 자바 replace 함수 사용법

str.replace(oldString, newString)입니다. 기존의 알파벳에서 바꾸고자하는 OldString을 가져와 새로운 문자열 newString으로 바꿔줍니다!

 

어떤 문자로 해도 상관없지만 크로아티아 문자가 대체된 것을 잘 알아볼 수 있게 @로 바꿔보겠습니다.

        for(int i =0; i < croatiaAlphabet.length; i++){
            alphabets = alphabets.replace(croatiaAlphabet[i], "@");
            }

 

 

아까 목록에 속하는 문자들은 하나로 읽는다고 했죠? 그러니까 글자의 갯수를 셀때 @를 통해 두 글자를 한 글자로 바꿔서 셀 수 있게 해줬습니다!

그리고 단순히 목록에있는것 만을 세는것이 아니라 a나 k처럼 기존 알파벳들도 크로아티아 문자기 때문에 한글자로 세주어야합니다!

 

그래서 이렇게 세주면 답이 나오는 문제였습니다 감사합니다!

 

System.out.println(alphabets.length());

 

 

전체 코드

package problemSolving;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;

public class Baekjoon2941 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String[] croatiaAlphabet = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};

        String alphabets = scanner.nextLine();

        for(int i =0; i < croatiaAlphabet.length; i++){
            alphabets = alphabets.replace(croatiaAlphabet[i], "@");
            }
        System.out.println(alphabets.length());

    }
}