안녕하세요! 일요일엔 좀 쉬고 오늘 새로운 문제를 가지고 왔습니다. 매번 정확도는 잘 나오는 코딩을 하지만 효율적인 코드를 짜지 못하는 것 같네요. 이 문제도 몇 개의 경우에서 시간 초과가 났습니다. 같이 한번 보시죠!
이전 코드 내용이 궁금하시다면 아래 링크로 이동하시면 됩니다!
코딜리티 이전 글 - 2020/07/18 - [파이썬] - [Codility] 코딜리티 4-1. FrogRiverOne (Python)
1. 문제 설명
- N : 넣고 싶은 원소의 갯수(1이상 N이하), A는 integer들이 들어 있는 Array입니다.
- 1과 N사이의 값은 새로운 Array에 인덱스에 맞게 카운트를 합니다.
- N이 넘어가는 값에 대해서는 최대값인 원소를 다른 값에도 똑같이 적용시킵니다.
- 결과로는 새로운 Array를 출력하면 되겠습니다.
2. 1차 풀이
- idea : B라는 [0]*N개의 Array를 생성한 뒤 A의 원소 값을 받아서 N보다 크면 max값으로 새로운 B를 만들고, N보다 작거나 같으면 해당 위치에 카운팅 해줍니다.
def solution(N, A):
B = [0]*N #새로운 Array 생성
for i in range(len(A)):
if 1 <= A[i] <= N:
B[A[i]-1] +=1
elif A[i] > N:
B = [max(B)]*N
return B
3. 1차 결과
- 결과에서 보면 알 수 있듯이 timeout error가 발생했습니다. 이 문제도 다음에 좋은 알고리즘으로 시간 복잡도를 줄여봐야겠습니다. 이상입니다!