https://programmers.co.kr/learn/courses/30/lessons/17681
출처 : 프로그래머스
def solution(n, arr1, arr2):
answer = []
tmp1 = []
tmp2 = []
# arr1 수를 이진수로 바꾸기
for i in range(len(arr1)):
tmp = ''
while True:
if arr1[i]==0:
while len(tmp)!=n:
tmp+='0'
tmp1.append(tmp[::-1])
break
tmp += str(arr1[i]%2)
arr1[i]//=2
# arr2 수를 이진수로 바꾸기
for i in range(len(arr2)):
tmp = ''
while True:
if arr2[i]==0:
while len(tmp)!=n:
tmp+='0'
tmp2.append(tmp[::-1])
break
tmp += str(arr2[i]%2)
arr2[i]//=2
for i in range(n):
tmp = ''
for j in range(n):
if tmp1[i][j] == '1' or tmp2[i][j] == '1':
tmp += '#'
else:
tmp += ' '
answer.append(tmp)
return answer
풀이 1
10진수를 2진수로 만드는 방법을 10진수를 계속 2로 나눠줘서 나머지를 구하는 방식으로 했다.
거의 빡구현이다.
계속 반복문이 반복되는 부분을 느꼈지만, 일단 풀어봤다.
다른 사람들의 풀이를 보고 너무 짧아서 놀랐다.
def solution(n, arr1, arr2):
answer = []
for i,j in zip(arr1,arr2):
arr = str(bin(i|j))[2:] # 둘 중에 하나라도 있으면 (비트 연산..)
arr = arr.rjust(n,'0') # 0으로 채워주기
arr = arr.replace('1','#')
arr = arr.replace('0',' ')
answer.append(arr)
return answer
풀이 2
python 내장 함수를 사용하는 풀이다.
arr = str(bin(i|j))[2:] # 둘 중에 하나라도 있으면 (비트 연산..)
arr = arr.rjust(n,'0') # 0으로 채워주기
bin () 함수는 10진수를 2진수로 변환해주는 함수이다.
bin(n) 을 출력해보면 0b01001처럼 앞에 '0b' 가 붙어서 나온다.
이는 문제에서 쓸모없으니 슬라이싱해준다.
rjust() 함수는 rjust(자릿수, 채워줄 값)의 옵션을 갖고 있다.
오른쪽 정렬을 하고 자릿수까지 남는 값을 채워줄 값으로 채워주는 함수다.
bin으로 10진수를 2진수로 바꾸고 남는 앞자리 수는 모두 0으로 채워줘야 하는데,
이를 rjust() 함수로 해결한 것이다.
그리고 arr1, arr2를 zip으로 묶어줬다.
또한, arr1과 arr2에서 하나라도 벽이면 벽이다. 이는 비트 연산 | 을 이용했다.
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [1차] 다트 게임 python (0) | 2022.04.05 |
---|---|
[프로그래머스] 소수 찾기 python (0) | 2022.04.05 |
[프로그래머스] 최대공약수와 최소공배수 python (0) | 2022.04.04 |
[프로그래머스] 시저 암호 python (*) (0) | 2022.04.02 |
[프로그래머스] 이상한 문자 만들기 python (0) | 2022.04.02 |