프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

나의 풀이

  • 열 단위 입력을 처리하기 위해서 dict를 만들었는데 그냥 board 변수 그대로 for문 돌려도 됐을 거 같다.
  • 사라진 인형의 개수를 세기 위해서 [ic]stack[/ic]을 사용했다.

zip 사용

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