기록

[Python] 비밀지도 본문

[Study]/코딩테스트 연습

[Python] 비밀지도

Dannnnnn 2020. 11. 7. 15:13
반응형

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

 

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

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

programmers.co.kr

십진수를 이진수로 바꾼 후 비트연산을 활용한 문제입니다.

 

def solution2(n, arr1, arr2):
    answer = []
    for num1, num2 in zip(arr1, arr2):
        tmp = bin(num1 | num2)[2:]
        
        if len(tmp) < n:
            tmp = '0'*(n-len(tmp)) + tmp

        tmp = tmp.replace('1', '#')
        tmp = tmp.replace('0', ' ')
        answer.append(tmp)

    return answer

같은 인덱스의 원소끼리 비트연산을 해야겠죠?

zip() 함수를 통해 같은 인덱스의 원소 쌍을 뽑아냅니다.

그 후 원소쌍의 접두문자를 제거한 후 OR( | ) 연산을 합니다.

그런데 OR 연산 이후 이진수의 맨 앞자리가 0이면 이것이 생략되기 때문에 이것에 대한 예외처리를 해줘야합니다.

그래서 n-(len(tmp))로 필요한 자리만큼 0을 채워줬습니다.

그 후 replace() 함수를 통해 필요한 문자로 치환해주면 완료입니다.

 

def solution(n, arr1, arr2):

    answer = [bin(num1 | num2)[2:].zfill(n).replace('1', '#').replace('0',' ') for num1, num2 in zip(arr1, arr2)]

    return answer

한줄코딩

 

함께 알아두면 도움되는 내용

1) 문자열 정렬 함수

인자 : (width, fillchar)

ljust : 왼쪽 정렬

center : 가운데 정렬

rjust : 오른쪽 정렬

width의 길이만큼 정렬하되 fillchar로 공간을 채운다.

 

2) zfill(width) 함수

길이가 width가 될 때까지 문자열 앞에 '0'을 채우는 함수

 

반응형