programmers.co.kr/learn/courses/30/lessons/64061
문제가 뭔가 복잡해보이지만 로직은 간단합니다.
moves 리스트가 끝날 때까지 board를 돌고,
뽑힌 인형은 새로운 스택을 생성해 그곳에 담습니다.
같은 인형 두 개가 겹치면 스택에서 그 두 인형을 제거합니다.
우선 뽑힌 인형을 담아줄 스택을 생성합니다.
def solution(board, moves):
answer = 0
bucket = []
순서대로 크레인의 움직임 위치를 받습니다.
크레인의 위치를 받으면 2차원 배열의 가장 첫 배열(상단 배열)부터
인형의 유무를 체크합니다.
for move in moves:
for line in board:
if line[move-1] != 0:
# move는 1부터 칸 전체 길이 까지의 숫자입니다.
# 따라서 list의 index로 사용하려면 1을 빼줘야 합니다.
크레인의 위치에 인형이 있다면
스택에 인형을 넣어주고 해당 위치는 인형이 없는 상태인 0으로 바꿔줍니다.
인형을 찾은 뒤 굳이 남은 아래칸들을 뒤질 필요가 없으니
for문에서 나가기 위해 break를 겁니다.
for move in moves:
for line in board:
if line[move-1] != 0:
bucket.append(line[move-1])
line[move-1] = 0
break
인형을 하나 뽑을때마다 스택에 겹치는 인형이 있는지 확인해줘야 합니다.
이 때 스택에 인형이 두 개 이상 쌓였는지 먼저 체크하지 않으면 런타임 에러가 날 수 있습니다.
if len(bucket) >= 2 and bucket[-1] == bucket[-2]:
answer += 2
bucket = bucket[:-2]
def solution(board, moves):
answer = 0
bucket = []
for move in moves:
for line in board:
if line[move-1] != 0:
bucket.append(line[move-1])
line[move-1] = 0
break
if len(bucket) >= 2 and bucket[-1] == bucket[-2]:
answer += 2
bucket = bucket[:-2]
return answer
파이썬의 딕셔너리는 어떻게 구현되어 있을까? -해시- (2) | 2021.04.04 |
---|---|
백준 / DFS / 2667 : 단지번호 붙이기 / 파이썬 (0) | 2021.03.23 |
복잡한 isPalindrome / 정규표현식 re.sub() or isalnum() / leetcode 125번 (0) | 2021.03.06 |
백준 / 동적 계획법(DP) / 1904 / 파이썬 (0) | 2021.03.03 |
플로이드의 토끼와 거북이 알고리즘(Floyd's Tortoise & Hare Algorithm) / 증명 / leetcode 287번 / 파이썬 (5) | 2021.02.22 |
댓글 영역