본문 바로가기
Coding Test/Python

[프로그래머스] [1차] 비밀지도 Python Code

by giem 2022. 8. 27.
반응형

프로그래머스 [1차] 비밀지도를 Python으로 풀어보겠다.


문제

문제가 약간 복잡하기 때문에 입출력 예제도 첨부했다.

 

비밀지도 배열 arr1, arr2가 주어지고 이를 이진법으로 해독하여

둘 중 하나라도 1인 부분에 벽('#')을 표시하고 아닌 부분에 공백(' ')을 표시하여 지도를 만드는 문제이다.


구현

구현은 쉽다.

 

먼저 진법 변환을 한 후

n으로 자릿수를 맞춰준다.

 

그 후 둘 중 하나라도 1인 곳에 #, 둘 다 0인 곳에 공백을 넣어서

answer에 추가한다.


코드
def solution(n, arr1, arr2):
    answer = []

    for i in range(n):
        num1, num2 = arr1[i], arr2[i]
        temp1=""
        temp2=""

        while num1>0:
            num1, mod = divmod(num1,2)
            temp1 = str(mod) + temp1
        while num2>0:
            num2, mod = divmod(num2,2)
            temp2 = str(mod) + temp2

        temp1 = temp1.zfill(n)
        temp2 = temp2.zfill(n)
        tot=""
        for j in range(n):
            tot+= '#' if (temp1[j] == '1' or temp2[j] == '1') else ' '
        answer.append(tot)

    return answer

구현에 쓴 것과 같이 구현했다.

먼저 while분에서 각각 진법을 변환하고

zfill을 이용해 0을 추가하여 자릿수를 n으로 맞춰주었다.

 

마지막으로 정답을 만들기 위해 1이 있는 곳에 # 아닌 곳에 공백을 넣고

그 string을 answer에 추가했다.


다른 풀이

파이썬을 잘 아는 분이 짠 것 같은 코드를 가져와보았다.

def solution(n, arr1, arr2):
    answer = []
    for i,j in zip(arr1,arr2):
        a12 = str(bin(i|j)[2:])
        a12=a12.rjust(n,'0')
        a12=a12.replace('1','#')
        a12=a12.replace('0',' ')
        answer.append(a12)
    return answer

먼저 zip을 써서 한번에 처리하도록 했고

비트 연산자 | 로 처리를 한뒤 bin으로 이진법 변환을 했다.

뒤의 [2:]는 진법 표현을 지우기 위해 사용했다.

그 후 1은 #으로

0은 공백으로 처리하여 answer에 더한 깔끔한 코드이다.

반응형

댓글