본문 바로가기
코딩테스트/Programmers

[Programmers][Python][Level 1] [1차] 비밀지도

by codeok 2021. 4. 25.
반응형

프로그래머스의 Level 01 2018 KAKAO BLIND RECRUITMENT 비밀지도 문제입니다.

 

 

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

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

programmers.co.kr

 

문제 

문제는 지문과 사진이 있어서 위의 사이트에 확인하시면 됩니다.

 

풀이

 

  1. 지도의 겹치는 부분을 구하기 위해서는 |(or 비트 연산자)를 사용하고 bin()로 이진수 문자열을 가져옵니다.
    • Ex) 1 |  3 => 3
    • Ex) bin(3)[2:] => 11 
  2. 지도의 한 변의 길이 n보다 이진수 문자열 len(or_value)가 작다면 작은 길이만큼 '0'을 추가해줍니다.
  3. binary 리스트에 이진수의 값들을 for문을 돌려서 1이면 #, 0이면 ' '로 치환해서 추가해줍니다.
def solution(n, arr1, arr2):
    answer = []
    binary = []
    or_value = ''

    for a1, a2 in zip(arr1, arr2):
    
    	# a1 | a2 를 or 비트 연산을 한 뒤 bin()으로 이진수로 변환합니다.
        or_value = bin(a1 | a2)[2:]
		
        # 지도의 한변의 크기 n보다 작으면 n - len(or_value)의 갯수만큼 '0'을 더해줍니다.
        if len(or_value) < n:
            or_value = '0' * (n-len(or_value)) + or_value

        binary.append(or_value)
    
    for bina in binary:
        map_str = ''
        for b in bina:
            if b == '1':
                map_str += '#'
            else:
                map_str += ' '

        answer.append(map_str)

    return answer

 

 

다른 사람의 풀이

다른분의 풀이는 rjust와 replace 함수를 사용해서 제가 작성한 코드보다 훨씬 간단한 코드가 나옵니다...와우

 

  • str.rjust(width, [fillchar]) : 문자열 앞 부분에 다른 문자열을 채울 수 있는 함수입니다.
    • Ex) "2".rjust(3, "0")  => 002
    • "2"라는 문자열을 rjust를 기존값 포함 3개까지 앞부분을 0으로 채우는 것입니다.
  • str.replace(old, new) : old인 원본 문자열이 new 새로운 문자열로 치환해주는 함수입니다.
    • Ex) 'abcde'.replace('a', 'z') => zbcde

 

def solution(n, arr1, arr2):
    answer = []
    
    for a1, a2 in zip(arr1, arr2):

        or_value = bin(a1 | a2)[2:]

        or_value = or_value.rjust(n, '0')
        or_value = or_value.replace("1", '#')
        or_value = or_value.replace("0", ' ')

        answer.append(or_value)

    return answer
반응형