코딩 테스트/파이썬 문제 풀이
[백준] 16113번 파이썬 - 문자열, 구현
DaraDaraV
2024. 1. 25. 16:15
728x90
반응형
문제요약 (16113. 시그널)
1. 시그널은 "."과 "#"으로 이루어져 있다.
2. 시그널을 해독한 결과에는 반드시 숫자가 1개 이상 있다.
3. 시그널에 등장하는 모든 "#"은 올바른 숫자 패턴에 포함되어 있다.
4. 숫자와 숫자 사이에는 1열 이상의 공백이 있다. 여기서 공백은, 열의 성분이 모두 "."인 열을 의미한다.
5. 0부터 9는 아래와 같이 나타난다. 역시 "#"을 검은색, "."을 흰색으로 표시했다.
여러가지 예제들을 넣어보면서 구현이 맞는지 확인해봐야한다.
스스로 반례를 찾는게 중요하지만 시간이 없거나 정말 모르겠다면 (https://www.acmicpc.net/board/view/64923) 이 링크를 참고하길 바란다.
16113번: 시그널
zxcvber는 외계인을 연구하는 과학자다. 그는 지난 10년간 우주에서 오는 시그널를 연구했지만, 아무런 성과가 없었다. 그러던 어느 날, 갑자기 우주에서 이상한 시그널이 오기 시작했다. zxcvber는
www.acmicpc.net
풀이를 위한 부연 설명
- 코드에서 문제 풀이 시간을 줄이기 위하여 첫 줄에서 구분이 가능하다면 구분하도록 코드를 작성하였다.
- 코드별로 길이를 설정하여 확인한다.
- 구현에 대한 자세한 개념 설명과 연관 문제는 다음 링크를 참고하면 된다.
[코테 알고리즘] 구현 / 관련 문제
본 글은 "나동빈"님의 [이것이 코딩 테스트다]를 참고하여 작성하였으며, 필자가 직접 문제를 풀며 관련된 문제들을 찾아 정리하였습니다. 시리즈 보기 [코테 알고리즘] 파이썬 기본 / 관련 문제
daradarav.tistory.com
코드
import sys
input = sys.stdin.readline
n = int(input())
string = input().rstrip()
len = n // 5
signal = ["" for _ in range(len)]
for i in range(n):
signal[i % len] += string[i]
answer = ""
width = [3, 1, 4, 3, 3, 4, 3, 3, 3, 3]
idx = 0
while idx < len:
crt = signal[idx]
if crt == ".....":
idx += 1
# 0, 1, 6, 8
elif crt == "#####":
if idx == len - 1 or signal[idx + 1] == ".....":
answer += "1"
idx += width[1]
elif signal[idx + 1] == "#...#":
answer += "0"
idx += width[0]
else:
new = signal[idx + 2]
if new == "#.###":
answer += "6"
idx += width[6]
else:
answer += "8"
idx += width[8]
# 2
elif crt == "#.###":
answer += "2"
idx += width[2]
# 3
elif crt == "#.#.#":
answer += "3"
idx += width[3]
# 4
elif crt == "###..":
answer += "4"
idx += width[4]
# 7
elif crt == "#....":
answer += "7"
idx += width[7]
# 5, 9
else:
new = signal[idx + 2]
if new == "#.###":
answer += "5"
idx += width[5]
else:
answer += "9"
idx += width[9]
print(answer)
기억할 점
- 역시 구현은 반례를 찾는 것이 제일 중요하다.
반응형