티스토리 뷰

Algorithm/Baekjoon

[Swift] 백준 2579: 계단 오르기

내일은개발천재🎵 2022. 4. 20. 23:11

 문제 사이트 

 

2579번: 계단 오르기

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

www.acmicpc.net


 알고리즘 

현재 계단에서 가질 수 있는 값은 두가지의 경우로 나눌 수 있다.
    1) 이전 계단을 밟은 경우 (전전 계단은 밟지 않은 상태이어야한다.)
    2) 이전 계단을 밟지 않은 경우 

즉, 우리는 한 계단에 대해 두가지 정보를 저장해야한다.
    1) stepOnce: 이전 계단을 밟지 않은 경우
        -> 현재 값 + (전전 계단의 stepOnce, stepTwice 중 큰 값)
    2) stepTwice: 이전 계단을 밟은 경우 (stepOnce[i-1])를 더한다.
        -> 이전 계단의 입장에서 반드시 stepOnce의 값을 가져와야하기 때문!!!

말로.. 설명하기.. 어렵다... 하단 유튜브 참고!!


 나의 코드 

let n = Int(readLine()!)!
var stepOnce = [Int](repeating: 0, count: n) // 이전 계단은 밟지 않은 경우
var stepTwice = [Int](repeating: 0, count: n) // 두 번 연속 밟는 경우
var score: [Int] = [] // 이렇게 선언해야 append 가능
for _ in 0..<n{
    score.append(Int(readLine()!)!)
}
stepOnce[0] = score[0]
if n > 1{
    stepOnce[1] = score[1]
    stepTwice[1] = score[0] + score[1]
    
    for i in 2..<n{
        stepOnce[i] = score[i] + max(stepOnce[i-2], stepTwice[i-2])
        stepTwice[i] = score[i] + stepOnce[i-1]
    }
}
print(max(stepOnce[n-1], stepTwice[n-1]))

 

 참고 사이트 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함