[프로그래머스] LEVEL1 지도 찾기 (Python)

Loopy·2021년 6월 30일
2

프로그래머스

목록 보기
1/32
post-thumbnail

[프로그래머스] LEVEL1 지도 찾기


🧐 문제 설명


😍 나의 풀이

문제 자체는 쉽게 이해할 수 있었다. 지도의 모양이 그려질 힌트가 담긴 배열 arr1, arr2가 정수로 리스트에 저장되어 주어진다. 이를 이진법으로 변환해서 OR 연산한 결과가 내가 만들어야하는 배열이라는 문제였다. 그런데 두 가지 작은 문제가 있었는데,

  1. bin()이라는 python의 내장 함수를 통해 숫자를 2진법으로 바꾼 문자열을 출력할 수 있었는데 이 과정에서 9 = 01001로 출력되길 기대했지만 0b01001로 출력되는 문제점이었다.

→ 이는 리스트 슬라이싱을 통해 '0b'를 날리는 방식으로 해결했다.

  1. bin()로 정수를 이진수로 바꾸었을 때, n자리만큼 표현이 되어야하는데 값이 작아서 값이 없는 앞자리 0을 생략하고 출력하는 문제점이 있었다. 예컨대 결과값으로 n이 6일 때, 011110이 나오길 기대했지만 0이 생략되고 11110 으로 출력되는 문제점이었다.

→ 그래서 빈 리스트에 1.의 결과 값들을 저장해두고, 각 행의 이진수로 변환된 값이 행렬의 크기(지도의 길이 n과 동일)보다 작으면 앞에서 자릿수를 맞춰주기위해 '0'을 삽입하는 방식을 사용했다.
나중에 알았지만 이 문제는 rjust(), ljust(), zfill()을 사용하면 훨씬 간단하게 해결할 수 있었다😅

def solution(n, arr1, arr2):
    stack = []
    answer = []
    for i in range(n):
        stack.append(bin(arr1[i] | arr2[i])[2:])
    
    for i in stack:
        while len(i)<n:
            i = '0' + i
        i = i.replace('1', '#')
        i = i.replace('0', ' ')
        answer.append(i)
        
    return answer

👏다른 사람의 풀이

def solution(n, arr1, arr2):
    answer = []
    for i,j in zip(arr1,arr2):
        a12 = str(bin(i|j)[2:])
        a12=a12.rjust(n,'0')
        a12=a12.replace('1','#')
        a12=a12.replace('0',' ')
        answer.append(a12)
    return answer

🥇 Today I Learn

숫자에서 다른 진수의 문자열로 변환

>>> bin(42)
'0b101010'
>>> oct(42)
'0o52'
>>> hex(42)
'0x2a'

다른 진수의 문자열로 숫자형으로 변환하기

>>> int('0b101010', 2)
42
>>> int('0o52', 8)
42
>>> int('0x2a', 16)

rjust(), ljust(), zfill()

  • rjust()은 오른쪽으로 정렬하도록 도와줌 rjust를 통해 공백의 수, 공백을 메워줄 문자를 넣어줌

  • ljust()은 rjust()와 동일하고, 왼쪽 정렬

  • zfill()은 0을 왼쪽에 채워주는 역할

>>> print("77".rjust(5, "0"))
00077
>>> print("77".ljust(5,"0"))
77000
>>> print("77".zfill(3))
077
profile
공부 쫌 해!!!😂

1개의 댓글

comment-user-thumbnail
2021년 7월 31일

잘 보다 갑니다

답글 달기