본문 바로가기
프로그래머스/Lv.1

2018 KAKAO BLIND RECRUITMENT > 비밀지도 - Pyton, n진법, bin, zfill

by 아찌방 2024. 12. 5.

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/17681

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

풀이 - 나의 생각

 

 

 

 

코드

 

def solution(n, arr1, arr2):
    answer = []
    
    def to_binary(num):
        digit = []
        cnt = n
        while cnt > 0:
            digit.append(num%2)
            num //= 2
            cnt -= 1
        return ''.join(str(x) for x in digit[::-1])
    
    for i in range(n):
        row1, row2 = to_binary(arr1[i]), to_binary(arr2[i])
        row = ''
        for j in range(n):
            if row1[j] == "1" or row2[j] == "1":
                row += "#"
            else:
                row += " "
        answer.append(row)
        
    return answerㅇㅇ

 

두 맵을 2진법으로 바꾸고

 

한 개씩 뜯어봅니다.

 

그러면서 1인 경우 벽으로 아니면 공백으로 저장해주면 끝입니다.

 

2진법으로 변화하는 방법은 위에서처럼

 

반복문을 돌려가면서 해도 되고

 

def to_binary(num):
        return bin(num)[2:].zfill(n)

 

bin()을 사용해도 됩니다.

 

거기에 zfill을 사용한 이유는

 

예를 들어 1을 2진법으로 바꾸면 1입니다.

 

그런데 우리가 원하는 형식은 00001 이기에

 

zfill을 통해 비어있는 공간을 0으로 채워주는 겁니다.

 

위에서 while문을 n만큼 돌려주는 이유도 이와 동일합니다.

 

 

이 외에도, 2진법, 8진법, 16진법을 구하는 방법을 기본적으로 제공하는데

 

x = 42
print(bin(x))  # '0b101010'
print(oct(x))  # '0o52'
print(hex(x))  # '0x2a'

 

이렇게 쓰면 됩니다.

 

print(bin(x)[2:])  # '101010'
print(oct(x)[2:])  # '52'
print(hex(x)[2:])  # '2a'

 

그런데 기본적으로 앞에 두글자가 접두사로 붙어서

 

2번째 인덱스부터 꺼내오면 됩니다.

 

다음에 또 봐요

 

728x90