알고리즘 문제 풀이

[프로그래머스 - Python] 비밀지도

김혠 2024. 8. 9. 22:25

문제링크

 

최종코드(코드링크)

def trans_binary(n, num, board):
    for i in range(n-1, -1, -1):
        if board[n - i - 1] == '#': 
            num -= (num // (2**i)) * (2**i)
            continue
        if num // (2**i) == 1:
            board[n - i - 1] = '#'
        else: board[n - i - 1] = ' '
        num -= (num // (2**i)) * (2**i)
    return board

def solution(n, arr1, arr2):
    answer = []
    board = [[''] * n for _ in range(n)]
    for i in range(n):
        trans_binary(n, arr1[i], board[i])
        trans_binary(n, arr2[i], board[i])
        answer.append(''.join(board[i]))
    print(board)
    return answer

 

 먼저, 입력 받은 숫자를 이진수로 변환해주었습니다. 시간 복잡도를 줄이기 위해 이진수로 변환해주는 과정에서 board에 값을 저장할 때 '#' 또는 '0'으로 저장할 수 있도록 하였습니다.

 

그럼에도 시간초과를 걱정하였으나 다행히 한번에 통과!

시뮬레이션으로도 해결 할 수 있는 간단한 문제였습니다 :)