카테고리 없음

[위니브][20] Q2. 암호문

익명의 신디 2025. 5. 5. 12:40

 

https://pyalgo.co.kr/?page=2

 

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}일"