문제
풀이
문제에 주어져있는 크로아티아 알파벳 테이블을 보고 입력받은 단어를 테이블에 맞게 알맞게 치환해주면 되는 문제!
왜 치환을 해야하냐면 예를들어 "adz="와 같은 문자열이 있다면,
"dz="에서 한 번 세고, "z="에서 한 번 더 세버리기 때문입니다.
"dz="를 보고 "dž"로 치환한다면 "z="가 사라지기 때문에 치환할 수 없기 때문에 이 점을 이용하기 위해서 치환해줍니다.
하지만 굳이 표에있는 알파벳으로는 치환해줄 필요는 없습니다..
왜냐하면 크로아티아 알파벳으로 변경해주는 문제가 아닌 몇 개의 크로아티아 알파벳으로 이루어져 있는지의 수를 세는 문제이기 때문입니다.
Swift에서는 문자열을 확인하면서 치환하는 replacingOccurrences(of:with:)
메서드를 사용할 수 있습니다.
따라서 주어진 테이블을 가지고 입력받은 문자열이 크로아티아 알파벳에서 변경된 상태라면,
"0", "1" 등등 크로아티아 알파벳에 사용되지 않는 문자열로 치환해줍니다.
예를들어 "dz=" -> "1"로 치환하게 된다면 원래는 길이가 3이지만 1로 바뀌어서 1개의 크로아티아 알파벳으로 이루어졌다고 확인할 수 있습니다.
다만 한가지 주의할 점이 있는데,
"dz="과 "z="를 보면 "z="는 "dz="의 부분 문자열이기 때문에 "dz="에 대해서 먼저 치환을 해야한다는 점입니다.
소스코드로 확인하면 더 이해가 잘 될 것입니다.
소스코드
후기
replacingOccurrences(of:with:)
메서드를 사용하면 좀 더 쉽게 풀 수 있는 문제였던 것 같습니다.
맨 처음 문제를 풀 때는, 입력받은 문자열을 하나씩 확인하면서 switch case문을 사용하여 크로아티아 알파벳과 맞는 문자열인지 확인해주는 식으로 구현했었는데, 코드가 너무 길어지고 가독성이 너무 떨어졌었습니다.
'PS > 백준' 카테고리의 다른 글
[BOJ] 백준 1712 손익분기점 (Swift) (0) | 2023.01.04 |
---|---|
[BOJ] 백준 1316 그룹 단어 체커 (Swift) (0) | 2023.01.02 |
[BOJ] 백준 5622 다이얼 (Swift) (0) | 2023.01.02 |
[BOJ] 백준 2908 상수 (Swift) (0) | 2023.01.02 |
[BOJ] 백준 1152 단어의 개수 (Swift) (0) | 2023.01.02 |