Programmers/프로그래머스-스킬 체크 테스트 level.2-python

cosmos·2022년 7월 4일
0
post-thumbnail

문제 1

풀이

  • 다이나믹 프로그래밍을 이용하여 피보나치 수열을 구현하였다
  • bottom-up 방식을 택하였다.
  • n의 범위가 상당히 크므로 계산과정에서 런타임 에러가 일어날 수 있으므로 return 문이 아닌 bottom-up 반복문 내에서 1234567을 나눠서 값을 할당해야 한다.

코드

# https://programmers.co.kr/skill_checks/385791
# programmers, 스킬 체크 테스트 leve 2: 문제 1, python3

# n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수
def solution(n):
    d = [0] * (100001)  # dp table 초기화
    d[1] = 1

    # dp bottom-up
    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))  # 2
    print(solution(5))  # 5

문제 2

풀이

  • H-INDEX 문제이다.
  • 내림차순 정렬을 한 뒤에 data값과 index를 일일히 비교하면서 index값이 역전하는 값이 h-index이다.
indexcitations
162
221
317
416
515
613
711
810
98
  • 위 테이블에서의 h-index 값은 8 이다.

코드

# https://programmers.co.kr/skill_checks/385791?challenge_id=2549
# programmers, 스킬 체크 테스트 Level2: 문제 2, python3
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]))  # 3

출처 & 깃허브

programmers 스킬 체크 테스트
github

0개의 댓글