알고리즘

[프로그래머스 lv 1] [1차] 비밀지도.py

파뱁 2022. 3. 4. 18:52
728x90

<문제 설명>

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

 

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

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

programmers.co.kr

2개의 비밀지도가 주어지고, 그 두개의 각 칸에 하나의 #(벽)이 있으면 그 곳은 최종적으로 벽이다. 

비밀지도는 10진수로 주어지는 데, 이를 2진수로 변환해서 0이면 " "(공백), 1이면 "#"로 간주한다.

 

입출력의 예는 다음과 같다.

매개변수
n 5
arr1 [9, 20, 28, 18, 11]
arr2 [30, 1, 21, 17, 28]
출력 ["#####","# # #", "### #", "# ##", "#####"]

 

매개변수
n 6
arr1 [46, 33, 33 ,22, 31, 50]
arr2 [27 ,56, 19, 14, 14, 10]
출력 ["######", "### #", "## ##", " #### ", " #####", "### # "]

 

<문제 풀이 아이디어>

우선 주어진 10진수를 2진수로 변환하고, 5자리를 채우기 위해 만약에 111이라면 00111로 만들어주는 작업을 진행한다.

이후 2개의 배열의 0, 1값을 비교하여 하나라도 1이면 벽인 "#"을, 모두 0이면 공백(" ")을 넣어주는 문자열을 만들고,

5자리가 될때마다 정답 배열에 append 한다.

 

<문제 풀이 코드>

def solution(n, arr1, arr2):
    answer = []
    arr1_bin = []
    arr2_bin = []
    for i in range(n):
        arr1_bin.append(bin(arr1[i])[2:])
        arr2_bin.append(bin(arr2[i])[2:])
        arr1_bin[i] = ('0' * (n-len(arr1_bin[i]))) + arr1_bin[i]
        arr2_bin[i] = ('0' * (n-len(arr2_bin[i]))) + arr2_bin[i]
    
        tmp = ''
        for p in range(n):
            if arr1_bin[i][p] == '1' or arr2_bin[i][p] == '1':
                tmp += '#'
            elif arr1_bin[i][p] == '0' and arr2_bin[i][p] == '0':
                tmp += ' '
        answer.append(tmp)
        
    return answer

채점 결과

728x90
반응형