728x90
코딩테스트 연습 - [1차] 비밀지도 | 프로그래머스 스쿨 (programmers.co.kr)
카카오 코테 문제로 나왔던 문제..
물론 1번 문제였겠지만 생각보다 어려웠어서 놀랐다.
이번 문제는 팀원 네 명이서 같이 풀었는데,
이진수 함수를 사용하지 않으면 문제해결에 상당히 곤혹을 겪을 것이라고 조언을 받아서
미리 bin 함수를 공부했다.
또한 문제를 푸는 과정에서 zfill함수도 알았는데, 활용도는 낮은 것 같지만 우선 공부해두었다.
bin(binary): 십진수의 숫자를 이진수로 바꿔주는 함수
상당히 간단한 함수라서 금방 익혔는데, 앞에 0b를 붙인 채 나타내어준다.
>>> bin(12)
'0b1100'
반환값은 문자열이기 때문에 잘 알아두기
문제풀이에서는 이 0b를 없애주는 작업이 자주 필요하지 싶다.
zfill 함수 : 숫자 앞에 0을 붙여주고 싶을 때 쓰는 함수
#"00004"
"4".zfill(5)
#"50"
"50".zfill(2)
#"00123"
"123".zfill(5)
요건은 int(투입값의 자릿수) <= 인자
이게 맞지 않는다면 함수가 무의미하다
반환값은 문자열이기 때문에 잘 알아두기
문제풀이는 주석으로 등록해놓았으니, 잘 보면 될듯
핵심은 '초기설정'과 '이차원 배열', '연속되는 for문'이다.
def solution(n, arr1, arr2):
answer = []
# 정수를 이진수로 만들고 리스트에 넣기
arr1_ = []
arr2_ = []
# 리스트의 인덱스를 돌면서 2진수로 만들고 리스트에 append (x,y)
for i in range(n):
# ['1001', '10100', '11100', '10010', '1011']-> zfill ['01001', '10100', '11100', '10010', '01011']
arr1_.append(bin(arr1[i])[2:].zfill(n))
# ['11110', '1', '10101', '10001', '11100']-> zfill ['11110', '00001', '10101', '10001', '11100']
arr2_.append(bin(arr2[i])[2:].zfill(n))
Map = ''
# 2진수로 변환한 리스트의 요소에 1이 있으면 벽이 있다 => #
# 이외는 빈 ''로 처리
for j in range(n):
if arr1_[i][j] == '1' or arr2_[i][j] == '1':
Map += '#'
# i : 0~n-1
# j : 0~n-1
else:
Map += ' '
answer.append(Map)
return answer
'cording test' 카테고리의 다른 글
LV.1 예산 (0) | 2023.05.07 |
---|---|
LV.1 둘만의 암호 (0) | 2023.05.03 |
LV.2 최댓값과 최솟값 (4) | 2023.04.28 |
LV.1 피보나치 수 (2) | 2023.04.27 |
삼총사 (0) | 2023.04.25 |