본문 바로가기

알고리즘/카카오 EASY

비밀지도 (Level 1)

문제

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

내 풀이

 

최대한 파이토닉하게 짜려고 노력하였다.

 

비트 마스킹을 이용하고 싶어서 한 번 사용해보았다.

먼저 비트 마스크에서 '|'를 사용하여 벽인 곳을 추출하였다.

그리고 숫자를 이진수 문자열로 바꾸어주는 bin 함수를 사용하고, 빈 곳을 '0'으로 채워주는 zfill 함수, 그리고 '1'과 '0'을 정답 포맷에 맞게 바꾸어주는 replace 함수를 사용하였다.

 

파이썬 함수로 덕지덕지 바르는 바람에 코드가 짧고 간결해졌다. 

 

def solution(n, arr1, arr2):
    answer = []
    answer = [a|b for a, b in zip(arr1, arr2)]
    answer = [((bin(x)[2:].zfill(n)).replace('1', '#')).replace('0', ' ') for x in answer]
    return answer

 

과거 내 풀이

귀엽다.

 

def binary(n, a):
    decode = ""
    for i in range(n):
        decode += str(a%2)
        a = a//2
    decode = decode[::-1]
    return decode

def solution(n, arr1, arr2):
    answer = list()
    mapa, mapb = list(), list()
    for a in arr1:
        mapa.append(binary(n, a))
    for b in arr2:
        mapb.append(binary(n, b))

    for ma, mb in zip(mapa, mapb):
        mapab = ""
        for i in range(len(ma)):
            if ma[i] == '1' or mb[i] == '1':
                mapab += '#'
            elif ma[i] == '0' and mb[i] == '0':
                mapab += ' '
        answer.append(mapab)
    return answer

 

총평

과거의 '나'에게서는 순수하지만 무지함이 보인다면, 현재의 '나'에게서는 노련함이 보인다.

'알고리즘 > 카카오 EASY' 카테고리의 다른 글

압축 (Level 2)  (0) 2022.07.25
다트 게임 (Level 1)  (0) 2022.07.11
캐시 (Level 2)  (0) 2022.07.08
프렌즈4블록 (Level 2)  (0) 2022.07.08
후보키 (Level 2)  (0) 2022.07.07