본문 바로가기
알고리즘/프로그래머스 PS

[프로그래머스][Level 1][Python] [1차] 비밀지도

by 빛밤하늘 2021. 7. 7.
반응형

밑의 링크는 프로그래머스에서의 문제 링크입니다.

 

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

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

programmers.co.kr

 

 

 

 

 

 

 

 

파이썬 코드와 결과입니다.

# 지도의 한 변 크기 n, 지도 2개의 정보를 저장한 리스트 arr1, arr2가 매개변수로 주어집니다.
def solution(n, arr1, arr2):
    # 원래의 비밀지도를 해독한 정보를 저장할 리스트 변수를 선언합니다.
    answer = [None] * n

    # 지도의 한 변의 크기 n만큼 반복합니다.
    for idx in range(n):
        # 원래 비밀지도의 현재의 한 줄을 해독한 결과를 저장하는 변수를 선언합니다.
        arr_sharp = ''
        # 두 비밀지도의 현재의 한 줄을 or 연산하고 이진수로 바꾼 후
        # 앞의 0b를 떼어준 결과를 저장하는 변수를 선언합니다.
        arr_bin = bin(arr1[idx] | arr2[idx])[2:]

        # 만약 arr_bin의 길이가 지도의 한 변 크기인 n과 다르다면
        if len(arr_bin) != n:
            # arr_bin에서 n보다 모자란 길이만큼 앞에 0을 붙여줍니다.
            arr_bin = '0' * (n - len(arr_bin)) + arr_bin

        # arr_bin에서 한 글자씩 반복합니다.
        for char in arr_bin:
            # 현재 글자가 1이라면
            if char == '1':
                # arr_sharp에 #을 넣어줍니다.
                arr_sharp += '#'
            # 현재 글자가 0이라면
            elif char == '0':
                # arr_sharp에 공백을 넣어줍니다.
                arr_sharp += ' '

        # answer에 현재 해독한 한 줄의 정보를 넣어줍니다. 
        answer[idx] = arr_sharp

    # 원래의 비밀지도를 해독한 정보를 반환합니다.
    return answer

결과

 

두 비밀지도의 한 줄을 or 연산하여 이진수를 구한 뒤 모자라는 길이만큼 0을 채워넣는 방법은

문자열 포매팅을 이용해서도 풀 수 있을텐데 문제를 풀 때 문법이 기억나지 않았습니다.

문자열 포매팅에 대해서 복습을 해야겠습니다.

 

 

 

※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.

※ 더 효율적이고 빠른 정답을 환영합니다.

반응형

댓글