본문 바로가기

두두의 알고리즘/문제

[진법변환] 프로그래머스 L1 '비밀지도' (Python)

728x90

<문제 링크>

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

 

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

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

programmers.co.kr


<문제 풀이>

  1. 2진수의 값을 AND 연산하여 2진수 문자로 출력
  2. 2진수의 맨 앞이 0일 경우, 0은 생략되므로 zfill() 메서드를 사용하여 길이 맞춰줌

<코드>

#1차 시도. 3번 오류
def solution(n, arr1, arr2):
    zip_ = []
    bin_ = []
    
    for i,k in zip(arr1,arr2):
        zip_.append(i | k)
        
    for idx, j in enumerate(zip_):
        bin_.append(bin(j))
    for i in range(len(bin_)):
        bin_[i] = bin_[i].replace('0b','')
        bin_[i] = bin_[i].zfill(len(max(bin_)))
    for i in range(len(bin_)):
        bin_[i] = bin_[i].replace('1','#')
        bin_[i] = bin_[i].replace('0',' ') 
        
    return bin_

 

def solution(n, arr1, arr2):
    answer = []
    
    for x,y in zip(arr1,arr2):
        answer.append(bin(x|y))
    
    answer = [x.replace("0b","") for x in answer]
    answer = [x.zfill(n) for x in answer]
    answer = [x.replace("1","#") for x in answer]
    answer = [x.replace("0"," ") for x in answer]
    
    return answer

 

<고쳐야 할 점>

  • for문 최대한 줄이기
  • replace 대신 [start:end] 활용해보기
  • zfill() 기억하기