6.22 미경이 스터디

코변·2022년 6월 21일
0
post-thumbnail

피보나치 수열

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

내가 이해한 룰

  1. 0번째 값과 1번째 값은 각각 0과 1이다.
  2. if n >= 2 : fibo(n) = fibo(n-2) + fibo(n-1) 이다.
  3. 답은 1234567을 나눈 나머지를 구해야한다.

문제풀이

  1. 일단 n까지의 피보나치수열을 구할 것이므로 0을 포함한 n+1까지의 리스트로 초기화해준다.
  2. 수식으로는 0과 1의 값을 구할 수 없기 때문에 0과 1을 초기화 해준다.
  3. 수식은 2부터 n까지 반복해 n까지의 값을 구해주고
  4. 이렇게 구한 값을 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)

내가 이해한 룰

  1. 주어진 n개의 논문중에서 h번이상 인용된 논문이 h개 이상이고 나머지 논문의 갯수가 h번 이하일 때 그 수가 h다.
  2. 그렇게 모인 h들의 최대값을 반환하는 문제

문제풀이

  1. 인용된 논문 갯수를 구하고 그 갯수안의 논문 최솟값을 구했다.
  • 실패 이유 : [3, 4, 5, 11, 15, 16, 17, 18, 19, 20] 프로그래머스 질문하기에서 가져온 이 테스트케이스를 보면 이 케이스에서 내가 만든 로직대로 하면 11이 나와야 하는데 11번 이상 인용된 논문의 갯수는 11개가 아니고 7개이다.
  1. 그렇다면 인용된 횟수가 아니라 인용된 논문의 갯수인가?
  • 실패 이유: 테스트 케이스는 없지만 직관적으로 생각해봤을 때 인용된 횟수보다 인용된 논문의 갯수가 더 많다면? 그렇다면 h번이상 인용된 논문 h개 이상이라는 조건에 맞지 않게 된다.
  1. 최종 결론 두가지 중 작은 값을 h로 지정하자. 위에서 언급한 테스트케이스에서 보면 3번이상 인용된 논문의 갯수는 10개지만 h번 이상이라는 조건 탓에 h의 값은 3이 될 것이다. 로직에 따라서 답을 내보면 테스트케이스의 답은 7이 되는 것을 알 수 있고 최종 답안이 통과되었다.
profile
내 것인 줄 알았으나 받은 모든 것이 선물이었다.

0개의 댓글