https://www.acmicpc.net/problem/2941
문제
예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.
크로아티아 알파벳변경
č | c= |
ć | c- |
dž | dz= |
đ | d- |
lj | lj |
nj | nj |
š | s= |
ž | z= |
예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.
입력
첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.
단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.
출력
입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
이 문제는 크로아티아 알파벳으로 이루어진 단어의 길이를 구하면 되는 문제이다. 표에 나와 있는 특수 알파벳을 고려해야 하고 표에 없는 알파벳은 한 글자로 셈한다. 내가 생각한 구현 방법은 다음과 같다.
1. 단어의 길이를 구한다.
2. 단어에 있는 특수 알파벳의 개수를 구한다.
3. 단어의 길이에서 특수 알파벳의 개수만큼 뺀다.
구현은 딕셔너리를 사용했다. 특수 알파벳을 key값으로 정했고, value는 각 알파벳의 개수이다. 구현을 할 때 "z="와 "dz="를 주의해서 처리해야 한다. 예를 들어 "aadz="는 word.count("dz=")에서 1을 반환하지만 word.count("z=")에서도 1을 반환한다. 그래서 "z="의 개수에서 "dz="의 개수를 빼줘야 정확한 결과를 얻을 수 있다.
그리고 "dz="는 3개의 문자로 이루어져 있기 때문에 전체 길이에서 2개씩 빼줘야 한다. 그것을 모두 고려해서 아래와 같이 구현할 수 있었다.
croatia = {"c=": 0, "c-": 0, "dz=": 0, "d-": 0, "lj": 0, "nj": 0, "s=": 0, "z=": 0}
word = input()
ans = len(word)
for key in croatia.keys():
if word.count(key) and key != "z=":
croatia[key] += word.count(key)
if key == "z=":
croatia[key] = word.count(key) - word.count("dz=")
for key, value in croatia.items():
if key != "dz=":
ans -= value
else:
ans -= 2 * value
print(ans)
'개발 > 알고리즘' 카테고리의 다른 글
[BOJ(백준) 1712] 손익분기점 - 파이썬 풀이, 런타임 에러 (0) | 2021.05.30 |
---|---|
[BOJ(백준) 1316] 그룹 단어 체커 - 파이썬 풀이 (0) | 2021.05.30 |
[BOJ(백준) 1065]한수 - 파이썬 풀이 (0) | 2021.05.28 |
[BOJ(백준) 5622] 다이얼 - 파이썬의 switch와 딕셔너리 (0) | 2021.05.28 |
[BOJ(백준) 4673] 셀프넘버 - 파이썬 풀이 (1) | 2021.05.24 |