def solution(n, arr1, arr2):
map1 = []
map2 = []
for i in arr1 :
b = format(i, 'b')
a = list(map(int, str(b)))
if len(a) != n :
while len(a) < n :
a.insert(0, 0)
map1.append(a)
for i in arr2 :
b = format(i, 'b')
a = list(map(int, str(b)))
if len(a) != n :
while len(a) < n :
a.insert(0, 0)
map2.append(a)
secret_map = []
for x, y in zip(map1, map2) :
s_map = []
for q, w in zip(x, y) :
if q or w == 1 :
s_map.append("#")
else :
s_map.append(" ")
secret_map.append(''.join(s_map))
return secret_map
arr1과 arr2를 for문을 사용해 2진수로 받고 리스트를 만들고 길이를 맞추는 작업을 해서
마지막 for문과 zip을 이용해 1을 #로 0을 공간으로 만들어주는 식으로 코드를 짰다. 그러나 ! ! ! !
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
다른 분의 풀이를 봤는데 나는 왜 replace와 bin(i|j) 를 생각하지 못했는가,,
풀이를 해보자면
① zip함수를 이용해 arr1, arr2 두 리스트를 이용해 for문을 만든다.
② ➀ bin 함수를 이용해 2진수로 바꾸어주고, 비트연산자 중 |(or연산) 를 이용하여 둘을 합쳐준다.
➁ 맨 앞의 'ob' 빼고 저장해야하므로(bin함수를 사용하면 'ob10110' 형태와 같이 출력된다.) [2:]를 이용해 슬라이싱해준다.
➂ 문자형으로 바꾸어 변수에 저장해준다.
③ 2진수의 길이가 각각 다르니 맞추기 위해 rjust 함수(오른쪽 정렬해준다. 또한 2번째 인자로 값을 주면 그 값으로 공백을 채운다)를 사용.
길이를 n으로 맞춰 오른쪽 정렬해주고 공백은 0으로 채워준다.
④ replace 함수를 사용해 1은 '#'으로 0은 공백으로 대체시켜준다.
⑤ answer 리스트에 추가해준다.
'Algorithm > Programmers' 카테고리의 다른 글
[Python] 실패율 (0) | 2021.05.02 |
---|---|
[Python] 다트 게임 (0) | 2021.05.01 |
[Python] 키패드 누르기 (0) | 2021.04.29 |
[Python] 체육복 (0) | 2021.04.27 |
[Python] 자릿수 더하기 (0) | 2021.04.27 |