문제 1
풀이
- 다이나믹 프로그래밍을 이용하여 피보나치 수열을 구현하였다
- bottom-up 방식을 택하였다.
- n의 범위가 상당히 크므로 계산과정에서 런타임 에러가 일어날 수 있으므로 return 문이 아닌 bottom-up 반복문 내에서 1234567을 나눠서 값을 할당해야 한다.
코드
def solution(n):
d = [0] * (100001)
d[1] = 1
for i in range(2, n+1):
d[i] = (d[i-2] + d[i-1]) % 1234567
return d[n]
if __name__ == '__main__':
print(solution(3))
print(solution(5))
문제 2
풀이
- H-INDEX 문제이다.
- 내림차순 정렬을 한 뒤에 data값과 index를 일일히 비교하면서 index값이 역전하는 값이 h-index이다.
index | citations |
---|
1 | 62 |
2 | 21 |
3 | 17 |
4 | 16 |
5 | 15 |
6 | 13 |
7 | 11 |
8 | 10 |
9 | 8 |
- 위 테이블에서의 h-index 값은 8 이다.
코드
def solution(citations: list) -> int:
citations = sorted(citations, reverse=True)
answer = 0
for i in range(len(citations)):
if i + 1 <= citations[i]:
answer = i + 1
else:
break
return answer
if __name__ == '__main__':
print(solution([3, 0, 6, 1, 5]))
출처 & 깃허브
programmers 스킬 체크 테스트
github