프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나의 풀이
- 열 단위 입력을 처리하기 위해서 dict를 만들었는데 그냥 board 변수 그대로 for문 돌려도 됐을 거 같다.
- 사라진 인형의 개수를 세기 위해서 [ic]stack[/ic]을 사용했다.
from collections import deque
def solution(board, moves):
# 남은 열 개수
len_list = dict(zip(range(1, len(board) + 1), [0] * len(board)))
# 남은 열 저장
for idx, col in enumerate(zip(*board[::-1])):
col = list(col)
# 0 처리
for i in col[:]:
if i == 0:
col.remove(i)
len_list[idx + 1] = deque(col)
# 초기값 0
stack = deque([0])
# 사라진 인형 개수
cnt = 0
for m in moves:
if len_list[m]:
new = len_list[m].pop()
if new == stack[-1]:
stack.pop()
cnt += 2
else:
stack.append(new)
return cnt
다른 사람 풀이
- [ic]filter[/ic]와 [ic]map[/ic]을 이용해서 0을 한번에 처리했다.
- lambda로 나온 x는 zip을 통해 얻은 열, filter에서의 y는 x의 각 성분 값!
def solution(board, moves):
cols = list(map(lambda x: list(filter(lambda y: y > 0, x)), zip(*board)))
a, s = 0, [0]
for m in moves:
if len(cols[m - 1]) > 0:
if (d := cols[m - 1].pop(0)) == (l := s.pop()):
a += 2
else:
s.extend([l, d])
return a
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr