뚜당탕탕

[SWEA / python ] 1859. 백만 장자 프로젝트 (fail) 본문

💯 문제 풀이/SWEA

[SWEA / python ] 1859. 백만 장자 프로젝트 (fail)

뚜띠언니 2021. 10. 11. 18:52

 

👇 주석 없는 풀이법

T = int(input())

for case in range(1, T + 1):
    t = int(input())
    li = list(map(int, input().split()))
    result = 0
    mmm = max(li)
    max_idx = li.index(mmm)
    start_idx = 0
    tmp_li = li[ start_idx : len(li) ]
    
    for i in range(len(li)) :
        if i < max_idx :
            result += (mmm - li[i])
        elif i == max_idx :
            if i == (len(li)-1) :
                break
            else : 
                start_idx = i+1
                tmp_li = li[ start_idx : len(li) ]
                mmm = max(tmp_li)
                max_idx = li.index(mmm)

    print("#{} {}".format(case, result))

 

👇 주석 있는 풀이법.

T = int(input())
## 총 몇 개의 테스트 케이스인지 입력받는다.

for case in range(1, T + 1):
## 테스트 케이스의 수 만큼 반복한다.

    t = int(input())
    ## 한 번의 테스트 케이스에서, 며칠의 데이터를 사용할 것인지 입력받는다.
    
    li = list(map(int, input().split()))
    ## t 일 만큼의 가격 데이터를 정수의 형태로, 띄어쓰기로 구분하여 입력 받는다.
    ## 가격 데이터를 인덱스로 사용하기 위해 리스트 타입으로 저장한다.
    
    result = 0
    ## 이득을 담을 변수. 이득이 생길 때 마다 추가 저장할 것이므로, 초기값 0으로 설정한다.
    
    mmm = max(li)
    ## 가격데이터 리스트에서 최대값을 뽑는다.
    
    max_idx = li.index(mmm)
    ## 최대 가격의 인덱스를 뽑는다.
    
    start_idx = 0
    ## 리스트에서 최대가격이 중간에 위치할 경우, 이후 새로운 최대가격을 뽑을 때 필요한 시작 인덱스이다.
    
    tmp_li = li[ start_idx : len(li) ]
    ## 첫 번 째 최대가격 이후에 새로운 최대가격을 뽑을 때 필요한 임시 리스트이다.
    ## 다시 생각해 보니까, start_idx 를 굳이 사용하지 않고 i+1 로 바로 사용해도 된다.
    
    for i in range(len(li)) :
    ## 리스트의 모든 인덱스를 돌 것이다.
    
        if i < max_idx :
            result += (mmm - li[i])
            ## 현재 인덱스가 최대가격의 인덱스보다 작다면, 구입하여 팔 것이므로, 
            ## 최대가격에서 현재 가격을 뺀 차이를 result 변수에 더해준다
            
        elif i == max_idx :
        ## 현재 인덱스가 최대가격의 인덱스와 같다면, 그러니까, 오늘이 최대가격 이라면,
        
            if i == (len(li)-1) :
            	break
                ## 현재 인덱스가 최대가격인데, 리스트의 마지막 원소라면, 더이상 할 게 없으므로 반복문을 나간다.
                
            else : 
            ## 현재 인덱스가 최대가격인데, 가격 리스트의 원소들이 남아있다면, 이후 남은 리스트에서
            ## 새로운 최대가격을 뽑고, 최대가격에 팔아야 이득이 많이 남는다.
            
                start_idx = i+1
                tmp_li = li[ start_idx : len(li) ]
                ## 오늘 최대가격으로 이미 팔았으므로, 내일부터의 가격 리스트를 새로운 임시 가격 리스트(tmp_li)에 담는다.
                
                mmm = max(tmp_li)
                max_idx = li.index(mmm)
                ## 새로 담은 임시 가격 리스트(tmp_li)에서, 새로운 최대가격(mmm)과 최대가격의 인덱스(max_idx)를 뽑는다.
                ## 주의할 것은, 여기서 뽑는 최대가격(mmm)은 임시 가격 리스트(tmp_li)에서의 최대 가격(mmm)을 뽑고,
                ## 인덱스는 전체 리스트(li)에서의 인덱스로 뽑아야 한다. 그래야 i(li의 인덱스) 와 비교를 할 수 있다.
            ## 그리고 새로운 임시 가격 리스트(tmp_li)에서 최대가격이 뽑히면, 다시 반복문 처음으로 돌아가,
            ## li 의 인덱스 i 가 최대가격 인덱스에 다다를 때까지, 최대가격과의 차이를 result 에 더한다.

    print("#{} {}".format(case, result)) 
    ## 파이썬 문자열 포맷팅. 문자열 "#{} {}" 형식으로 출력한다.
    ## 첫 번째 문자열에는 case 의 번호가, 두 번째 문자열에는 reslut 의 값이 들어있다.

 

중요한건__!

4/10 맞고 런타임에러로 FAIL 떴다

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ..............................................................

또 해보면 된다..

 

 

풀게 되면, 코드 추가할 것이다.

Comments