백준 2941번_파이썬 알고리즘
Q. 백준 2941. 크로아티아 알파벳
예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다. dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.
크로아티아 알파벳 | 변경 |
č | c= |
ć | c- |
dž | dz= |
đ | d- |
lj | lj |
nj | nj |
š | s= |
ž | z= |
(1) 입력 : 첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다. 단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.
(2) 출력 : 입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
A. 풀이
# Q 백준 2941. 크로아티아 알파벳 ★★
croa_list = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
croa_input = input()
cnt = len(croa_input)
# print(cnt)
for i in range(1, len(croa_input)):
if croa_input[i-2:i+1] == 'dz=':
cnt -= 2
# print("1번 "+str(cnt))
elif croa_input[i-1:i+1] in croa_list:
cnt -= 1
# print("1번 "+str(cnt))
print(cnt)
1) 변수 선언부
- 각 크로아티아 알파벳을 리스트에 넣어 생성한다.
- 크로아티아 알파벳을 입력받기 위한 croa_input 변수를 생성한다.
- 각 문자의 수를 카운트하기 위해 cnt변수를 생성하고, 일단 입력받은 croa_input의 총 길이를 넣는다.
(이후의 검사를 통해 하나의 문자일 경우 빼줄 예정이다.)
2) 반복문 (for문)
- 반복문의 변수 i는 1부터 len(croa_input)까지 반복한다.
이때 len(croa_input)+1까지 범위를 잡지 않는다. 그 이유는 뒤의 if조건문에 있다.
3) 반복문 내 조건문(if문)
- 주의할 것은 변경된 크로아티아 알파벳 중 'dž'는 'dz='로 3글자로 변경되지만 나머지 문자들은 2글자로 변경되는 것, 그리고 'ž'는 'z='로 변경되는 것 정도일 것 같다.
- 위의 이유로 'dz='의 여부를 먼저 if문으로 걸러주어야 한다. 이 때, 이 글자는 3개의 문자로 이루어졌기 때문에 인덱싱 범위 지정을 [i-2:i+1]로 만들어주어야 한다. 그래야 i-2~i까지 조건 검색이 가능하다. 만약 있을 경우 cnt는 하나의 문자가 3글자로 이루어져있으므로 cnt -=2 를 계산해준다.
- 위의 경우를 제외하곤 모두 2개의 문자로 이루어져 있다. 범위지정은 [i-1:i+1]로 잡아주고, cnt계산은 cnt -= 1을 계산한다.
- 위의 range에서 for문의 범위지정을 len(croa_input)+1까지 잡지 않는 이유가 여기에 있다. len(croa_input)+1까지 범위를 잡을 경우 인덱스를 i+1까지 잡았기 때문에 list 범위를 넘어가기 때문에 오류가 난다.
- 이는 어디까지나 위와 같이 코드를 짰기 때문이고, 다른 방식으로 범위를 잡을 수도 있다.
4) 출력
- cnt를 계산한 결과값을 print()문을 사용하여 출력한다.
R. 리뷰
- 조건이 많아질 수록 까다로운 부분들이 많이 생긴다. 특히 list의 범위, 단어의 인덱싱이 섞여있는 문제들은 많은 생각을 요하는 것 같다.
- 리스트, 문자열의 속성과, 각 함수들의 속성, 인덱싱의 용법들을 잘 참고하여 본 문제는 다시 풀어보는 것도 도움이 많이 될 것 같다.
'DEV > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 1712번(파이썬) (0) | 2022.10.13 |
---|---|
백준 알고리즘 1316번(파이썬) (0) | 2022.10.12 |
백준 알고리즘 5622번(파이썬) (0) | 2022.10.10 |
백준 알고리즘 2908번(파이썬) (0) | 2022.10.09 |
백준 알고리즘 1152번(파이썬) (0) | 2022.10.08 |
댓글