[Codility] Lesson4 MaxCounters 풀이 Python
OnlineJudge

[Codility] Lesson4 MaxCounters 풀이 Python

반응형

 

문제로이동

 

MaxCounters coding task - Learn to Code - Codility

Calculate the values of counters after applying all alternating operations: increase counter by 1; set value of all counters to current maximum.

app.codility.com


목차

     


     


    문제 설명

    체감상 Lesson4 테스트 문제 중 해결하는데 가장 오래걸렸습니다.

    입력 값으로 N과 배열 A가 입력됩니다.

    최종적으로 N개 만큼의 카운터를 출력해야 하고

    N=5일 때
    (0, 0, 0, 0, 0)과 같은 형식으로 출력

     

    이 카운터를 어떻게 연산하느냐가 관건입니다.

    예제를 보며 기능을 설명하겠습니다.

     

    A[0] = 3

    A[1] = 4

    A[2] = 4

    A[3] = 6

    A[4] = 1

    A[5] = 4

    A[6] = 4

     

    첫째, 일반적인 증가

    A[0] = 3

    3번 공간에 1만큼 증가.

    이 때 MAX 값이 1로 갱신됩니다.

    두번째 기능을 위해서 항상 MAX값을 갱신시켜주어야 합니다.

     

    A[2] = 4

    이전 상태인 (0,0,1,1,0)에서 4번째 공간에 1을 더 증가하게 되는데 이 때 MAX값이 1에서 2로 갱신됩니다.

     

    둘째, 최대값 동기화

    A[3] = 6

    N보다 큰 6이라는 값이 들어왔을때는 모든 배열을 MAX값으로 동기화 해줘야 합니다.

    이전 상태인 (0,0,1,2,0)에서 A[3] 실행후 모두 (2,2,2,2,2)로 동기화 되는 모습을 볼 수 있습니다.


    소스 코드

    Python

    def solution(N,A):
        savemaximum = 0
        maximum = 0
        counter = [0]*N
        for i in range(len(A)):
            if A[i]<=N:
                if counter[A[i]-1]<savemaximum:
                    counter[A[i]-1]=savemaximum
                counter[A[i]-1]+=1
                maximum = max(counter[A[i]-1],maximum)
            else:# N보다 큰 수가 들어오면 maximum으로 동기화
                savemaximum = maximum
        for i in range(N):
            if counter[i]<savemaximum:
                counter[i]=savemaximum
        return counter
    
    print(solution(5, [3, 4, 4, 6, 1, 4, 4]))

    Java8

    #
    반응형