관리 메뉴

솜씨좋은장씨

[Programmers] 2018 KAKAO BLIND RECRUITMENT - 1차 - 비밀지도 (Python) 본문

Programming/코딩 1일 1문제

[Programmers] 2018 KAKAO BLIND RECRUITMENT - 1차 - 비밀지도 (Python)

솜씨좋은장씨 2021. 11. 8. 11:05
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 프로그래머스의 2018 KAKAO BLIND RECUITMENT 1차 비밀지도 입니다.

 

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

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

programmers.co.kr

👨🏻‍💻 문제 풀이

문제를 딱 본 순간 이진수로 변환 한 수들을 비트연산자를 활용하여 계산하고 이를 활용하여 정답을 만들면 되겠다

생각이 들었습니다.

문제에서 설명하는 그림을 보면

맨 오른쪽에 # 이 그려져 있는 부분을 보면 왼쪽 두 그림 속 # 의 위치를 겹친 모습입니다.

그런데 #의 위치는 1의 위치이므로 0과 0일때만 0이고 나머지의 경우에는 1인 OR 연산자를 활용하기로 생각했습니다.

먼저 입력 받는 값은 정수이므로 비트연산자를 활용하기 위해서는 각 숫자를 이진수로 바꾸는 과정이 필요했습니다.

def convert_num_to_bin(n, num):
    binary_num = bin(num)[2:]
    
    if len(binary_num) < n:
        ext_num = n - len(binary_num)
        binary_num = "0" * ext_num + binary_num
        
    return binary_num

정수를 이진수로 바꾸는데에는 bin을 활용했습니다.

bin을 활용하여 바꾼 이진수에는 0b로 시작하는 문자열이므로 앞에 0b를 제거하기 위해 [2:] 를 활용했습니다.

거기에 길이를 n으로 맞추기 위해서 입력받은 n과 변환한 이진수의 길이를 뺀 만큼 

변환한 이진수 앞에 0을 붙여주었습니다.

arr1 = [convert_num_to_bin(n, num) for num in arr1]
arr2 = [convert_num_to_bin(n, num) for num in arr2]

위에서 만든 함수를 활용하여 입력받은 arr1과 arr2의 값을 이진수로 변환합니다.

for arr1_num, arr2_num in zip(arr1, arr2):
    temp = ''
    for num1, num2 in zip(arr1_num, arr2_num):
        num3 = bin(int(num1) | int(num2))[2:]
        if num3 == "1":
            temp += "#"
        else:
            temp += " "
    answer.append(temp)

변환한 값들에서 하나씩 꺼내온 후에 각 자리의 수를 OR연산자를 활용하여 값을 구한 다음

구한 값이 1일 경우 정답 문자열에 #을 0일 경우 문자열에 공백을 추가하였습니다.

이렇게 만든 문자열을 정답 리스트에 append 해주면 끝!

 

전체 코드는 아래를 참고해주세요.

👨🏻‍💻 코드 ( Solution )

def convert_num_to_bin(n, num):
    binary_num = bin(num)[2:]
    
    if len(binary_num) < n:
        ext_num = n - len(binary_num)
        binary_num = "0" * ext_num + binary_num
        
    return binary_num
        

def solution(n, arr1, arr2):
    answer = []
    
    arr1 = [convert_num_to_bin(n, num) for num in arr1]
    arr2 = [convert_num_to_bin(n, num) for num in arr2]
    
    for arr1_num, arr2_num in zip(arr1, arr2):
        temp = ''
        for num1, num2 in zip(arr1_num, arr2_num):
            num3 = bin(int(num1) | int(num2))[2:]
            if num3 == "1":
                temp += "#"
            else:
                temp += " "
        answer.append(temp)
    return answer
 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments