반응형
문제설명
https://programmers.co.kr/learn/courses/30/lessons/17681
사고과정
- 십진수를 이진수로 DFS 함수로 바꾸어주는 것이 가장 핵심이었다. 즉 암호화된 10진수 값을 이진수 값으로 부호화한다. 그리고 n길이 만큼 이진수 길이가 나오지 않은 값들은 모두 왼쪽에다가 0을 빈자리에 모두 추가해주어야 한다.
- 그리고 난 후 두 맵의 동일한 원소끼리 합쳤을 때 값이 1 이상이면 벽이고 0이면 공백으로 최종 맵을 갱신해주면 된다.
- 이진수로 변환하는 DFS 함수에서 변환한 이진수를 저장할 때 리스트를 이용하려 했더니 자꾸 재귀함수가 끝날 때마다 빈 리스트로 초기화 되서 애를먹었다.. 그래서 리스트 대신 그냥 빈 문자열로 해주니까 초기화되지 않고 잘 되었다.
풀이
def solution(n, arr1, arr2):
answer1, answer2 = [], []
result = ''
def dfs(x):
nonlocal result
if x == 0:
return
else:
dfs(x // 2)
result += str(x % 2)
# 이진수 변환
for a in arr1:
dfs(a)
if len(result) < n:
result = '0' * (n-len(result)) + result
answer1.append(result)
result = ''
for a in arr2:
dfs(a)
if len(result) < n:
result = '0' * (n-len(result)) + result
answer2.append(result)
result = ''
# 맵 갱신
maps = [[0] * n for _ in range(n)]
for i in range(n):
for j in range(n):
if int(answer1[i][j]) + int(answer2[i][j]) >= 1:
maps[i][j] = '#'
else:
maps[i][j] = ' '
answer = []
for m in maps:
answer.append(''.join(m))
return answer
반응형
'알고리즘 삽질장' 카테고리의 다른 글
[프로그래머스] 다트 게임 (0) | 2021.12.08 |
---|---|
[프로그램스] 가운데 글자 가져오기 (0) | 2021.12.08 |
[프로그래머스] 부족한 금액 계산하기 (0) | 2021.12.08 |
[프로그래머스] 나머지가 1이 되는 수 찾기 (0) | 2021.12.08 |
[프로그래머스] 최소 직사각형 (0) | 2021.12.08 |