YUDA't

0. 문제

리스트 A와 N개의 카운터가 주어진다.

카운터는 처음에 모두 0으로 세팅되며, N이 5이면 카운터는 (0, 0, 0, 0, 0) 이다.


이때, 

만약 1 <= A[K] <= N 이라면, 카운터에서 K번째 카운터를 increase(K) 한다.(increase(K)는 K번째 카운터를 +1 한다는 것)

만약 A[K] = N+1 이라면, max counter를 한다.(max counter는 모든 카운터를 카운터 최대값으로 세팅하는 것)


그러니까 이를 따르면,

A = [3, 4, 4, 6, 1, 4, 4]

N = 5

일 경우에 


A[0] = 3   (0, 0, 1, 0, 0)

A[1] = 4   (0, 0, 1, 1, 0)

A[2] = 4   (0, 0, 1, 2, 0)

A[3] = 6   (2, 2, 2, 2, 2)

A[4] = 1   (3, 2, 2, 2, 2)

A[5] = 4   (3, 2, 2, 3, 2)

A[6] = 4   (3, 2, 2, 4, 2)


이렇게 된다.


파라미터로 리스트 A와 양의 정수 N이 주어질 경우 마지막 카운터를 리턴하라.



1. 답변

사실 문제를 보고 이해했다기보다는 예시를 보고 이해했다.

내가 짠 코드는 이렇다.

def solution(N, A):
    c_list = [0]*N
    max_c = 0
    for val in A:
        if 1 <= val <= N:
            c_list[val - 1] += 1
            curr_c = c_list[val - 1]
            if curr_c > max_c:
                max_c = curr_c
        elif val == N + 1:
            c_list = [max_c]*N
    return c_list


처음에 내맘대로 짰더니 time complexity가 낮게 나와서 겨우 고친 게 60%...


흑 지금은 이 이상으로 오르지 않는다.

다른 사람들은 어떻게 짰는지 뒤져봐야겠어.

'개발 > 알고리즘 문제' 카테고리의 다른 글

1 ≤ n ≤ 100 일때 nCr의 값이 1백만을 넘는 경우는 모두 몇 번?  (0) 2018.01.16
[Codility] CountDiv  (0) 2017.11.14
[Codility] MaxCounters  (0) 2017.11.13
[Codility] MissingInteger  (0) 2017.11.12
[Codility] FrogRiverOne  (0) 2017.11.10
[Codility] PermCheck  (0) 2017.11.09