Algorithm/프로그래머스

[프로그래머스/Python] 비밀지도

poppy 2021. 5. 18. 16:34
반응형

https://programmers.co.kr/learn/courses/30/lessons/17681?language=python3 

 

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

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

programmers.co.kr

def solution(n, arr1, arr2):
    answer = []
    
    for b1, b2 in zip(arr1, arr2):
        result = format(b1 | b2, 'b') # OR연산한 후 이진수로 변환
        result = result.rjust(n, '0') # 자리수를 맞춰줌
        result = result.replace('1', '#') # 1은 #으로 바꿔줌
        result = result.replace('0', ' ') # 0은 공백으로 바꿔줌
        answer.append(result)
    
    return answer

이 문제에 제시된 그대로 코드로 구현만 하면되는 문제였습니다.  두 지도를 OR연산한 값이 비밀지도였습니다. 그래서 for문을 돌면서 지도의 값을 하나씩을 가져와 OR연산을 한 후 2진수로 바꾸었습니다. 처음에는 자리수를 맞춰주는 코드를 넣지 않았습니다. 그랬더니 다음과 같이 테스트에 통과하지 못했습니다.

실행결과를 보니 자리수를 맞춰줘야 한다는 사실을 깨닫고 자리수를 맞춰주는 함수를 검색하여 알아낸 후 사용하였습니다. rjust() 를 통해 자리수를 n자리로 맞춘 후 이 문제에서 원하는 결과값으로 출력해주기 위해서 1 -> #, 0 -> 공백으로 바꿔주었습니다.

 

- 배운 점 -

① 이진수 변환

이진수로 변환하는 방법에는 두 가지가 있었습니다. 첫번째는 bin()을 사용하는 것과 두번째는 format()을 사용하는 것이었습니다. 둘 다 이진수로 변환하는 것은 똑같지만 bin()을 사용하면 접두어가 붙어서 출력되고 format()은 접두어없이 결과만을 출력합니다. 두 함수 모두 문자열로 출력되는 것을 유의해주세요! 다음 예시를 보면 쉽게 이해할 수 있을 것입니다

# bin() 사용
value = 60
b = bin(value)
print(b) # 출력 = 0b111100

# format() 사용
b = format(value, 'b')
print(b) # 출력 = 111100

 

② 문자열 정렬

파이썬에는 문자열을 좌측, 가운데, 우측으로 정렬해주고 필요에 따라 남는 자리수를 원하는 문자로 채워주는 함수가 있었습니다. 좌측 정렬은 ljust(), 가운데 정렬은 center(), 우측정렬은 rjust()를 사용하면 됩니다. 다음 예시를 보면 사용하는 법에 대해 알 수 있습니다.

s = '가나다라'
n = 7

s.ljust(n) # 좌측 정렬
s.center(n) # 가운데 정렬
s.rjust(n) # 우측 정렬

출력 결과

s = "123"
print(s.rjust(4, "0")) # 출력 = 0123
print(s.ljust(7, "1")) # 출력 = 1231111

 

반응형