Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
🔗 문제 링크
입대
✔️ 소요된 시간
5시간...?
댕 어렵다... 🐶
✨ 수도 코드
아놔 이거 레퍼런스도 없고 생긴 지 얼마 안된 문제라 구글에 쳐봐도 정보가 없다..
숨이 턱 막히고 울화통이 터질 뻔 했다랄까...?
결론부터 말하자면 오픈 채팅방에 여쩌봤떠니 루비 형님 2분께서 10분만에 풀어주셨다.
thanks to..
심지어 저거 풀어주신 tony 님 (민상님)은 소마 11기셨다.
소마에 있는 사람들은 대단한 것 같다고 느껴졌다...
저거 날짜, 헌혈한 횟수를 기준으로 2차원 테이블을 만들라는 말에서 바로 번뜩 떠올랐다.
정말... 내가 4시간 삽질해도 못푸는 문제를 루비 형아들은 단 몇 초만에 떠올리고 10분 만에 코드를 제출해서 성공하셨다.
벽 많이 느껴진다....
일단 다시 문제로 돌아와서,
전체적인 로직은 다음과 같다.
아래 예시를 기준으로,
먼저 남은 날짜와 헌혈을 하는 횟수를 기준을 축으로 DP 테이블을 만든다.
(이거까지 떠올리는 게 이 문제의 핵심이다. 근데 난 그걸 못했고.)
그리고 가장 첫 날 부터 마지막날 까지 순회를 시작한다.
이 때, 헌혈을 할 수 있는 횟수도 순회를 하는데,
(즉 날짜를 옮기면서 표의 세로축도 훑어본다.)
아래와 같은 그림에서,
첫 번째날 헌혈을 한 번 해서 얻을 수 있는 최대 점수는 0점이다.
왜냐하면 첫 번째 날부터 헌혈 하는데, 쉬어야 하는 날 2일 전에는 없으므로.
(나는 헌혈이 끝나는 날 점수를 얻는 방식으로 구현했다. 헌혈이 시작하는 날 점수를 얻게 구현할 수도 있겠지?)
그리고 그 날 표의 세로 축을 다 채웠으면 다음 날짜로 넘어간다.
이 때, 헌혈을 0번 할 때의 최대 값은
이 전 날의 헌혈 0번 할 때의 최대 값 + 오늘날 봉사할 때의 값이다.
그리고 세로 축을 탐색한다.
여기서 보면 2일을 쉬면 10점을 얻을 수 있는데,
표에서는 2일 전 (가로축 2칸 전) 은 표의 밖 영역이다.
그렇기 때문에 잡 기술로 왼쪽에 아무 값도 없는 패딩 영역을 넣어준다.
그리고 2일 전을 탐색해준다.
이렇게 세로 축을 모두 갱신해준다.
그 다음 날로 또 넘어간다.
또 반복한다.
그렇게 마지막 까지 표를 다 채우면,
마지막에는 표의 마지막 세로축만 탐색한다.
끝....!
📚 새롭게 알게된 내용