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 |