카테고리 없음
[위니브][20] Q2. 암호문
익명의 신디
2025. 5. 5. 12:40
Python Algorithm Best20 | WENIV
왕좌에 앉으려는 자! 자격을 증명하라! 알고리즘 문제 풀이를 통해 파이와 썬이 숨겨둔 모든 알고리즘을 해독할 수 있는 알고리즘 7원석을 얻고, 알고리즘 왕좌를 쟁취해 보세요!
pyalgo.co.kr
암호문
1. 문제 설명
라이캣은 신비의 섬 제주에서 7개의 원석을 확보하게 됩니다. 라이캣은 7개의 원석을 동료들에게 나눠주고, 라이언을 치기 위해 각자의 마을로 돌아가 힘을 모을 것을 당부합니다.
절대 스톤을 부여받은 동료들은 각각의 마을로 향합니다. 동료들은 먼 마을에서 고양이 마을로 돌아간 라이캣과 암호로 된 편지를 주고받습니다. 여러 가지 암호문 중, 최종 혁명(revolution) 날짜 암호문은 월과 일로 해독할 수 있습니다. 다음 규칙에 따라 편지에서 혁명의 날짜를 알아내 출정 준비를 하세요.
- 편지 안에 내용은 문자열로 주어집니다.
- 문자열 중에 r, e, v 뒤에 나오는 값을 더하여 나온 최종 숫자에서 앞자리를 월로 뒷자리를 일로 판단합니다.
- r, e, v 뒤에 나오는 숫자는 1부터 10까지입니다. 이를 넘어가는 숫자가 나올 경우 앞 숫자만 뽑아냅니다.
2. 제한 사항
- 1 ≤ r, e, v 뒤의 숫자 ≤ 10
- 11 ≤ 합한 값 ≤ 99
3. 입출력 예
암호문 혁명일
'a10b9r1ce33uab8wc918v2cv11v9' | '1월 6일' |
4. 입출력 설명
패턴에 맞게 뽑아낸 값은 아래와 같습니다. e33은 e3으로 인식해서 3만 뽑아내야 합니다.
['r1', 'e3', 'v2', 'v1', 'v9']
이 숫자를 모두 더하면 16으로 앞자리가 월, 뒷자리가 일이 됩니다. 따라서 혁명의 날짜는 1월 6일 입니다.
5. 풀이
python
def solution(data):
total = 0
n = len(data)
for i in range(n - 1):
if data[i] in ['r', 'e', 'v']:
# 다음 문자가 유효한 인덱스인지 확인
if i + 1 >= n:
continue
next_char = data[i + 1]
# 1. 다음 문자가 숫자인 경우
if next_char.isdigit():
# "10" 처리 (i+2가 유효한지 확인)
if next_char == '1' and i + 2 < n and data[i + 2] == '0':
total += 10
else:
total += int(next_char)
# 결과 처리 (합계가 10 이상인 경우만 월/일 계산)
str_sum = str(total).zfill(2) # 합계가 한 자리면 앞에 0 추가 (예: 5 → "05")
month = str_sum[0]
day = str_sum[1]
return f"{month}월 {day}일"