728x90

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

출처 : 프로그래머스

 

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

비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다

programmers.co.kr

def solution(n, arr1, arr2):
    answer = []
    tmp1 = []
    tmp2 = []
    
    # arr1 수를 이진수로 바꾸기
    for i in range(len(arr1)):
        tmp = ''
        while True:
            if arr1[i]==0:
                while len(tmp)!=n:
                    tmp+='0'
                tmp1.append(tmp[::-1])
                break
            tmp += str(arr1[i]%2)
            arr1[i]//=2
            
    # arr2 수를 이진수로 바꾸기
    for i in range(len(arr2)):
        tmp = ''
        while True:
            if arr2[i]==0:
                while len(tmp)!=n:
                    tmp+='0'
                tmp2.append(tmp[::-1])
                break
            tmp += str(arr2[i]%2)
            arr2[i]//=2

    for i in range(n):
        tmp = ''
        for j in range(n):
            if tmp1[i][j] == '1' or tmp2[i][j] == '1':
                tmp += '#'
            else:
                tmp += ' '
        answer.append(tmp)
                
    return answer

 

풀이 1

10진수를 2진수로 만드는 방법을 10진수를 계속 2로 나눠줘서 나머지를 구하는 방식으로 했다.

거의 빡구현이다.

계속 반복문이 반복되는 부분을 느꼈지만, 일단 풀어봤다.

 

다른 사람들의 풀이를 보고 너무 짧아서 놀랐다.

 

def solution(n, arr1, arr2):
    answer = []
    for i,j in zip(arr1,arr2):
        arr = str(bin(i|j))[2:] # 둘 중에 하나라도 있으면 (비트 연산..)
        arr = arr.rjust(n,'0') # 0으로 채워주기
        arr = arr.replace('1','#')
        arr = arr.replace('0',' ')
        answer.append(arr)
    return answer

풀이 2

python 내장 함수를 사용하는 풀이다.

arr = str(bin(i|j))[2:] # 둘 중에 하나라도 있으면 (비트 연산..)
arr = arr.rjust(n,'0') # 0으로 채워주기

bin () 함수는 10진수를 2진수로 변환해주는 함수이다.

bin(n) 을 출력해보면 0b01001처럼 앞에 '0b' 가 붙어서 나온다.

이는 문제에서 쓸모없으니 슬라이싱해준다.

 

rjust() 함수는 rjust(자릿수, 채워줄 값)의 옵션을 갖고 있다.

오른쪽 정렬을 하고 자릿수까지 남는 값을 채워줄 값으로 채워주는 함수다.

 

bin으로 10진수를 2진수로 바꾸고 남는 앞자리 수는 모두 0으로 채워줘야 하는데, 

이를 rjust() 함수로 해결한 것이다.

 

그리고 arr1, arr2를 zip으로 묶어줬다.

또한, arr1과 arr2에서 하나라도 벽이면 벽이다. 이는 비트 연산 | 을 이용했다.

 

+ Recent posts