Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 프로그래머스 #NULL 처리하기
- 백준 #백준2217 #백준로프 #python
- 그리디알고리즘 #그리디 #백준 #우선순위큐 #최소힙 #최대힙 #알고리즘 #코딩테스트 #python
- 카카오 코테
- 프로그래머스 #c++ #코딩테스트
- 백준 #백준알고리즘 #알고리즘 #코딩테스트 #코딩테스트준비 #코테준비 #백준2110 #python #문제풀이
- 프로그래머스 #python #코딩테스트 #코테공부 #알고리즘 #dict
- 프로그래머스 #sql #mysql #코딩테스트
- 동
- 카카오 #프로그래머스 #python #코딩테스트 #오픈채팅방
- 백준 #이거다시풀기
- 프로그래머스 #python #2021카카오 #카카오코테 #카카오인턴쉽
- 프로그래머스 #네트워크 #c++ #코딩테스트 #코테 #코테준비 #dfs
Archives
- Today
- Total
say repository
[프로그래머스] [1차] 비밀지도 python 본문
728x90
https://programmers.co.kr/learn/courses/30/lessons/17681
출처 : 프로그래머스
코딩테스트 연습 - [1차] 비밀지도
비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다
programmers.co.kr
def solution(n, arr1, arr2):
answer = []
tmp1 = []
tmp2 = []
# arr1 수를 이진수로 바꾸기
for i in range(len(arr1)):
tmp = ''
while True:
if arr1[i]==0:
while len(tmp)!=n:
tmp+='0'
tmp1.append(tmp[::-1])
break
tmp += str(arr1[i]%2)
arr1[i]//=2
# arr2 수를 이진수로 바꾸기
for i in range(len(arr2)):
tmp = ''
while True:
if arr2[i]==0:
while len(tmp)!=n:
tmp+='0'
tmp2.append(tmp[::-1])
break
tmp += str(arr2[i]%2)
arr2[i]//=2
for i in range(n):
tmp = ''
for j in range(n):
if tmp1[i][j] == '1' or tmp2[i][j] == '1':
tmp += '#'
else:
tmp += ' '
answer.append(tmp)
return answer
풀이 1
10진수를 2진수로 만드는 방법을 10진수를 계속 2로 나눠줘서 나머지를 구하는 방식으로 했다.
거의 빡구현이다.
계속 반복문이 반복되는 부분을 느꼈지만, 일단 풀어봤다.
다른 사람들의 풀이를 보고 너무 짧아서 놀랐다.
def solution(n, arr1, arr2):
answer = []
for i,j in zip(arr1,arr2):
arr = str(bin(i|j))[2:] # 둘 중에 하나라도 있으면 (비트 연산..)
arr = arr.rjust(n,'0') # 0으로 채워주기
arr = arr.replace('1','#')
arr = arr.replace('0',' ')
answer.append(arr)
return answer
풀이 2
python 내장 함수를 사용하는 풀이다.
arr = str(bin(i|j))[2:] # 둘 중에 하나라도 있으면 (비트 연산..)
arr = arr.rjust(n,'0') # 0으로 채워주기
bin () 함수는 10진수를 2진수로 변환해주는 함수이다.
bin(n) 을 출력해보면 0b01001처럼 앞에 '0b' 가 붙어서 나온다.
이는 문제에서 쓸모없으니 슬라이싱해준다.
rjust() 함수는 rjust(자릿수, 채워줄 값)의 옵션을 갖고 있다.
오른쪽 정렬을 하고 자릿수까지 남는 값을 채워줄 값으로 채워주는 함수다.
bin으로 10진수를 2진수로 바꾸고 남는 앞자리 수는 모두 0으로 채워줘야 하는데,
이를 rjust() 함수로 해결한 것이다.
그리고 arr1, arr2를 zip으로 묶어줬다.
또한, arr1과 arr2에서 하나라도 벽이면 벽이다. 이는 비트 연산 | 을 이용했다.
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [1차] 다트 게임 python (0) | 2022.04.05 |
---|---|
[프로그래머스] 소수 찾기 python (0) | 2022.04.05 |
[프로그래머스] 최대공약수와 최소공배수 python (0) | 2022.04.04 |
[프로그래머스] 시저 암호 python (*) (0) | 2022.04.02 |
[프로그래머스] 이상한 문자 만들기 python (0) | 2022.04.02 |