cording test

LV.1 비밀지도/ 파이썬 bin함수 / zfill 함수

JM Lee 2023. 5. 2. 01:37
728x90

코딩테스트 연습 - [1차] 비밀지도 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

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