728x90
<문제 설명>
https://programmers.co.kr/learn/courses/30/lessons/17681
2개의 비밀지도가 주어지고, 그 두개의 각 칸에 하나의 #(벽)이 있으면 그 곳은 최종적으로 벽이다.
비밀지도는 10진수로 주어지는 데, 이를 2진수로 변환해서 0이면 " "(공백), 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] |
출력 | ["######", "### #", "## ##", " #### ", " #####", "### # "] |
<문제 풀이 아이디어>
우선 주어진 10진수를 2진수로 변환하고, 5자리를 채우기 위해 만약에 111이라면 00111로 만들어주는 작업을 진행한다.
이후 2개의 배열의 0, 1값을 비교하여 하나라도 1이면 벽인 "#"을, 모두 0이면 공백(" ")을 넣어주는 문자열을 만들고,
5자리가 될때마다 정답 배열에 append 한다.
<문제 풀이 코드>
def solution(n, arr1, arr2):
answer = []
arr1_bin = []
arr2_bin = []
for i in range(n):
arr1_bin.append(bin(arr1[i])[2:])
arr2_bin.append(bin(arr2[i])[2:])
arr1_bin[i] = ('0' * (n-len(arr1_bin[i]))) + arr1_bin[i]
arr2_bin[i] = ('0' * (n-len(arr2_bin[i]))) + arr2_bin[i]
tmp = ''
for p in range(n):
if arr1_bin[i][p] == '1' or arr2_bin[i][p] == '1':
tmp += '#'
elif arr1_bin[i][p] == '0' and arr2_bin[i][p] == '0':
tmp += ' '
answer.append(tmp)
return answer
728x90
반응형
'알고리즘' 카테고리의 다른 글
[백준 브론즈2] 진법 변환.py (0) | 2022.03.09 |
---|---|
[백준 브론즈3] 팩토리얼 진법.py (0) | 2022.03.07 |
[자료구조] 진법변환, 비트연산 (0) | 2022.03.03 |
[자료구조] DFS(깊이 우선 탐색), BFS(너비 우선 탐색) (0) | 2022.03.02 |
[백준 실버3] 2606 바이러스.py (0) | 2022.02.28 |