[Silver III] 쿠키런 - 33925

문제 링크

성능 요약

메모리: 108384 KB, 시간: 88 ms

분류

그리디 알고리즘

제출 일자

2025년 5월 23일 22:14:59

문제 설명

과거 쿠키런 최고 권위자로 이름을 날렸던 안뇽이는 한때 최애 게임이었던 쿠키런이 벌써 12주년을 맞았다는 소식을 듣고 복귀 유저가 되었다!

쿠키런의 스테이지는 $3 \times N$ 크기의 $2$차원 배열로 구성되어 있으며, 플레이어(쿠키)는 $1$번 열(왼쪽 끝)에서 출발해 $N$번 열(오른쪽 끝)에 도착해야 한다.

스테이지의 임의의 열에는 $3 \times 1$ 크기의 장애물이 있으며, 장애물은 낮은 장애물, 높은 장애물, 상단 장애물 $3$종류가 있다.

각 장애물은 ‘^’, ‘.’, ‘v’의 조합으로 이루어져 있으며, 낮은 장애물은 점프를 $1$번 사용해, 높은 장애물은 점프를 $2$번 사용해, 상단 장애물은 슬라이드를 $1$번 사용해 각각 피할 수 있다. 점프나 슬라이드를 사용해 장애물을 회피한 후에는 직전의 점프나 슬라이드 상태가 유지되지 않는다.

출발점인 $1$번 열과 도착점인 $N$번 열에는 장애물이 존재하지 않으며, $k$번 열에 장애물이 존재한다면 바로 뒤 $k + 1$번 열에는 장애물이 연속하게 존재하지 않는다.

게임 시작 시점 처음 쿠키의 체력은 $H$이며, 장애물의 종류와 관계없이 장애물에 $1$번 부딪힐 때마다 체력이 $K$만큼 감소한다. 이때 체력이 $0$ 이하가 되면 스테이지 클리어에 실패하며, 그렇지 않다면 다음 열로 이동한다. 만약 쿠키가 무사히 $N$번 열에 도착한다면 스테이지 클리어에 성공한다.

쿠키런 고인물인 안뇽이는 발가락으로도 스테이지를 클리어할 수 있다고 자신했다. 하지만 안뇽이는 발가락이 짧아서 실제로 발가락으로 게임을 할 수는 없었기 때문에, 결국 고민 끝에 안뇽이는 점프를 $J$번 이하, 슬라이드를 $S$번 이하로만 사용해 스테이지를 클리어해보기로 마음먹었다.

$3 \times N$ 크기의 스테이지가 주어질 때, 안뇽이가 스테이지를 클리어했을 때의 최대 체력을 구해보자.

입력

첫 번째 줄에 정수 $N, J, S, H, K$가 공백으로 구분되어 주어진다.

이어서 $3$줄에 걸쳐 스테이지의 정보가 주어진다.

출력

안뇽이가 점프를 $J$번 이하, 슬라이드를 $S$번 이하로 사용해 스테이지를 클리어했을 때의 최대 체력을 출력한다.

만약 안뇽이가 스테이지를 클리어할 수 없다면 대신 -1을 출력한다.


💡 해결 방법

💻 코드

n, j, s, h, k = map(int, input().split())
 
map1 = input()
map2 = input()
map3 = input()
 
totalmap = list(zip((x1 for x1 in map1), (x2 for x2 in map2), (x3 for x3 in map3)))
 
# print(totalmap)
 
totalmap2 = [0, 0, 0]
 
for i, v in enumerate(totalmap):
    if totalmap[i].count('v') == 2:
        totalmap2[0] += 1
    elif totalmap[i].count('^') == 1:
         totalmap2[1] += 1
    elif totalmap[i].count('^') == 2:
         totalmap2[2] += 1
 
 
 
# print(totalmap2)
 
while s > 0 and totalmap2[0] > 0:
    s -= 1
    totalmap2[0] -= 1
 
 
while j > 0 and totalmap2[1] > 0:
    j -= 1
    totalmap2[1] -= 1
 
 
 
 
 
while j >= 2 and totalmap2[2] > 0:
    j -= 2
    totalmap2[2] -= 1
 
 
 
# print(totalmap2)
 
 
ans = h - sum( [x * k for x in totalmap2 if x >= 0])
 
print(ans) if ans > 0 else print(-1)