코딩가딩가딩/SW Expert

[SWEA]D2_1859_백만장자프로젝트

worldforest 2020. 10. 21. 21:35
 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


🚨 내가 잘못생각했던 부분

처음 생각 : 앞에서 부터 검사하면서 그 전값보다 크면 max_v에 넣고 작으면 처음부터 max_v까지 계산

시작지점을 max_v+1(그 전값보다 작았던 위치)로 바꾸고 반복

 

잘못된 이유 : '11312' 같은 경우는 이 생각이 성립하지만 그 뒤에 더 큰 최대값이 나올 경우 성립하지 않는다. 예를 들면,

'11321623'의 경우에 처음 생각대로라면 3, 2, 6, 3에서 검사를 했겠지만 실제로는 6, 3에서만 계산해야한다. 따라서 전체의 최대값을 찾는 것을 먼저 해야한다.

 

더 나아가서 : 이런 경우에는 뒤에서 부터 검사하는 것이 좋다. 아직 그 이유를 정확하게 설명하지는 못하겠다..^^


파이썬 보충반을 신청하고 처음으로 파이참에서 파이썬으로 알고리즘 문제를 풀었다.

이 문제는 영광의 첫 문제!

 

T = int(input())
for tc in (1, T+1):
    N = int(input())
    # type적고 입력받은거 띄어쓰기로 나눠서 list에 저장
    costs = list(map(int, input().split()))
    result = 0

    # 최대값 찾기
    max_i = 0
    max_v = costs[max_i]
    idx = max_i
    while idx < N:
        max_i = idx
        max_v = costs[max_i]

        # 최대 값을 찾는 반복문
        for i in range(idx, N):
            # 현재 인덱스의 값이 최대 값보다 클 때
            if costs[i] >= max_v:
                # 최대값과 최대값의 인덱스 갱신
                max_v = costs[i]
                max_i = i
        # 위에서 구한 최대값으로 계산
        for i in range(idx, max_i):
            result += (max_v-costs[i])
        idx = max_i + 1

    print(result)

 

잘못생각했던 부분만 잘 파악하면 쉬운 문제이다.

다음에는 이런 문제를 쉽게 풀 수 있는 방법인 뒤에서 부터 최댓값을 찾는 방법으로 풀어봐야겠다.

 

 

 

반응형