입력으로 지도의 한 변 크기 n 과 2개의 정수 배열 arr1, arr2가 들어온다.
1 ≦ n ≦ 16 arr1, arr2는 길이 n인 정수 배열로 주어진다. 정수 배열의 각 원소 x를 이진수로 변환했을 때의 길이는 n 이하이다. 즉, 0 ≦ x ≦ 2n - 1을 만족한다.
원래의 비밀지도를 해독하여 ’#’, 공백으로 구성된 문자열 배열로 출력하라.
매개변수 | 값 |
---|---|
n | 5 |
arr1 | [9, 20, 28, 18, 11] |
arr2 | [30, 1, 21, 17, 28] |
출력 | [”#####”,”# # #”, ”### #”, ”# ##”, ”#####”] |
매개변수 | 값 |
---|---|
n | 6 |
arr1 | [46, 33, 33 ,22, 31, 50] |
arr2 | [27 ,56, 19, 14, 14, 10] |
출력 | [”######”, ”### #”, ”## ##”, ” #### ”, ” #####”, ”### # ”] |
def solution(n, arr1, arr2):
answer = []
bit = []
for i in range(n) :
bit.append(arr1[i] | arr2[i])
for i in list(map(bin,bit)) :
i = i[2:]
if len(i) < n :
i = '0'*(n-len(i)) + i
trans = i.replace('1','#').replace('0',' ')
answer.append(trans)
return answer
레벨 1짜리 문제이지만, 생각보다 오래 걸렸다. 오래걸렸던 포인트는 첫 번째로 비트 연산자로 두 배열을 |
연산하는 것을 떠올리는데 오래 걸렸고, 그리고 10진법을 2진법으로 변환 하는 bin()
함수를 몰라서 오래 걸렸고, 마지막으로 n
만큼 0
을 붙여넣어주는 것에서 *(n-len(i))
이 부분을 생각하지 못해서 오래 걸렸다.
이번 문제를 풀면서 새로 배운 것은 다시 사용할 일이 있을지는 모르겠지만 bin()
함수와 문자열 바꿀 때 replace()
를 쓰면 쉽게 할 수 있다는 것을 배웠다.
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','#').replace('0',' ')
answer.append(a12)
return answer
먼저 zip()
함수는 두 배열을 짝지어 주는 함수이다. 그래서 두 배열을 한번에 비트 연산 해줄 수 있도록 하였고, 그리고 rjust()
함수는 오른쪽으로 정렬해주는 함수인데, rjust(n,'0')
을 통해 n
자리수로 맞추고 남는 왼쪽 여백에는 '0'
을 채우도록 했다. 문자열을 쓸 때 유용하게 쓰일 함수라고 생각된다. 그 외에는 비슷하게 풀었다.