티스토리 뷰

728x90

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

 

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

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

programmers.co.kr

 

  • 해설 :

각 행마다 x라는 값을 이진수로 변경하여 구현할 수 있는 n x n 사이즈의 배열이 두 개 주어진다. 이 때, 이진값이 1이면 벽이고 0이면 통로이다.  이 두 배열을 겹쳤을 때 벽인 부분은 # 통로 부분은 공백으로 표시해서 한 배열에 담으면 된다.

 

 

 

 

  • 풀이 :

arr1과 arr2에 대해 각 자릿수를 이진수로 변경하고 가공한 배열에서 두 배열의 겹치는 위치의 원소 중 하나라도 1일 경우  #으로, 아닌 경우 빈 공백으로 처리하여 결과물을 반환한다.

 

 

 

 

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
def solution(n, arr1, arr2):
    answer = []
    c = n
    for a1,a2 in zip(arr1,arr2):
        n = a1
        s = []
        while n > 0:
            s.append(str(n%2))
            n //= 2
        while len(s) < c:
            s.append('0')
        map1 = s[::-1]
        n = a2
        s = []
        while n > 0:
            s.append(str(n%2))
            n //= 2
        while len(s) < c:
            s.append("0")
        map2 = s[::-1]
        s = ''
        for i in range(c):
            if map1[i] == '1' or map2[i] == '1':
                s += "#"
            else:
                s += " "
        answer.append(s)
    return answer
cs
320x100
댓글
© 2022 WonSeok, All rights reserved