코딩테스트/프로그래머스

[프로그래머스] [Level 1] [2018 KAKAO BLIND RECRUITMENT] [1차] 비밀지도

박소민 2022. 3. 8. 14:28
문제) [1차] 비밀지도
 

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

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

programmers.co.kr

 

  • 내 풀이
    • zip() 함수로 리스트 두개 한 번에 불러서 비교
    • 숫자 → 2진수 문자열 변환 : .format(숫자, '(길이)b')

* 2진수 변환 

 

[Python] 2진수 / 8진수 / 16진수

2진수 / 8진수 / 16진수 표현 앞에 접두어를 붙여 구분한다 2진수 : 0b 8진수 : 0o 16진수 : 0x print(42==0b101010) #결과 True 숫자 10진수 → 2진수 / 8진수 / 16진수 변환 파이썬 내장함수 사용 접두어가..

yygs321.tistory.com

def solution(n, arr1, arr2):
    s=''
    answer = []
    
    for a,b in zip(arr1,arr2):
        a=format(a,'b') #숫자를 2진수로 치환: .format(숫자, 'b')
        b=format(b,'b')
        #2진수 길이 맞추기
        while len(a)<n:
            a='0'+a
        while len(b)<n:
            b='0'+b
            
        for i,j in zip(a,b):
            if (i=='0' or i==' ') and (j=='0' or j==' '):
                s+=' '
            else:
                s+='#'
        answer.append(s)
        s='' #s 초기화
                
    return answer
n=5
arr1=[9, 20, 28, 18, 11]
arr2=[30, 1, 21, 17, 28]
print(solution(n,arr1,arr2)
#결과
["#####","# # #", "### #", "# ##", "#####"]

 

  • 다른 사람 풀이
    • 숫자를 2진수로 변환하는 방법
    • bin(숫자) :  '0b2진수문자열' 형식으로 변환
      • 2진수: 0b / 8진수 0o / 16진수 0x 
      • bin(a | b) 로 a와 b의 이진수 값을 한번에 합침 : 길이가 달라도 가능!
    • n칸이 되도록 빈자리에 0 채우기
      • .zfill(n)
      • .rjust(n, "채울 문자열")
def solution(n, arr1, arr2):
    answer = []
    for a,b in zip(arr1,arr2):
        a12=bin(a|b)[2:]

        a12=a12.rjust(n,'0') #a12=a12.zfill(n) 도 가능
        a12=a12.replace('1','#')
        a12=a12.replace('0',' ')
        answer.append(a12)
    return answer