공부/알고리즘

[python] Codility Lesson 4-2. MaxCounters

richpark 2021. 7. 25. 03:07

 

 

Time Over에 걸려 77점 코드에서 2시간 가량 풀집중해서 풀다가 한숨 크게 쉬고 다른사람이 짠거 살펴보았다.

 

특출나게 한 방법들은 딱히 보이진 않았고 중간 중간 살짝 가미된... 왜 이렇게 생각 못했을까 하는 아쉬움이 크게 남은 문제였다.

 

 

1. 77점 타임오버된 코드

 

def solution(N, A):
    # write your code in Python 3.6
    answer_list = [0 for _ in range(N)]
    counter = 0
    for index, value in enumerate(A):
        if value < N+1:
            answer_list[value-1] += 1
            counter +=1
        else:
            if counter != 0:
                max_val = max(answer_list) #스트레스의
                answer_list = [max_val for _ in range(N)]# 원인
                counter = 0
    return answer_list

 

 

2. 100 pass 한 다른분이 작성한 코드 (출처: https://imksh.com/68 )

 

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

 

 

728x90