일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 해시테이블
- 자바스크립트
- 큐
- redux
- superstarjypnation
- mysemester
- useState
- CSS
- 프로토타입
- Next.js
- 30daysdowoonchallenge
- 카카오
- html
- UI
- Til
- 운영체제
- 스택
- REST_API
- 회고
- 자료구조
- level1
- web
- vercel
- UX
- 생활코딩
- javascript
- 프로그래머스
- 코드스테이츠
- 백준
- React
- Today
- Total
데굴데굴
[파이썬] 비밀지도 본문
코딩테스트 연습 - [1차] 비밀지도 | 프로그래머스 (programmers.co.kr)
코딩테스트 연습 - [1차] 비밀지도
비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다
programmers.co.kr
1. 십진수 입력을 이진수로 변환하기
2. 지도1과 지도2의 암호화된 배열 비교하기
3. 비교 후 공백과 '#'으로 표현한 code를 차례차례 answer 리스트에 넣어주기
def solution(n, arr1, arr2):
answer = []
bin1 = []
bin2 = []
# 이진수로 변환하기
for dec in arr1:
bin1.append(bin(dec)[2:].zfill(n))
for dec in arr2:
bin2.append(bin(dec)[2:].zfill(n))
# bin1과 bin2를 비교하며 겹치는 부분 마킹, 공백 = 0 "", 벽 = 1 "#"
code = ""
for i in range(len(bin1)):
for j in range(len(bin1[i])):
if bin1[i][j] == "0" and bin2[i][j] == "0":
code += " "
elif bin1[i][j] == "1" and bin2[i][j] == "1":
code += "#"
else:
code += "#"
answer.append(code)
code = ""
return answer
십진수로 입력되는 수를 이진수로 변환한다.
파이썬에서 이진수를 입력하면 0x~~~의 형태로 출력되므로 세 번째 문자부터 출력되도록 슬라이싱한다.
이진수로 변환할 경우 앞자리가 0이면 출력되지 않는다.
하지만 이 문제에서는 이진수가 벽과 공백의 여부를 표현하고 있기 때문에 0이더라도 꼭 표기를 해주어야 한다.
따라서 자릿수를 채워주는 메소드인 zfill()을 이용하여 앞자리가 0이라 표기되지 않는 경우도 다뤄줘야 한다.
zfill()의 인자로는 자릿수 n을 받아 앞부터 0으로 채워져 총 자릿수가 n이 되도록 해준다.
bin1 = 지도1에 해당하는 수(arr1)를 이진수로 변환하여 저장하기 위한 리스트
bin2 = 지도2에 해당하는 수(arr2)를 이진수로 변환하여 저장하기 위한 리스트
code = 지도 두 개를 비교하여 만들어진 최종 암호
같은 자릿수를 비교했을 때 지도1과 지도2에서 둘 다 0이면 공백, 둘 다 1이면 벽, 둘 중 하나라도 0이면 공백이므로 이 조건을 활용하여 코드를 작성한 후 생성된 최종 암호 문자열인 code를 answer 리스트에 차례대로 넣어준다.
마지막으로 answer를 리턴하면 끝
'algorithm > 프로그래머스' 카테고리의 다른 글
[파이썬] 신규 아이디 추천 (0) | 2022.06.27 |
---|---|
[파이썬] 신고 결과 받기 (0) | 2022.06.26 |