본문 바로가기
Python3/프로그래머스

2022.06.01 [프로그래머스] (python 파이썬) [1차]비밀지도

by ian's coding 2022. 6. 1.
728x90
반응형

 

https://programmers.co.kr/learn/courses/30/lessons/17681

 

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

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

programmers.co.kr


풀이

 

이 문제를 해결하기 위해 각 가로줄에 주어진 10진법을 n자리의 2진수로 바꿔야한다.

그래서 각 가로줄을 2진수로 바꾼 값을 저장할 temp1, temp2를 만들고

각 가로줄의 10진법을 num1, num2에 저장했고, 지수 a를 저장했다.

원래 2진수를 구할 때, 나머지를 저장해 반전시켜주는 방식으로 했지만,

이 문제는 n길이의 2진수를 구해야했기 때문에 10진수를 2**(n-1)로 나눠주며 몫을 저장해 바로 2진수를 구했다.

 

예를 들면 10진수가 9이고 n이 5이면, 먼저 9를 2**(4)로 나눈 몫 0을 temp에 넣으면 '0'이 되고 나머지를 다음으로 넘겨준다. 다음으로 다시 9를 2**(3)으로 나눈 몫을 temp에 넣어 '01'로 만들고 나머지인 1을 다음으로 넘겨준다.

이 과정을 반복하면 temp는 '01001'인 5자리의 2진수를 구할 수 있다.

 

그리고 두 지도의 같은 가로줄을 2진수로 바뀐 후 각 자리수의 값을 비교해 둘중 하나라도 1이 있으면 temp3에 '#'을 넣어주고, 둘다 0이면 ' '공백을 넣어주었다.

해당 가로줄을 모두 비교하고 '#', ' '을 모두 채웠으면 answer에 추가하고 다음 가로줄을 검사했다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
def solution(n, arr1, arr2):
    answer = []
 
    for i in range(n):
        temp1=''
        num1=arr1[i]
        a=n-1
        while a>=0:
            b=num1//(2**a)
            num1=num1%(2**a)
            temp1+=str(b)
            a-=1
            
        temp2=''
        num2=arr2[i]
        a=n-1
        while a>=0:
            b=num2//(2**a)
            num2=num2%(2**a)
            temp2+=str(b)
            a-=1
        temp3=''
        
        for j in range(n):
            if temp1[j]=='1' or temp2[j]=='1':
                temp3+='#'
            else:
                temp3+=' '
        answer.append(temp3)
        
    return answer
cs

 

 

 

728x90
반응형

댓글