250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 프로그래머스
- Join
- Len
- 파이썬
- count
- pcce 기출문제
- html
- ORDER BY
- Python3
- 데이터
- GIT
- 프로젝트
- 설계
- date_format
- 아이엠어바텐더
- where
- 파이썬 슬라이싱
- YOLOv5
- css
- python
- 단어 공부
- 슬라이싱
- map
- SQL 고득점 Kit
- sql
- Django
- 코딩테스트 연습
- 파이썬 몫
- List Comprehension
- 백준
Archives
- Today
- Total
nan + nan = 2nan
[백준][Python3] #2941. 크로아티아 알파벳 본문
728x90
코드 입력
test = input()
list_cro = ['c=', 'c-', 'd-', 'lj', 'nj', 's=', 'z=']
cnt = 0
while True:
if len(test) >= 4:
if test[:3] == 'dz=':
cnt += 1
test = test[3:]
elif test[:2] in list_cro:
cnt += 1
test = test[2:]
else:
cnt += 1
test = test[1:]
elif len(test) == 3:
if test == 'dz=':
cnt += 1
break
elif test[:2] in list_cro:
cnt += 1
test = test[2:]
else:
cnt += 1
test = test[1:]
elif len(test) == 2:
if test in list_cro:
cnt += 1
break
else:
cnt += 1
test = test[1:]
elif len(test) == 1:
cnt += 1
break
else:
break
print(cnt)
해당 문제의 경우, 시간이 좀 걸렸다.
처음에는 그냥 크로아티아 알파벳을 전부 리스트에 넣고 for문을 돌리면서 걸리면 replace로 하나씩 빼면 되지 않을까,라고 생각했는데 오산이었다.왜냐면 중복한 알파벳이 있을 경우 replace로 바꾼다면 중복값이 1개로 대체될 뿐더러, 알파벳이 중간에 있는 경우에도대체를 해버려 의미가 달라질 경우가 있기 때문이었다.
# 중복값 문제
test = 'ddz=z='
test = test.replace('z=', '')
## test는 'dd'
# 중간에서 변환 문제
test = 'ddz=z='
test = test.replace('dz=', '')
## test는 'dz=', 본래 의미와 달라질 수 있음. 글자는 앞에서부터 읽어야 하기 때문
그래서 while문을 이용해 글자를 앞에서부터 탐색하면서 가장 긴 알파벳을 우선적으로 검사하고,
그 다음은 리스트의 2글자짜리를 검사하고, 그것도 없다면 한 글자로 인식하여 지우면서 count를 하는 로직이다.
나중에 replace를 쓸 때도 이런 점들을 고려해서 사용해야겠다.
출처 : 백준 Online Judge
https://www.acmicpc.net/problem/2941
'Python > 백준 알고리즘' 카테고리의 다른 글
[백준][Python3] #1712. 손익분기점 (0) | 2023.01.16 |
---|---|
[백준][Python3] #1316. 그룹 단어 체커 (0) | 2023.01.16 |
[백준][Python3] #5622. 다이얼 (0) | 2023.01.15 |
[백준][Python3] #2908. 상수 (0) | 2023.01.15 |
[백준][Python3] #1152. 단어의 개수 (2) | 2023.01.15 |
Comments