일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Threshold
- 3D
- 파이썬
- 자료구조
- numpy
- 스택
- flame
- deep learning
- Deeplearning
- Object Tracking
- point cloud
- reconstruction
- re-identification
- Computer Vision
- 프로그래머스
- attention
- Python
- cv2
- 큐
- Knowledge Distillation
- center loss
- NLP
- Object Detection
- transformer
- 알고리즘
- 논문 구현
- level2
- 딥러닝
- 임계처리
- OpenCV
- Today
- Total
공돌이 공룡의 서재
[프로그래머스 Level 1] 크레인 인형뽑기 / 2019 카카오 개발자 겨울 인턴십 / 파이썬 본문
<문제>
https://programmers.co.kr/learn/courses/30/lessons/64061
문제가 상당히 길어서 링크로 대체.
<풀이>
def solution(board, moves):
##1
answer = 0
line = {}
box = []
## 2
for i in range(len(board)):
line[i+1] = []
for i in board[::-1]:
for j in range(len(i)):
if i[j] != 0:
line[j+1].append(i[j])
# print(line)
# print(moves)
## 3
for i in moves:
# print('Morning', box)
if len(line[i]) > 0:
pick = line[i].pop()
box.append(pick)
# print('Lunch', box)
if len(box) > 1:
if box[-1] == box[-2]:
box.pop()
box.pop()
answer += 2
else:
pass
# print('Dinner', box)
print(answer)
return answer
코드 설명:
##1 : 다른 풀이 방법들도 있겠지만 개인적으로 board로 주어진 list를 그대로 다루면 좀 헷갈릴 것 같아서 처음부터 세로줄마다 dictionary를 만드는 방법을 택했다. box는 뽑고 난 인형을 담을 배열이다.
##2: board는 NxN 형태에 가로줄에 있는 인형들의 종류가 주어져있는 형태로 우선 board 길이만큼 dictionary를 만든다. key는 세로로 몇 번째 줄인지, value는 그 줄에 들어있는 인형들의 종류로, 오른쪽일수록 위에 있고 왼쪽에 있을수록 밑에 있는 인형이다. (for문을 돌렸을 때 board[::-1]로 돌렸기 때문에 append만으로 이렇게 구현하는 것이 가능하다.) 0인 경우는 인형이 없는 경우이므로 dictionary의 value에 넣지 않는다.
##3: moves를 탐색한다. line의 value 배열의 길이가 0이면 더 이상 꺼낼 인형이 없다는 뜻이므로 pass하고, 아니면 하나 꺼낸다. 이 꺼낸 인형이 변수 pick에 해당한다. box에 pick을 넣고 box의 길이가 1보다 클때 맨 위에 있는 2개를 검사한다. 같으면 2개 지우고 answer값을 2 더해준다.
+@:
추가로 확인해본 테스트케이스다.
solution(board=[[0,0,0,0,0,0],[0,0,1,0,3,0],[0,2,5,0,1,2],[4,2,4,4,2,6],[3,5,1,3,1,6],[1,2,3,4,5,6]],
moves=[1,4,2,2,2,2,6,6,6])
답이 8 이 나오면 된다.
## 풀다가 했던 실수:
문제 조건에서 NxN board인데 5x5로 보고 line을 {1: [], 2: [], 3: [], 4: [], 5: []} 으로 놓고 풀었더니 런타임에러가 떴다. moves에 6이나 9가 있다면 line에 해당하는 key값이 없기 때문이다.
'코딩 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 Level 2] 기능개발 / (스택/큐) / 파이썬 (0) | 2020.09.07 |
---|---|
[프로그래머스 Level 2] 주식가격 / (스택/큐) / 파이썬 (0) | 2020.09.02 |
[프로그래머스 Level 2] 다리를 지나는 트럭 / (스택/큐) / 파이썬 (0) | 2020.08.29 |
[프로그래머스 Level 1] 문자열 내 마음대로 정렬하기 / 연습문제 / 파이썬 (0) | 2020.08.16 |
[프로그래머스 Level 1] 같은 숫자는 싫어 / 연습문제 / 파이썬 (0) | 2020.08.16 |