본문 바로가기
알고리즘-python/Programmers 문제

[프로그래머스 / 1단계 / 파이썬(Python3)] 비밀지도

by 빅데이터1020 2020. 5. 23.
SMALL

문제출처 https://programmers.co.kr/learn/courses/30/lessons/17681

 

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

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

programmers.co.kr

문제 설명은 '문제출처'를 참고해주세요

● 어떻게 풀까?

[1] 비트연산자를 이용한 풀이

 

1. arr1, arr2 의 숫자를 2진수로 나타내기

 

2. arr1, arr2의 항목을 각각 비교하기

   1 + 1 -> 1

   1 + 0 -> 1

   0 + 1 -> 1

   0 + 0 -> 0

 

3. 문자열에서 1은 #으로 바꾸고, 0은 공백으로 바꿔주기

 

[2] 비트연산자를 이용하지 않은 풀이

 

1. 2진수로 나타낸 arr1, arr2의 항목을 숫자열로 바꿔서 더하고 문자열로 바꾸기

 

2. 0은 공백, 0이 아닌 것은 #으로 간주

 

저는 [비트연산자를 이용한 풀이]를 사용했습니다.

 

● 나의 풀이

https://github.com/minji-OH/Python_Programmers_Solution/blob/master/Secret%20Map.py

 

minji-OH/Python_Programmers_Solution

Contribute to minji-OH/Python_Programmers_Solution development by creating an account on GitHub.

github.com

def solution(n, arr1, arr2):
    answer = []
    for i, j in zip (arr1, arr2):                           #리스트에서 각각 항목 가져옴
        binary = bin(i|j)[2:]                               #2진수로 변환 + 비트연산자 사용 + 슬라이싱
        binary = '0'*(n-len(binary)) + binary               #사각형 변의 길이 n에 맞게 2진수의 자리수 맞춰줌
        binary = binary.replace('0', ' ').replace('1', '#') #0을 공백으로, 1을 #로 변환
        answer.append(binary)
    return answer

● 다른 사람 풀이 - A

https://github.com/Hong-Jun-Ho/Python/blob/master/venv/Programmers/level1/Secret%20map.py

 

Hong-Jun-Ho/Python

Python. Contribute to Hong-Jun-Ho/Python development by creating an account on GitHub.

github.com

def solution(n, arr1, arr2):
    answer = []
    result = []
    for e in range(n):
        a = bin(arr1[e] | arr2[e]) + "n"
        result.append(a[-n - 1:-1])

    table = str.maketrans('b10', ' # ')
    for i in range(len(result)):
        answer.append(result[i].translate(table))

    return answer

● 다른 사람 풀이 - B

https://github.com/True-Kim/pyStudy/blob/master/secretMap.py

 

True-Kim/pyStudy

Contribute to True-Kim/pyStudy development by creating an account on GitHub.

github.com

def solution(n, arr1, arr2):
    answer = []
    arr_1 = []
    arr_2 = []
    b_arr = []

    # 각 배열을 2진수로 바꿔주기
    for i in range(len(arr1)):
        arr_1.append(format(arr1[i],'b'))
        arr_2.append(format(arr2[i],'b'))

    arr_1 = [int(x) for x in arr_1] # int형으로 바꾸기
    arr_2 = [int(x) for x in arr_2]

    b_arr=list(zip(arr_1,arr_2))

    # 더하기
    for j in range(len(b_arr)):
        answer.append(sum(b_arr[j]))

    # '#, 공백'으로 바꾸기
    answer = [str(x) for x in answer]
    print(answer)
    for a in range(len(answer)):
    # answer[a]의 앞쪽에 answer[a]가 n의 길이만큼 채워지도록 0을 넣어주겠다는 뜻
        answer[a] = answer[a].zfill(n) 
        answer[a] = answer[a].replace('0', ' ')
        answer[a] = answer[a].replace('1', '#')
        answer[a] = answer[a].replace('2', '#')
    print(answer)
    return answer
LIST