데굴데굴

[파이썬] 비밀지도 본문

algorithm/프로그래머스

[파이썬] 비밀지도

aemaaeng 2022. 6. 27. 22:30

코딩테스트 연습 - [1차] 비밀지도 | 프로그래머스 (programmers.co.kr)

 

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

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

programmers.co.kr

 

1. 십진수 입력을 이진수로 변환하기
2. 지도1과 지도2의 암호화된 배열 비교하기
3. 비교 후 공백과 '#'으로 표현한 code를 차례차례 answer 리스트에 넣어주기

 

def solution(n, arr1, arr2):
    answer = []
    bin1 = []
    bin2 = []
    
    # 이진수로 변환하기
    for dec in arr1:
        bin1.append(bin(dec)[2:].zfill(n))
    
    for dec in arr2:
        bin2.append(bin(dec)[2:].zfill(n))
        
    # bin1과 bin2를 비교하며 겹치는 부분 마킹, 공백 = 0 "", 벽 = 1 "#"
    code = ""
    
    for i in range(len(bin1)):
        
        for j in range(len(bin1[i])):
            if bin1[i][j] == "0" and bin2[i][j] == "0":
                code += " "
            elif bin1[i][j] == "1" and bin2[i][j] == "1":
                code += "#"
            else:
                code += "#"
            
        answer.append(code)
        code = ""
    
    return answer

십진수로 입력되는 수를 이진수로 변환한다.

파이썬에서 이진수를 입력하면 0x~~~의 형태로 출력되므로 세 번째 문자부터 출력되도록 슬라이싱한다.

 

이진수로 변환할 경우 앞자리가 0이면 출력되지 않는다.

하지만 이 문제에서는 이진수가 벽과 공백의 여부를 표현하고 있기 때문에 0이더라도 꼭 표기를 해주어야 한다.

따라서 자릿수를 채워주는 메소드인 zfill()을 이용하여 앞자리가 0이라 표기되지 않는 경우도 다뤄줘야 한다.

zfill()의 인자로는 자릿수 n을 받아 앞부터 0으로 채워져 총 자릿수가 n이 되도록 해준다.

 

bin1 = 지도1에 해당하는 수(arr1)를 이진수로 변환하여 저장하기 위한 리스트 

bin2 = 지도2에 해당하는 수(arr2)를 이진수로 변환하여 저장하기 위한 리스트

 

code = 지도 두 개를 비교하여 만들어진 최종 암호

 

같은 자릿수를 비교했을 때 지도1과 지도2에서 둘 다 0이면 공백, 둘 다 1이면 벽, 둘 중 하나라도 0이면 공백이므로 이 조건을 활용하여 코드를 작성한 후 생성된 최종 암호 문자열인 code를 answer 리스트에 차례대로 넣어준다.

 

마지막으로 answer를 리턴하면 끝

'algorithm > 프로그래머스' 카테고리의 다른 글

[파이썬] 신규 아이디 추천  (0) 2022.06.27
[파이썬] 신고 결과 받기  (0) 2022.06.26
Comments