• [코테 연습] 계단 오르기 Python

    2020. 5. 25. 16:58

    by. 위지원

    문제

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

    예를 들어 <그림 2>와 같이 시작점에서부터 첫 번째, 두 번째, 네 번째, 여섯 번째 계단을 밟아 도착점에 도달하면 총 점수는 10 + 20 + 25 + 20 = 75점이 된다.

    계단 오르는 데는 다음과 같은 규칙이 있다.

    1. 계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 즉, 한 계단을 밟으면서 이어서 다음 계단이나, 다음 다음 계단으로 오를 수 있다.
    2. 연속된 세 개의 계단을 모두 밟아서는 안 된다. 단, 시작점은 계단에 포함되지 않는다.
    3. 마지막 도착 계단은 반드시 밟아야 한다.

    따라서 첫 번째 계단을 밟고 이어 두 번째 계단이나, 세 번째 계단으로 오를 수 있다. 하지만, 첫 번째 계단을 밟고 이어 네 번째 계단으로 올라가거나, 첫 번째, 두 번째, 세 번째 계단을 연속해서 모두 밟을 수는 없다.

    각 계단에 쓰여 있는 점수가 주어질 때 이 게임에서 얻을 수 있는 총 점수의 최댓값을 구하는 프로그램을 작성하시오.

     


     

     

    라고 생각하고 코드를 짜고 제출했건만

     

    아핰ㅋㅋㅋㅋㅋ핰ㅋㅋㅋㅋㅋㅋㅋㅋㅋ?

     

    흠.. 문제의 글을 다시 보면 마지막 계단을 꼭 밟아야 한다.  그래서 반대로 생각해야 될 듯 했다. 

     

    이게 사실 처음에 너무 햇갈려가지고 원래는 한 계단을 걸어 올라오면 아래 그림을 예시로 들 때, 20+(15)+25= 한 계단 이라고 해서 마지막에 10+20을 생각못했다. 

    1. 마지막 도착 계단은 반드시 밟아야 한다.

     

    백준에서 설명 중인 그림

    그니까 마지막 도착 계단을 고려해서 max를 뽑아야 한다.

     

    ???????????????????????????? 흠...................................

    결국 구글링을 했다. 분명 다른 사람도 나랑 코드가 같거나 비슷했다.

    거의 체점이 다 되었을 때에 발생한다. 예외의 상황이...... 질문 게시판을 참고했다. 

     

    "양의 정수(陽-整數, 영어: positive integer) 1, 2, 3, ...로 정의되거나, "

     

    계단이 1층이거나 2층인 경우에 에러가 떴다. 예외처리를 해주었다. 

     

    rN = int(input())
    
    stairsN=[]
    
    for _ in range(rN):
        stairsN.append(int(input()))
    
    
    if rN == 1 or rN == 2:
        print(sum(stairsN))
    
    else:
        maxVal = [stairsN[0],
              max(stairsN[0], stairsN[0] + stairsN[1]),
              max(stairsN[0] + stairsN[2], stairsN[1] + stairsN[2])
              ]
    
        for i in range(3, len(stairsN)):
            firstVal = maxVal[i-2] + stairsN[i]
            secondVal = maxVal[i-3] + stairsN[i] + stairsN[i-1]
    
            maxVal.append(max(firstVal, secondVal))
    
        print(maxVal[rN-1])