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 |
'Python3 > 프로그래머스' 카테고리의 다른 글
2022.06.01 [프로그래머스] (python 파이썬) 같은 숫자는 싫어 (0) | 2022.06.01 |
---|---|
2022.06.01 [프로그래머스] (python 파이썬) 다트 게임 (0) | 2022.06.01 |
2022.06.01 [프로그래머스] (python 파이썬) 부족한 금액 계산하기 (0) | 2022.06.01 |
2022.06.01 [프로그래머스] (python 파이썬) 나머지가 1이 되는 수 찾기 (0) | 2022.06.01 |
2022.06.01 [프로그래머스] (python 파이썬) 최소직사각형 (0) | 2022.06.01 |
댓글