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

강주형·2022년 8월 11일
0

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

2018 KAKAO BLIND RECRUITMENT

def solution(n, arr1, arr2):
    map_final = ['' for i in range(n)]
    for i, (ar1, ar2) in enumerate(zip(arr1, arr2)):
        map1 = ''
        map2 = ''
        for j in range(n):
            map1 += str(ar1 % 2)
            ar1 = ar1//2
            map2 += str(ar2 % 2)
            ar2 = ar2//2
        map1 = map1[::-1]
        map2 = map2[::-1]
        for a1, a2 in zip(map1, map2):
            if a1 == a2 == '0':
                map_final[i] += ' '
            else:
                map_final[i] += '#'
    return map_final

오랜만에 카카오 문제 나오니까 어지러웠다.
기존에 다른 문제 풀면서 익힌 기법들을 하나하나 적용하면서 푸니까 그렇게 어렵지 않았음
타인 코드를 보기 전까진 꽤 잘 짰다고 생각했음


타인 코드
def solution(n, arr1, arr2):
    answer = []
    for i,j in zip(arr1,arr2):
        a12 = str(bin(i|j)[2:])
        a12=a12.rjust(n,'0')
        a12=a12.replace('1','#')
        a12=a12.replace('0',' ')
        answer.append(a12)
    return answer

뭔소린지 하나도 모르겠어서 검색해봄

아래 예시 코드 보고 이해해보자

a = 46
b = 27
print('bin(a):', bin(a))
print('bin(b):', bin(b))
print('bin(a|b):', bin(a|b))
print('str(bin(a|b))[2:]', str(bin(a|b))[2:])
bin(a): 0b101110
bin(b): 0b11011
bin(a|b): 0b111111
str(bin(a|b))[2:] 111111

bin()은 비트연산자로 하면 2진수로 변환해주는데 앞에 0b가 붙음 그걸 [2:]로 제거해준 것
bin(a|b) 하면 비트 OR 연산

print('111'.rjust(3,'0'))
print('111'.rjust(4,'0'))
print('111'.rjust(5,'0'))
111
0111
00111

'str'.rjust(n, 's') 는 'str'을 오른쪽으로 밀어넣고 n 길이만큼 부족한 부분을 's'로 채움


  1. bin(), rjust(), ljust() 다시 보기
profile
Statistics & Data Science

0개의 댓글