Lv1. [1차] 비밀지도

Hello·2022년 7월 24일
0

코딩테스트 연습 > [1차] 비밀지도

1. 풀이 설명

10진수를 2진수로 변환한다.
부족한 자리는 0으로 채우는 n자리 문자열로 변경한다.
한 행씩 돌면서, arr1 arr2 모두 1을 갖는 경우에만 '#'을 채워 반환한다.

2. 나의 풀이

def solution(n, arr1, arr2):
    answer = []
    for i in range(n):
        map1 = bin(arr1[i])[2:].zfill(n)
        map2 = bin(arr2[i])[2:].zfill(n)
        row = ''
        for j in range(n):
            if map1[j] == '1' or map2[j] == '1':
                row += '#'
            else:
                 row += ' '
        answer.append(row)
    return answer

3. 다른 사람의 풀이

def solution(n, arr1, arr2):
    answer = []
    for i in range(n):
        result = bin(arr1[i] | arr2[i])[2:].rjust(n,'0').replace('1','#').replace('0',' ')
        answer.append(result)
    return answer

10진수에 bit 연산 수행 후, 2진수로 변환
부족한 자리를 0으로 채우는 n자리 문자열로 변경
1을 '#'으로, 0을 ' ' 으로 replace.

4. 배운점

  1. n자리 문자열 앞에 0으로 채울 때, str.zfill(n) 함수를 사용할 수 있다.
    다른 문자로 채우고 싶을 때는 str.rjust(n, other) 함수를 사용할 수 있다.
    ex. "123".rjust(5, 'a') => "aa123"
  1. //% 를 한번에 구할 수 있는 divmod()
    작은 수에서는 //, % 큰 수에서는 divmod()의 효율이 더 좋다.
  1. 진법 변환

10진수 → 2/8/16진수

bin(num) # 2진수
oct(num) # 8진수
hex(num) # 16진수

# 각각 앞에 0b, 0o, 0x 가 붙기 때문에 resut[2:] 진법 표시를 지우고 사용하자

n 진수 → 10진수로 변환

int(string, base)

10진수 → n진수

def dec_to(n, base):
    result = ''
    while n > 0:
        n, mod = divmod(n, base)
        result += str(mod)
    return result[::-1]

n진수 → n진수

10진수로 바꾸고(int(string, base))
10진수를 n진수로 바꾼다(dec_to(n, base))

profile
안녕하세요 :)

0개의 댓글