상세 컨텐츠

본문 제목

[프로그래머스] 389481. 봉인된 주문 | Python3, Level3, 수학

Coding Test/문제풀이

by yooputer 2025. 4. 17. 16:59

본문

https://school.programmers.co.kr/learn/courses/30/lessons/389481

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


문제 요약

1. 주문은 알파벳 소문자로 구성되어 있고, 11글자 이하이다. 

2. 주문 리스트는 주문의 길이 오름차순, 알파벳순 오름차순으로 정렬되어 있다. 

모든 주문 리스트 = ['a', 'b', 'c', ... , 'aa', 'ab', 'ac', ... 'aaa', 'aab', 'aac', ... , 'zzzzzzzzzzz']

3. 금지된 주문 목록이 주어질 때, 금지된 주문을 제외한 주문중 n번째 주문을 구하여라


해결 프로세스

1. 모든 주문 리스트에서 n번째 주문을 찾는다. 

2. 금지된 주문들을 순회하며 만약 현재 주문이 금지된 주문이면 다음 주문으로 변경한다. 


정답 소스코드

def solution(n, bans):
    # 금지된 주문 삭제전 n번째 주문 구하기
    주문 = ''
    주문번호 = n
    while 주문번호 > 0:
        mod = (주문번호 - 1) % 26
        주문 = chr(mod + 97) + 주문
        주문번호 = (주문번호 - 1) // 26

    # 삭제된 주문만큼 다음 주문처리
    bans.sort(key=lambda x: (len(x), x))	# 정렬 필요
    for ban in bans:
        if len(ban) < len(주문) or (len(ban) == len(주문) and ban <= 주문):
            주문 = 다음주문(주문)
        else:
            break

    return 주문

def 다음주문(주문):
    if 주문 == '':
        return 'a'

    마지막글자 = 주문[-1]
    나머지부분 = 주문[:-1] if len(주문) > 1 else ''

    if 'a' <= 마지막글자 <= 'y':
        return  나머지부분 + chr(ord(마지막글자) + 1)

    return 다음주문(나머지부분) + 'a'

 

관련글 더보기