피보나치 수열
def solution(n):
fibo = [0]*(n+1)
fibo[0] = 0
fibo[1] = 1
for i in range(2, n+1):
fibo[i] = fibo[i-2] + fibo[i-1]
return fibo[n] % 1234567
내가 이해한 룰
- 0번째 값과 1번째 값은 각각 0과 1이다.
- if n >= 2 : fibo(n) = fibo(n-2) + fibo(n-1) 이다.
- 답은 1234567을 나눈 나머지를 구해야한다.
문제풀이
- 일단 n까지의 피보나치수열을 구할 것이므로 0을 포함한 n+1까지의 리스트로 초기화해준다.
- 수식으로는 0과 1의 값을 구할 수 없기 때문에 0과 1을 초기화 해준다.
- 수식은 2부터 n까지 반복해 n까지의 값을 구해주고
- 이렇게 구한 값을 1234567로 나눈 나머지 값으로 반환해준다.
h-index
def solution(citations):
answer = []
citations.sort()
while citations:
citation = citations.pop(0)
ci_len = len(citations)+1
if ci_len > len(answer):
answer.append(min(citation, ci_len))
return max(answer)
내가 이해한 룰
- 주어진 n개의 논문중에서 h번이상 인용된 논문이 h개 이상이고 나머지 논문의 갯수가 h번 이하일 때 그 수가 h다.
- 그렇게 모인 h들의 최대값을 반환하는 문제
문제풀이
- 인용된 논문 갯수를 구하고 그 갯수안의 논문 최솟값을 구했다.
- 실패 이유 : [3, 4, 5, 11, 15, 16, 17, 18, 19, 20] 프로그래머스 질문하기에서 가져온 이 테스트케이스를 보면 이 케이스에서 내가 만든 로직대로 하면 11이 나와야 하는데 11번 이상 인용된 논문의 갯수는 11개가 아니고 7개이다.
- 그렇다면 인용된 횟수가 아니라 인용된 논문의 갯수인가?
- 실패 이유: 테스트 케이스는 없지만 직관적으로 생각해봤을 때 인용된 횟수보다 인용된 논문의 갯수가 더 많다면? 그렇다면 h번이상 인용된 논문 h개 이상이라는 조건에 맞지 않게 된다.
- 최종 결론 두가지 중 작은 값을 h로 지정하자. 위에서 언급한 테스트케이스에서 보면 3번이상 인용된 논문의 갯수는 10개지만 h번 이상이라는 조건 탓에 h의 값은 3이 될 것이다. 로직에 따라서 답을 내보면 테스트케이스의 답은 7이 되는 것을 알 수 있고 최종 답안이 통과되었다.