- 문제 설명
자세한 문제설명은 아래의 링크로 대신합니다.
programmers.co.kr/learn/courses/30/lessons/64061
주어진 조건에 맞는 로직을 구현하여 인풋, 아웃풋을 정의하는 간단한 문제입니다. 애니팡같은 형식의 게임 로직을 구현하는 것으로, 자료구조 중 Stack을 사용할 수 있는 지에 대한 문제로 생각됩니다.
[0, 0, 0, 0, 0]
[0, 0, 1, 0, 3]
[0, 2, 5, 0, 1]
[4, 2, 4, 4, 2]
[3, 5, 1, 3, 1]
간단히 예시 설명을 하자면, 다음과 같은 2D array 배열이 존재하며 각각의 캐릭터는 숫자에 대응됩니다.
프로도: 1, 화난초록오리(?): 3, 무지: 2, 어피치:4, 멍때리는강아지(?): 5
이후 [1,5,3,5,1,2,1,4] 형태의 move라는 크레인의 위치가 주어지고, 크레인은 가장 위에 있는 인형을 뽑습니다.
예, move=1인 경우 1번째 열의 가장 위에 있는 "어피치" 가 선택이 됩니다.
선택된 어피치는 오른쪽의 빈 "Stack"으로 가장 아래에 쌓이게 됩니다. 이후, 모든 move값들을 처리를 하면서 입력 값이 stack의 가장 마지막 값과 같다면, 두 개의 인형을 터뜨리고 사라진 인형 갯수를 2개씩 더하면서 값을 return 해주면 됩니다. 최종적으로 answer로 제출해야되는 값은 "터뜨린 인형 갯수" 입니다.
stack의 자료구조 특성인 FILO 구조를 이해하셨다면, List를 이용하여 간단하게 구현하실 수 있습니다.
주어진 stack 에서 가장 마지막 2개를 뽑아 같다면, 터트리고 아니면 stack을 계속 쌓아나가면 됩니다.
문제 풀이를 위해 저는 다음과 같이 3가지 조건을 세웠습니다.
긴 문장 지문을 이해하고 이것을 자신만의 조건으로 풀이해내는 연습을 해보고있습니다.
저는 주어진 제한사항과 지문을 다음과 같이 단계별로 나누어, 각 조건을 직관적인 함수로 구현해보았습니다.
- 접근 방법
1. move가 주어졌을 때 board로 부터 인형을 1개 Pick한다.
- 1-1 인형을 뽑아서 옮겼으므로, board로 새롭게 업데이트해주어야한다.
2. 오른쪽 List에 쌓는다.
3. List 를 체크하여, 같은 인형이 들어오면 부순다.
위 조건을 만족하는 코드는 다음과 같습니다.
각 함수 별로 기능을 나누어 코드로 옮겨보는 연습을 해보았습니다.
def solution(board, moves):
stack_doll=[]
answer=0
for move in moves:
doll, board = pick_doll_from_board(board, move) # 조건 1
if doll !=0: # 0 인 곳은 빈칸이므로 옮기지 않습니다.
stack_doll.append(doll) # 조건 2
stack_doll, distroy= check_doll_basket(stack_doll) # 조건 3
answer += distroy
return answer
def pick_doll_from_board(board, move_num):
# given move, pick one doll
# input : current board, move number
# return : picked doll, new board
doll = 0
for row_num,num in enumerate(board):
if num[move_num-1] !=0:
doll = num[move_num-1]
board[row_num][move_num-1] = 0 # 조건 1-1, board update
break
return doll, board
def check_doll_basket(stack_doll):
# given doll list, distroy the dolls if input and last one are same
# input : list of picked doll
# return : updated list of doll, count of distroy
if len(stack_doll) >=2 :
input_doll = stack_doll[-2:][0]
current_doll = stack_doll[-2:][1]
if input_doll == current_doll :
stack_doll.pop()
stack_doll.pop()
return stack_doll, 2
return stack_doll, 0
'Programmers 풀이 > [KaKao]' 카테고리의 다른 글
[Python] 프로그래머스 2019 KAKAO 코딩테스트 - 오픈채팅방 (0) | 2021.08.22 |
---|---|
[Python] 프로그래머스 2019 KAKAO 코딩테스트 - 실패율 (0) | 2021.08.21 |
[Python] 프로그래머스 2018 KAKAO 코딩테스트 - 추석 트래픽 (0) | 2021.08.09 |
[Python] 프로그래머스 2020 KAKAO 코딩테스트 - 문자열 압축 (0) | 2020.12.15 |
[Python] 프로그래머스 2020 KAKAO 코딩테스트 - 괄호변환 (0) | 2020.12.13 |