문제 설명
체감상 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
#