The Way

1월 3일/4일 백준 (2618, 1315) 본문

PS/백준 온라인 저지

1월 3일/4일 백준 (2618, 1315)

Jeonggyun 2019. 1. 4. 23:37

다이나믹 프로그래밍 위주로 한 번 풀어보았다.


백준 2618번: 경찰차

경찰창의 위치와 각 위치일 때 그 위치가 될 때까지 이동한 거리의 최솟값을 저장해놓으면 된다.

나는 빡대가리같이 map을 써서 코드를 짰다. 굉장히 똥코드지만.. 뭐 통과만 하면 됐지

정석 방법은 각 위치를 1~1000번 번호를 붙여준 뒤 2차원 배열에 저장하는 방법이다.

문제가 치사하게 경로까지 출력해야 하기 때문에 아마 거리, 직전 위치 2가지는 저장해야 한다.




백준 1315번: RPG

오늘 나의 멘탈을 아작낸 문제.. 쉬운건데 자꾸 이러니까 하루에 한 문제밖에 못 푼다.. 울고 싶다.

처음에 문제 조건의 or 조건을 and로 봐서 시간을 조금 날리고.. 다시 풀었는데 맞왜틀의 정말 화려한 향연이 펼쳐졌다.

결론은 틀린 이유는 약간의 알고리즘 오류.. 자면서 반성해야겠다.

원래는 그림까지는 안그리는데 slack에 질문하느라 그림까지 그렸으니 아까워서 올린다.


(STR, INT) = (m, n)일 때의 최선의 상태는 STR[i] <= m, STR[i] <= n인 모든 퀘스트를 다 깬 상태다.

이 상태에서 남은 PNT를 구할 수 있으니(하나로 결정된다) 포인트가 1 이상 남아있다면 STR 또는 INT에 하나씩 올리면서 상태를 업데이트해주면 된다.

STR을 올리면 그림의 빨간색 부분 퀘스트를 새로 깨게 되므로 빨간색 영역에 해당하는 PNT를 늘려주면 되고, INT를 올리면 파란색 부분을 늘려주면 된다.


문제에서 구하려는 것은 클리어한 퀘스트의 최대 갯수이므로, 이를 각 상태마다 max해 주어야 하는데, (전체 퀘스트의 갯수 - 못 깬 퀘스트의 갯수)로 쉽게 구할 수 있다. 모양은 그림의 검정색 영역처럼 되는데, 이는 2차원 배열로 쉽게 구할 수 있다.



Comments