문제 : boj17081
... (생략)
필요 알고리즘 개념
- 구현
- 알고리즘 지식은 따로 필요없고, 제시된대로 구현하면 된다. 다만 구현만 하면 되는데 플래인..
※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.
풀이
문제 지문양만 봐도 풀어볼 생각을 하려면 많은 용기가 필요하다(?). 순수 구현 문제로 플래티어를 받은 전설의 문제이다. 풀이가 필요없다.. 정말 문제에 제시된대로 구현만 하면 된다.
정답 떠서 이렇게 기쁜 문젠 오랜만이다.
코드 길이 보면 알겠지만 디버깅이 쉽지 않다 ㅋㅋㅋㅋ 아래는 어떻게든 디버깅을 해보려고 하던 흔적이다. 한번 짤 때 설계 잘 해서 침착하게 짜야한다.
그럼에도 매우 추천하는데, 그냥 아무런 설계 없이 평소대로 짜려고 하면 진짜 만만치 않다. 객체지향적으로 설계 다 하고 짜야 통과할 수 있다. (위에 틀린건 HU 악세서리에서 보스만 적용해야되는데 일반 몬스터도 적용시키는 실수를 해서 틀렸다 ㅠ..)
내 경우엔 아래처럼 대강 객체 구조를 잡아두고 시작했다.
맵의 각 칸에 MapObject가 있고, 거기에 Player 객채를 넣고, MapObject에 있는 abstract proc(Player player) 을 실행하면 각 오브젝트마다 자신에게 맞는 동작을 알아서 실행하는 방식의 패턴을 적용해 코드를 설계했다. 즉 외부에서 타입보고 작동하는게 아니고, 그냥 각자 자기 할일을 문제없도록 완벽하게 하는거다. 그게 모이면 전체 동작이 된다. 예를들어 trap 객채의 경우 player의 체력을 뺀다. 빈 공간 객체는 아무 동작도 하지 않는다. Enemy는 전투 동작을 진행한다.
코드 설계해서 짜보는 연습용으로 엄청 좋을 것 같다. 추천! 자기 설계에 맞춰서 짜지 않으면 의미가 없고, 백준에 제출한 코드는 패키지도 나눠지지 않아 보기 힘들기 때문에(패키지명 없이 제출해야 하므로, 그냥 별도 프로젝트로 패키지명 다 작성해서 코드 짠 후 파일 하나로 따로 뺐음) 따로 코드는 올리지 않는다.
'PS > BOJ' 카테고리의 다른 글
[자바] 백준 2224 - 명제 증명 (java) (0) | 2022.09.02 |
---|---|
[자바] 백준 1647 - 도시 분할 계획 (java) (0) | 2022.09.02 |
[자바] 백준 5214 - 환승 (java) (0) | 2022.08.30 |
[자바] 백준 1244 - 스위치 켜고 끄기 (java) (0) | 2022.08.30 |
[자바] 백준 17554 - City of Lights (java) (0) | 2022.08.30 |
댓글