반응형
프로그래머스 [1차] 비밀지도를 Python으로 풀어보겠다.
문제
문제가 약간 복잡하기 때문에 입출력 예제도 첨부했다.
비밀지도 배열 arr1, arr2가 주어지고 이를 이진법으로 해독하여
둘 중 하나라도 1인 부분에 벽('#')을 표시하고 아닌 부분에 공백(' ')을 표시하여 지도를 만드는 문제이다.
구현
구현은 쉽다.
먼저 진법 변환을 한 후
n으로 자릿수를 맞춰준다.
그 후 둘 중 하나라도 1인 곳에 #, 둘 다 0인 곳에 공백을 넣어서
answer에 추가한다.
코드
def solution(n, arr1, arr2):
answer = []
for i in range(n):
num1, num2 = arr1[i], arr2[i]
temp1=""
temp2=""
while num1>0:
num1, mod = divmod(num1,2)
temp1 = str(mod) + temp1
while num2>0:
num2, mod = divmod(num2,2)
temp2 = str(mod) + temp2
temp1 = temp1.zfill(n)
temp2 = temp2.zfill(n)
tot=""
for j in range(n):
tot+= '#' if (temp1[j] == '1' or temp2[j] == '1') else ' '
answer.append(tot)
return answer
구현에 쓴 것과 같이 구현했다.
먼저 while분에서 각각 진법을 변환하고
zfill을 이용해 0을 추가하여 자릿수를 n으로 맞춰주었다.
마지막으로 정답을 만들기 위해 1이 있는 곳에 # 아닌 곳에 공백을 넣고
그 string을 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
먼저 zip을 써서 한번에 처리하도록 했고
비트 연산자 | 로 처리를 한뒤 bin으로 이진법 변환을 했다.
뒤의 [2:]는 진법 표현을 지우기 위해 사용했다.
그 후 1은 #으로
0은 공백으로 처리하여 answer에 더한 깔끔한 코드이다.
반응형
'Coding Test > Python' 카테고리의 다른 글
[프로그래머스] 소수 찾기 Python Code (0) | 2022.08.28 |
---|---|
[프로그래머스] [1차] 다트 게임 Python Code (0) | 2022.08.27 |
[프로그래머스] 부족한 금액 계산하기 Python Code (0) | 2022.08.27 |
[프로그래머스] 두 개 뽑아서 더하기 Python Code (0) | 2022.08.27 |
[프로그래머스] 3진법 뒤집기 Python Code (1) | 2022.08.27 |
댓글