본문 바로가기

Data Engineering/Python

[코테] 프로그래머스 - 봉인된 주문

# 알파벳을 26진법으로 생각하기
def solution(n, bans):
    # a -> 1, b -> 2 ... aa -> 27, ab -> 28
    def str_to_num(s):
        num = 0
        for i, char in enumerate(reversed(s)):
            num += (ord(char) - ord('a') + 1) * (26 ** i)
        return num
    
    # 1 -> a, 2 -> b ... 27 -> aa, 28 -> ab
    def num_to_str(num):
        res = []
        while num > 0:
            num, rem = divmod(num - 1, 26)
            res.append(chr(ord('a') + rem))
        return "".join(reversed(res))
    
    # 삭제할 주문들을 숫자로 바꿔서 정렬
    ban_nums = sorted([str_to_num(b) for b in bans])

    # 삭제된 주문 만큼 n값 보정해주기
    for b in ban_nums:
        if b <= n:
            n += 1
        else:
            break

    return num_to_str(n)
    
    
    # https://school.programmers.co.kr/learn/courses/30/lessons/389481