준호씨의 블로그
PS - 비밀지도 - 2018 KAKAO BLIND RECRUITMENT 1차 1번 문제 본문
PS - 비밀지도 - 2018 KAKAO BLIND RECRUITMENT 1차 1번 문제
준호씨 2018. 9. 13. 08:46문제
https://programmers.co.kr/learn/courses/30/lessons/17681
지도는 정사각형 모양의 2차원 배열로 만들어져 있습니다. 이런 지도가 두개가 있고, 두 지도를 겹친 지도를 만드는 문제입니다.
입력과 출력 예제 입니다.
n | 5 |
arr1 | [9, 20, 28, 18, 11] |
arr2 | [30, 1, 21, 17, 28] |
출력 | ["#####","# # #", "### #", "# ##", "#####"] |
입력값으로는 n, arr1, arr2 가 주어집니다. n 은 지도의 가로, 세로 사이즈 입니다. 5이면 5x5 사이즈의 지도 입니다.
arr1, arr2 가 각각 1차원 배열이지만 사실 안에 주어진 값은 2진수로 풀어서 사용하는데 이거도 하나의 배열이라고 생각 하시면 됩니다. 예를 들어 9는 2진수로 01001 인데 [0, 1, 0, 0, 1] 이라고 생각하는게 이해하기 좋습니다.
arr1 은 다음과 같은 모양의 배열이라고 보면 됩니다.
01001
10100
11100
10010
01011
arr2 는 다음과 같은 배열이라고 보면 됩니다.
11110
00001
10101
10001
11100
두개의 배열을 겹치(merge)면 다음과 같이 됩니다.
11111
10101
11101
10011
11111
각 칸에 1이 하나라도 있으면 1이 됩니다. 요런걸 논리합(or) 이라고도 합니다.
0, 0 -> 0
0, 1 -> 1
1, 0 -> 1
1, 1 -> 1
결과에서 1을 '#' 으로 0 을 빈칸 ' ' 으로 만들어 주면 됩니다. 다음과 같이 되겠죠?
#####
# # #
### #
# ##
#####
Python3 풀이
def solution(n, arr1, arr2):
answer = []
for idx in range(n):
result_arr = arr1[idx] | arr2[idx]
# answer.append(bin(result_arr)[2:].zfill(n).replace('1', '#').replace('0', ' '))
answer.append(format(result_arr, 'b').zfill(n).replace('1', '#').replace('0', ' '))
return answer
# test
# print(solution(5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28]))
print(solution(6, [46, 33, 33 ,22, 31, 50], [27 ,56, 19, 14, 14, 10]))
https://gist.github.com/junho85/afa0cba6b879caba91cef5be0092ee20
python 은 정말 편의 기능을 많이 제공해 준다는걸 또다시 느낄 수 있었습니다. format 'b' 에 zfill 로 한방에 2진법 변환에 빈공간 0 으로 채우기가 가능합니다.
2진수로 바꾸기. bin, format
# bin 함수의 결과는 0b 가 앞에 붙는다
print(bin(5)) # '0b101'
# '101'
print(bin(5)[2:]) # '0b' 잘라내고 나머지 출력
print(format(5, 'b')) # format 'b' 는 0b 가 붙지 않는다
zfill - fill zeros
print(format(9, 'b').zfill(8)) # '00001001'
print('abcd'.zfill(8)) # '0000abcd'
비트연산 or ('|')
print(1 | 2) # b01 | b10 = b11 = 3
for loop enumerate
for idx, item in enumerate([1, 10, 100, 1000]):
print(idx, item)
0 1
1 10
2 100
3 1000
다른 언어로 풀이
참고
'개발이야기 > PS - Problem Solving, 알고리즘' 카테고리의 다른 글
PS - 비밀지도 javascript (0) | 2018.10.17 |
---|---|
PS - 캐시(Cache) - 2018 KAKAO BLIND RECRUITMENT 1차 3번 (0) | 2018.09.15 |
PS - 다트게임 - 2018 KAKAO BLIND RECRUITMENT 1차 2번 (0) | 2018.09.14 |
python - 문제 풀이 할 때 알아 두면 유용한 loop 기법 (0) | 2018.09.12 |
python - 순열 (permutation) - 리스트의 각 항목이 중복 되지 않게 모든 경우 구하기 (0) | 2018.08.01 |