MY MEMO
[BAEKJOON] 2156 포도주 시식 본문
두번째 실패
구글을 찾아보았는데 생각해보니.. 한잔도 마시지 않는 경우가 있다는 것을 알았다..
한잔도 마시지 않는 경우라니! 이건 어떻게 저장해야할지 몰랐다.
따라서 그냥 배열을 3차배열로 변경하였다.
그리고 max값에서 한개를 더 추가하였다. 바로 마시지 않고 넘어갈 때이다.
그랬더니 정답이 떴다.
사실 답을 배낄려고 했다가..한번 해보자 한건데 됬다..
drinking_wine 함수 안을 살펴보면 index가 cup_count보다 크면 현재 alchol을 return 하였다.
(top_down방식 사용)
아 만약 cup_count보다 크면 배열을 넘어선다 하지만 미리 10002개의 배열을 만들어놓았다.
왜냐하면 문제의 최대 와인잔의 개수는 10000개이기 때문이다. 그리고 0으로 초기화를 시켜놓았다.
만약 -1로 초기화를 시켜놓으면 현재 답에서 -1을 더해주는 것이기 때문에 답이 달라지게 된다.
그리고 cache에서 flag index값이 현재 있는지를 확인하고 존재한다면 return한다.
before_flag가 무엇이냐면 사실 이름을 잘 못지었다.
before_flag는 현재 얼마나 연속적으로 와인을 마셨는지를 count하는 것이다.
이 함수의 전체적인 아이디어는
현재 잔을
1. 안 마실수도 있고
2. 마실 수도 있고
2-1. 마시는 대신 다음잔도 마실수도 있고
2-2. 마시는 대신 다음잔을 안 마실 수도 있고
만약 before_flag가 2 즉 연속으로 두잔을 마셨으면 2잔뒤의 값을 마셔준다.
main에서도 3개로 나누어서 max값을 계산한다.
max(drinking_wine(0, 1, 0), max(drinking_wine(0, 1, 1), drinking_wine(1, 1, 2)))
세번째 성공
'ALGORITHM > BAEKJOON' 카테고리의 다른 글
[BAEKJOON] 1937 욕심쟁이 판다 (0) | 2017.05.30 |
---|---|
[BAEKJOON]1912 연속합 (0) | 2017.05.30 |
[BAEKJOON] 10844 쉬운 계단 수 (0) | 2017.05.30 |
[BAEKJOON] 2193번 이친수 (0) | 2017.05.23 |
[BAEKJOON] 1463번 1로 나누기 (0) | 2017.05.22 |