[BOJ 24884] 백준 24884번 - 장작 넣기
2022 숭고한 연합 알고리즘 콘테스트 Open Contest 풀이 | ||
---|---|---|
A | [BOJ 24883] 자동완성 | |
B | [BOJ 24884] 장작 넣기 | |
C | [BOJ 24885] 주식 | |
D | [BOJ 24886] SKH 문자열 | |
E | [BOJ 24887] 최대한의 휴식 | |
F | [BOJ 24888] 노트 조각 | |
I | [BOJ 24891] 단어 마방진 |
1. 문제
$24884$. 장작 넣기 (2022 숭고한 연합 알고리즘 콘테스트 B번)
2. 풀이
$N\leq 6$이고, 각 시각마다 취할 수 있는 행동은 총 세 가지가 있다.
- 현 위치에 그대로 머무른다.
- 왼쪽으로 이동한다.
- 오른쪽으로 이동한다.
따라서 총 $3^6=749$ 개의 경우의 수가 생기기 때문에, 브루트포스를 돌리면 시간 내에 충분히 돌아간다.
DFS
는 이런식으로 구현하였다.
- 현재 화력 정보를 토대로 각 모닥불의 화력이 얼마나 감소할지를 조사하여
vector<int> dec
에 담는다. 단, 현재 위치는 이전 시각에 장작을 넣었으므로, 화력에 변화가 없다. F[i]
를dec[i]
만큼 감소시킨다.- 시각이 $T$인 경우, 켜져 있는 모닥불의 수가 $K$이상인지 조사한다.
시각이 $T$가 아닌 경우, 위에서 서술한 세 가지 행동 각각에 대해서 다음
DFS
로 넘어간다. F[i]
의 값을 원래대로 되돌리기 위해,F[i]
를dec[i]
만큼 증가시킨다.
이때, 주의할 점이 두 가지 있다.
- 화력이 $0$ 이상이라
F[i]
의 최저값을 0으로 제한해버리면, 위에서구현2
를 하고구현4
를 했을 때, 원래 값으로 되돌아오지 않는다. - 시각이 $T$일때도 모든 작업이 끝나면
구현4
를 수행하여F[i]
의 값을 원래대로 되돌려야 한다.
3. 채점 결과
4. 회고
시각이 $T$일때 F[i]
의 값을 빼기 전에 함수를 종료시켜버려서 값을 원래대로 되돌리지 못해 WA
를 한 번 받았다.
DFS
가 다 끝나면, 모든 변수들을 원래대로 되돌렸는지 다시 한 번 확인하는 습관을 들여야겠다.
댓글남기기