본문 바로가기
Problem Solving/프로그래머스

[프로그래머스 | 파이썬] 비밀지도 (2018 KAKAO BLIND RECRUITMENT/ level 1)

by 청량리 물냉면 2022. 12. 28.
반응형
문제

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

 

프로그래머스

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

programmers.co.kr

 

 

코드
def solution(n, arr1, arr2):
    answer = []
    for i in range(n):
        arr1[i] = format(arr1[i], 'b').zfill(n)
        arr2[i] = format(arr2[i], 'b').zfill(n)
    for i in range(n):
        hap = ''
        for j in range(n):
            if arr1[i][j] == arr2[i][j] and arr1[i][j] == '0':
                hap += " "
            if arr1[i][j] == '1' or arr2[i][j] == '1':
                hap += "#"
        answer.append(hap)
    return answer

1️⃣ arr1과 arr2의 모든 원소를 이진수화 한다. zfill함수를 이용해 각 자리수를 n자리로 맞춘다.(공백 부분에는 0을 추가)

2️⃣ 이중 for문을 돌면서 arr1과 arr2의 문자열을 하나씩 탐색한다. 각 자리의 두 수가 0으로 동일하면 hap 변수에 공백을 추가하고, 두 수 중 하나라도 1이면 벽이므로 #을 추가한다.

3️⃣ 완성된 hap을 answer 배열에 추가한다.(한 줄 완성)

4️⃣ 위의 1️⃣ ~ 3️⃣을 n번 반복한다.

 

 

다른 풀이 방법
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

🔸 a12 = str(bin(i|j)[2:]): i와 j를 or 연산해서 이진화한다.

🔸 a12 = a12.rjust(n,'0'): 오른쪽 정렬해서 출력, 공백 자리에는 '0'을 추가한다.

🔸 1을 #으로, 0을 공백으로 변경한 뒤 배열에 append

반응형