티스토리 뷰

알고리즘

백준 - 계단 오르기

koyuchang 2021. 6. 24. 13:40

문제 출처:https://www.acmicpc.net/problem/2579

 

2579번: 계단 오르기

계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. <그림 1>과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점

www.acmicpc.net

 

초기 기획 

조건을 제대로 파악하지 못해서 연속 3계단을 오를 수 있다는 사실을 간과했다..

계단을 오르는 step [] 배열을 만든 후, 초기값으로 인덱스 0 은 10으로 설정해 주었다.

i를 0부터 시작해서 다음과 다다음을 확인하며 이동할 수 있는 최댓값을 갱신하였다. 하지만 앞에서 말했다시피 연속 3계단은 불가능이라는 조건을 간과한 나머지 실패..

 

초기 실패 코드

 

다음에는 왠지 몰라도 이중for문으로 해야 할 거 같아서 해본 결과.. 하면 할수록 knapsack문제인가?..라는 고민과 이건 아닌 거 같다는 생각과 막 꼬이기 시작하면서 그만두게 되었다.

 

 

최종 기획

마지막으로는 다른 분들의 코드를 참고한 결과 제대로된 해결책을 찾을 수 있었다.!

총 4개를 묶어서 확인한다고 생각하면 편하다. 왜냐하면 연속으로 3칸은 불가능하기 때문이다.

③번에는 무엇이 들어가야할까? 확실한 건 ②번에서 단순히 ④번을 더한 값을 넣으면 안 된다.. 왜냐하면 3칸 연속 이동한 것이기 때문이다.

 

그래서 4칸을 크게 범위 잡아서 확인한다.①번과 첫번째 계단 값인 10 중 최댓값을 골라서 ④를 더 해주면 된다.

왜냐고? 

①은 현재 첫 계단을 밝지 않고 바로 두 칸 이동하는 것과 첫 번째 계단 값인 10은 1번 계단을 밝고  이동한 것이다. 이 둘을 비교한다는 것은  ③으로 이동시 1번 계단을 밝고 2칸 연속 이동하느냐, 아니면 2번 계단에서 1칸 이동할 것인가를 정하는 것이다.

결국, 처음부터 2칸 이동하고 다시 한 칸 이동하는 방법이 제일 큰 값으로 ③에 남으므로,  이걸 공식화하면

 

 

step[i] = Math.max(step[i-3]+value[i-1,step[i-2])+value[i]

 

 

 

 

'알고리즘' 카테고리의 다른 글

프로그래머스 - 순위  (0) 2021.07.09
프로그래머스 - 정수 삼각형  (0) 2021.06.27
백준 - 내리막 길  (0) 2021.06.23
백준 - ZOAC  (0) 2021.06.21
SWEA - 프로세서 연결하기  (0) 2021.06.19
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함