출처 : https://www.acmicpc.net/problem/2251
정답 : https://github.com/stemp12/study/blob/master/acmicpc.net/2016.02/2251.cpp
문제가 시작부터 뭔가 복잡한 스멜이 난다. 결국 물을 여기저기 넣어두고 빼고 이걸 반복한다는 말인데...중복을 피하는것이 중요할것같다.
그리고 물이 최대 200L이다. 그럼 배열을 써서 간단히 할수있을것 같다.
그리고 물을 이동할때 모든 경우를 저장해놔야 중복을 피할수있을텐데, 맵을 쓰면 좋겠다.
그러나 A, B, C인데 3개의 인자를 전부 저장하면서 중복을 피하려면 tuple이라는걸 쓰면 된다.
http://www.cplusplus.com/reference/tuple/tuple/?kw=tuple
이곳을 참조하면 튜플에 대해 이해할수있다.
구조체를 사용하고자 한다면 map을 사용할수없다. 왜냐면 map에게 구조체를 인자로 주면 컴파일단계에서 에러가 난다. 이게 내가 뭔가 놓치고 있는 것 같으나, 일단 스킵하고 tuple을 쓰면 해결이 된다. 인자가 2개일때는 pair를 쓰고 3개부터는 tuple을쓰면된다. 그러나 tuple역시 한계가 있는데 내가 아는 바로는 10개정도가 한계이다. 그런데 사실상 5개이상부터는 tuple이 아닌 다른 방법을 찾아보는게 더 좋겠다.
아무튼 튜플을 사용하여 특정 컵이 다 차거나 빌때까지 이동을 계속 해주면서 체크해주면 된다.
그리고 A값이 0일때만 C의 데이터를 저장해야한다. 모든 경우에 대해서 중복을 계속 체크해주면서 피하면 제시간내에 정답을 낼 수 있다.
'Algorithm' 카테고리의 다른 글
[AC] 1793 타일링 (0) | 2016.02.24 |
---|---|
[AC] 11729 하노이 탑 이동 순서 (0) | 2016.02.24 |
[AC] 2239 스도쿠 (0) | 2016.02.24 |
[AC] 1912 연속합 (0) | 2016.02.24 |
[AC] 5893 17배 (0) | 2016.02.24 |