Programming Languages/Python

[Python] 파이썬 bin(), rjust(), replace() - [kakao] 비밀지도 문제

마크투비 2021. 9. 13. 01:11

0. 문제

프로그래머스 카카오 1차 비밀지도

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

 

1. bin( ) - 이진수 변환하기

bin(x)의 변환 결과는 십진수 x를 <0b>가 앞에 붙은 이진 문자열이다. 

 

print(bin(3))
# 0b11

print(type(bin(-10)))
# <class 'str'>

 

따라서 보통 우리가 원하는 이진수로 변환해주려면 

int(bin(x)[2:]) 를 해주면 된다.

 

2. rjust( ) - 오른쪽 정렬하기

문자열.rjust(전체 자리 숫자, 공백이 있을 경우 공백 대체 문자) 로 사용하면 된다.

공백을 그냥 둘 경우엔 두번째 인자에 아무것도 안 넣으면 된다.

왼쪽 정렬은 ljust()를 사용할 수 있다.

대신 rjust()를 사용한다고 해서 그 문자열 자체가 바뀌는 것은 아니므로 주의!

 

name = ["mijin", "gummy", "mjk", "K"]
for i in name:
    print(i.rjust(8, "."))
    
"""
실행 결과
...mijin
...gummy
.....mjk
.......K
"""

 

3. replace() - 문자열에서 특정 문자만 변경하기

replace(old, new, [count]) -> replace(찾을 값, 바꿀 값, 바꿀 횟수) 로 사용하면 된다.

바꿀 횟수를 지정해주지 않으면 그냥 모든 문자가 바꿀 값으로 바뀐다.

아래 문제에서 코드는 확인할 수 있다.

 

4. 내 소스코드 & 효율적인 코드

위에 내장함수들을 아무것도 몰라서 정말 밑바닥부터 모두 코드로 작성했다... 매우 비효율적이지만, 그래도 정말 기본적인 문법만으로도 구현을 해낸 게 뿌듯했다 ㅋㅋㅋ

# 카카오 블라인드 [1차] 비밀지도

# 소스1. 
# bin() 함수를 쓰지 않은 비효율적인 코드 -> 내장함수들 기록하고 기억해두기!
def solution2(n, arr1, arr2):
    map = []
    for x in range(len(arr1)):
        y = ""
        while arr1[x] > 0:
            y = str(arr1[x] % 2) + y
            arr1[x] //= 2
        arr1[x] = "0" * (n - len(y)) + y
    for x in range(len(arr2)):
        y = ""
        while arr2[x] > 0:
            y = str(arr2[x] % 2) + y
            arr2[x] //= 2
        arr2[x] = "0" * (n - len(y)) + y
    for i in range(len(arr1)):
        answer = ""
        num = int(arr1[i]) + int(arr2[i])
        num = "0" * (len(arr1) - len(str(num))) + str(num)
        for x in num:
            if int(x) >= 1:
                answer += "#"
            else:
                answer += " " 
        map.append(answer)
    return map

 

아래는 다른 사람들이 작성한 효율적인 코드이다.

# 소스2.
# bin() 함수 10진수를 2진수로 만드는 함수
# rjust() 오른쪽 정렬 함수
# replace() 문자열에서 특정 문자열을 다른 문자열로 바꾸는 함수
def solution(n, arr1, arr2):
    answer = []
    for i,j in zip(arr1,arr2):
        a12 = str(bin(i|j)[2:])
        print(a12)
        a12 = a12.rjust(n,'0')
        a12 = a12.replace('1','#')
        a12 = a12.replace('0',' ')
        answer.append(a12)
    return answer