본문 바로가기

PS/백준

[BOJ] 백준 2941 크로아티아 알파벳 (Swift)

반응형

문제

풀이

문제에 주어져있는 크로아티아 알파벳 테이블을 보고 입력받은 단어를 테이블에 맞게 알맞게 치환해주면 되는 문제!

왜 치환을 해야하냐면 예를들어 "adz="와 같은 문자열이 있다면,

"dz="에서 한 번 세고, "z="에서 한 번 더 세버리기 때문입니다.

"dz="를 보고 "dž"로 치환한다면 "z="가 사라지기 때문에 치환할 수 없기 때문에 이 점을 이용하기 위해서 치환해줍니다.

하지만 굳이 표에있는 알파벳으로는 치환해줄 필요는 없습니다..
왜냐하면 크로아티아 알파벳으로 변경해주는 문제가 아닌 몇 개의 크로아티아 알파벳으로 이루어져 있는지의 를 세는 문제이기 때문입니다.

Swift에서는 문자열을 확인하면서 치환하는 replacingOccurrences(of:with:) 메서드를 사용할 수 있습니다.

image

따라서 주어진 테이블을 가지고 입력받은 문자열이 크로아티아 알파벳에서 변경된 상태라면,
"0", "1" 등등 크로아티아 알파벳에 사용되지 않는 문자열로 치환해줍니다.

예를들어 "dz=" -> "1"로 치환하게 된다면 원래는 길이가 3이지만 1로 바뀌어서 1개의 크로아티아 알파벳으로 이루어졌다고 확인할 수 있습니다.

다만 한가지 주의할 점이 있는데,

"dz=""z="를 보면 "z="는 "dz="의 부분 문자열이기 때문에 "dz="에 대해서 먼저 치환을 해야한다는 점입니다.

소스코드로 확인하면 더 이해가 잘 될 것입니다.

소스코드

후기

replacingOccurrences(of:with:) 메서드를 사용하면 좀 더 쉽게 풀 수 있는 문제였던 것 같습니다.
맨 처음 문제를 풀 때는, 입력받은 문자열을 하나씩 확인하면서 switch case문을 사용하여 크로아티아 알파벳과 맞는 문자열인지 확인해주는 식으로 구현했었는데, 코드가 너무 길어지고 가독성이 너무 떨어졌었습니다.

반응형