일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 겨울카카오인턴
- 프로그래머스
- Java
- design-pattern
- 함수형 프로그래밍
- 백준
- Rails
- DesignPattern
- Python
- JDBC
- tcp
- 디자인패턴
- javscript
- Network
- functional programming
- 파이썬
- Eclipse
- 스택
- solid
- 자바
- Spring
- JavaScript
- Pattern
- lambda calculus
- Collection
- Collections
- exception
- 람다 칼큘러스
- 로버트마틴
- 큐
Archives
- Today
- Total
개발자 노트
[프로그래머스-2019겨울카카오인턴]크레인인형뽑기게임 본문
문제설명
스택 및 이차원배열을 물어보는 문제
접근
바구니는 단순히 stack만을 이용하면 되고, 이차원 배열에서 뽑을 인형을 잘 두는게 포인트.
이차원 배열도 세로로 스택으로 보기 위해 각열에서 top을 미리 찾은 다음 뽑을 때마다 +1
씩 해주는 방식으로 접근했다. 왜냐하면 아래로 갈 수록 값이 증가하니까.(이 부분에서 디버깅하는데 10분 소요했다. (전체 풀이시간 30분))
구현
def solution(board, moves):
n = len(board)
tops = [0 for _ in range(n)] #값이 있는 index
for c in range(n):
for r in range(n):
if board[r][c] != 0:
tops[c] = r
break
answer = 0
basket = []
for m in moves:
position = m-1 #꺼낼 장소
top = tops[position] #꺼낼 장소에 있는 top 번호
if top == n: #비어 있으면 다음으로
continue
tops[position]+=1 #꺼낸 장소에 있는 top 1 감소
item = board[top][position] # 꺼낸 아이템
if not basket: #배스킷 비어 있으면
basket.append(item)
else:
if basket[-1] == item:
basket.pop()
answer += 2
else:
basket.append(item)
return answer
반응형
'알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스-2019겨울카카오인턴]불량사용자 (0) | 2020.03.31 |
---|---|
[프로그래머스-2019겨울카카오인턴]튜플 (0) | 2020.03.31 |
[프로그래머스-2019겨울카카오인턴]호텔방배정 (0) | 2020.03.31 |
[백준]5052 전화번호목록 (0) | 2020.03.31 |
[백준]17822.원판돌리기 (0) | 2020.03.27 |
Comments