🧩 Problem Solving

[BOJ] 백준 16235번: 나무재태크

date
Jul 4, 2023
slug
boj-16235
author
status
Public
category
🧩 Problem Solving
tags
BOJ
summary
우선순위큐, deque, 스택 등의 자료구조를 활용할 수 있음을 잊지 말자!
type
Post
thumbnail
백준 문제.png

문제링크

 

단순 구현

구현내용
  • 봄 - 나이만큼 양분먹고 나이+1
  • 여름 - 죽은 나무들 나이/2 만큼 양분 추가
  • 가을 - 8방향 번식
  • 겨울 - 기본 양분 추가
 
나무 정보를 어떤 자료구조로 저장할 것인지가 중요한 문제
봄에 나무들이 양분을 먹을 때, 나무의 나이 순서대로(어린 순) 양분을 먹기 때문에 나무 나이 순으로 정렬 과정이 필요하다.
그러나 list를 사용하면서 매 봄마다 sort를 하게 되면 시간초과(TLE)를 피할 수 없다.
따라서 나는 우선순위큐를 사용하여, 정렬을 하지 않아도 항상 어린 순서로 나무를 조회할 수 있도록 하였다.
 

deque를 사용한다면 정렬을 한 번도 하지 않아도 동일한 결과를 낼 수 있다!!

‘입력으로 주어지는 나무의 위치는 모두 서로 다름’ 이라고 되어 있기 때문에, 한 구역에 처음 심어지는 나무는 최대 1개로 제한된다.
따라서 봄-여름-가을-겨울 시기를 지나며 한 구역에 심어지는 나무의 수가 1개 이상으로 늘어나더라도 그 순서는 변하지 않는다. (가장 처음에 심어지는 나무 > 그 이후에 번식하는 나무 > 그 이후… > 그 이후… 순서로 유지)
따라서 가을 번식 때 심어지는 나이=1 의 나무는 left로 넣어준 후, 나무의 양분을 먹을 때에는 popleft()로 꺼내서 양분을 비교하면 된다.