본문 바로가기
Algorithm/Python

[Python] 프로그래머스 - [1차] 비밀지도(재귀)

by 힘팽 2022. 3. 6.

◈ 오류 정정 및 피드백 환영

 

코딩테스트 연습 - [1차] 비밀지도

비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다

programmers.co.kr


🔎문제 분석

주어진 숫자를 2로 계속 나누다가 몫이 0이 되면 나머지를 역순으로 출력하면 되기 때문에 이진법을 구현하기 위해서는 재귀로 접근하면 된다.

def to_bin(res, num):
    q, r = divmod(num, 2)
    if q==0:
        res.append(r)
        return    
    to_bin(res, q)
    res.append(r)
    
res = []
to_bin(res, 11)

다만 지도의 한 변의 길이가 고정이므로 이진수의 크기 역시 고정이므로 빈 리스트에 무작정 추가해주는 대신에 0으로 초기화한 리스트에 이진수로 변환한 숫자를 넣어주면 된다.

def to_bin(bin_num, num, v):
    q, r = divmod(num, 2)
    if q==0:
        bin_num[v] = r
        return    
    to_bin(bin_num, q, v-1)
    bin_num[v] = r

def to_bin(bin_num, num, v):
    q, r = divmod(num, 2)
    if q==0:
        bin_num[v] = r
        return    
    to_bin(bin_num, q, v-1)
    bin_num[v] = r
    
def solution(n, arr1, arr2):
    answer = []
    for n1, n2 in zip(arr1, arr2):
        map1, map2 = [0]*n, [0]*n
        to_bin(map1,n1,n-1)
        to_bin(map2,n2,n-1)
        answer.append(''.join(list(map(lambda x, y: " " if x+y==0 else "#", map1, map2))))
    return answer

댓글