본문 바로가기
Coding Test/Programmers

프로그래머스 - Level.1 비밀지도(카카오) (Python)

by JUNG씨 2022. 11. 18.

 

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

 

프로그래머스

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

programmers.co.kr

 

 

 

 

👩🏻‍💻 내가 작성한 코드

-> 이건 감을 못잡겠어서 토끼반 강의자료 보고 작성했다 ㅠ.ㅠ

def solution(n, arr1, arr2):
    answer = [''] * n
    for i in range(len(arr1)):
        bin1 = bin(arr1[i])[2:].zfill(n)
        bin2 = bin(arr2[i])[2:].zfill(n)
        for j in range(n):
            if bin1[j] == '0' and bin2[j] == '0':
                answer[i] += ' '
            else:
                answer[i] += '#'
    return answer

 

 

🔍 문제 이해 

1. 입력으로 들어온 두 배열을 이진수로 변환

2. 두 배열을 AND 연산

3. 0은 공백, 1은 # 로 출력

 

 

🔑 문제 풀이

1. 입력으로 들어오는 두 배열을 이진수로 변환

print(bin(1))
print(bin(2))
print(bin(3))
print(bin(4))
print(bin(5))
print(bin(6))
print(bin(7))

0b1
0b10
0b11
0b100
0b101
0b110
0b111

-> 내가 원하는 결과는 0b뒤의 숫자들이다 그래서 slicing 으로 잘라내기!

 

print(bin(1)[2:])
print(bin(2)[2:])
print(bin(3)[2:])
print(bin(4)[2:])
print(bin(5)[2:])
print(bin(6)[2:])
print(bin(7)[2:])

1
10
11
100
101
110
111

-> 근데 이제 자리수를 통일하려고 한다!   : 문자열 앞에 "0" 채우기 -> zfill()

 

print(bin(1)[2:].zfill(3))
print(bin(2)[2:].zfill(3))
print(bin(3)[2:].zfill(3))
print(bin(4)[2:].zfill(3))
print(bin(5)[2:].zfill(3))
print(bin(6)[2:].zfill(3))
print(bin(7)[2:].zfill(3))

001
010
011
100
101
110
111

-> 이 원리를 이용해서 함수를 작성해보자!

 

for i in range(len(arr1)):
    bin1 = bin(arr1[i])[2:].zfill(n)
    bin2 = bin(arr2[i])[2:].zfill(n)

-> 배열의 한 변의 길이가 n == n만큼 0으로 채움

 

2. AND 연산하기

if bin1[j] == '0' and bin2[j] == '0’:
	answer[i] += ' ‘
else:
	answer[i] += '#'

 

3. 최종 코드

def solution(n, arr1, arr2):
    answer = [''] * n
    for i in range(len(arr1)):
        bin1 = bin(arr1[i])[2:].zfill(n)
        bin2 = bin(arr2[i])[2:].zfill(n)
        for j in range(n):
            if bin1[j] == '0' and bin2[j] == '0':
                answer[i] += ' '
            else:
                answer[i] += '#'
    return answer