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

비가츄·2022년 7월 25일
0

문제 설명

문제 링크는 다음과 같다.
https://www.acmicpc.net/problem/2941

위 문제의 핵심은 문자열 치환이다.
아래 크로아티아 알파벳표에 포함되는 문자열은 하나의 문자로 취급한다.

입력받은 문자에 대해 크로아티아 알파벳으로 치환 후 문자열의 길이를 출력하면 된다.

접근 방법

단순한 방법으로는 크로아티아 알파벳을 세고, 이를 없앤 후 나머지의 문자열 길이를 구하는 방법이 있다.
그러나 이 경우 유의해야하는 것이 있다. 아래의 예시를 보자.

nljj

크로아티아 알파벳인 lj를 없애버리면 남은 문자열은 nj가 된다.
그러나 이 또한 크로아티아 알파벳 nj와 일치하므로 문제가 발생한다.
원래는 n + lj + j 이므로 답은 3이 나와야 하나, 2가 나온다.

탐색한 크로아티아 알파벳을 완전히 제거하는 방식으로 하는 것은 바람직하지 않다.
따라서 나는 각 알파벳을 문자열에서 쓰이지 않았던 다른 문자 (*)로 치환하여 계산하는 방식을 사용하였다.

문제 풀이

치환해야하는 크로아티아 알파벳을 하나의 배열로 저장하였다.
이후 반복문을 통해 입력받은 문자열에서 각 알파벳들을 치환하는 작업을 수행한다.
마지막으로 치환된 문자열의 길이를 출력하였다.

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String str = br.readLine();
		String[] alphaArr = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};
		
		for (String s : alphaArr) {
			str = str.replaceAll(s, "*");
		}
		
		System.out.println(str.length());
		
		br.close();
	}
}

결과

실제 제출한 코드는 다음과 같다.

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

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String str = br.readLine();
		String[] alphaArr = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};
		
		for (String s : alphaArr) {
			str = str.replaceAll(s, "*");
		}
		
		System.out.println(str.length());
		
		br.close();
	}
}

제출 결과는 다음과 같다.

profile
오엥

0개의 댓글