프로그래머스 2018 KAKAO BLIND RECRUITMENT
- Lv 1. [1차] 비밀지도 (Python)
https://school.programmers.co.kr/learn/courses/30/lessons/17681
def decode_to_binary(a, n): # 10진수 -> 2진수
binary = ''
while(a > 0): # 2진수 구하기
div = a // 2
left = a % 2
binary += str(left)
a = div
ans_binary = binary[::-1] # 왼쪽 -> 오른쪽으로 집어넣어주었기 때문에 정답인 2진수를 얻기 위해서 한번 뒤집어주기
if(len(ans_binary) < n): # 만약 n의 길이보다 짧다면, 왼쪽에 부족한 길이만큼 0을 추가로 붙여주기
ans_binary = ('0' * (n - len(binary))) + ans_binary
return ans_binary
def solution(n, arr1, arr2):
answer = []
# "지도 1 벽" or "지도 2 벽" == 벽
# "지도 1 공백" and "지도 2 공백" = 공백
# 벽 == 1, 공백 == 0
# 벽 == '#', 공백 == ' '
# 이진법 변환하기
for i in range(n):
arr1[i] = decode_to_binary(arr1[i], n)
arr2[i] = decode_to_binary(arr2[i], n)
# 둘 다 0이면 -> 공백
# 둘 중 하나라도 1이면 -> 벽
ans = ''
for j in range(n):
if(arr1[i][j] == '0' and arr2[i][j] == '0'): # 공백
ans += ' '
if (arr1[i][j] == '1' or arr2[i][j] == '1'): # 벽
ans += '#'
answer.append(ans)
# print(arr1)
# print(arr2)
return answer
# TODO
## 각 배열의 값을 이진법으로 변환 (ex. 9 -> 01001)
## 두 배열 다 공백인건 공백, 두 배열 중 하나만 벽이면 벽 -> 최종 배열 만들기
## 정답 출력하기
list
를 따로 선언해서 넣어주고 또 합쳐주기 싫어서 그냥 문자열에 추가하는 방식으로 하였더니 순서가 거꾸로 나왔다. → str[::-1]
로 문자열 뒤집어주기ans_binary = ('0' * (n - len(binary))) + ans_binary
0
이면 공백 추가, 둘 중 하나라도 1
이면 벽 추가감탄한 다른 사람의 정답코드
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
bin()
: 10진수 → 2진수참고 : https://www.daleseo.com/python-int-bases/
>>> bin(42)
'0b101010'
추가 ) 8진수, 16진수 : oct()
, hex()
>>> oct(42)
'0o52'
>>> hex(42)
'0x2a'
→ 앞에 붙는 접두어를 제외하고 0과 1로만 이루어진 값을 얻기 위해서는 bin(x)[2:]
해주면 된다.
zip(a, b)
: a에서 하나, b에서 하나씩 뽑아서 묶어주는 역할참고 : https://www.daleseo.com/python-zip/
>>> for number, upper, lower in zip("12345", "ABCDE", "abcde"):
... print(number, upper, lower)
...
1 A a
2 B b
3 C c
4 D d
5 E e
문자열.rjust(전체 길이, 공백 대체 문자)
: 오른쪽으로 문자열을 밀어넣고 → 문자열이 만약 전체 길이를 다 채우지 못한다면 공백 대체 문자로 나머지 빈공간을 채운다.참고 : https://maktubi.tistory.com/129
name = ["mijin", "gummy", "mjk", "K"]
for i in name:
print(i.rjust(8, "."))
"""
실행 결과
...mijin
...gummy
.....mjk
.......K
"""