티스토리 뷰

 

programmers.co.kr/learn/courses/30/lessons/42747?language=python3

 

코딩테스트 연습 - H-Index

H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표

programmers.co.kr

문제는 이렇다. 발표된 n개의 논문에서 h편의 논문은 h편 이상 인용되었고 나머지는 h이하 인용되었을때 그 h값을 구하는 문제.

 

문제가 너무 헷갈려서 다른 사람의 풀이를 해석하기로 했다 ㅠㅠ

def solution(c):

    c.sort(reverse=True)

    answer = list(map(tuple, enumerate(c, start= 1)))

    return answer
    
solution([3, 0, 6, 1, 5])

>>>> [(1, 6), (2, 5), (3, 3), (4, 1), (5, 0)]

내림차순으로 sort된 c를 원래 enumerate 형태인 tuple로 해주고 list형태로 뽑아보았다.

enumerate(c, start = 1)의 특성상 순회하면서 번호를 붙여주는데 start = 1로 1부터 번호가 붙는다.

그리고 내림차순으로 정렬된 리스트를 순회하니까 결과는 [(1, 6), (2, 5), (3, 3), (4, 1), (5, 0)] 가 나온다.

이 튜플들을 min 으로 뽑아주면 

 

def solution(c):

    c.sort(reverse=True)

    answer = list(map(min, enumerate(c, start= 1)))

    return answer

soultion([3, 0, 6, 1, 5])

>>>>[1, 2, 3, 1, 0]

1,2,3,1,0 이 나온다. 이것중 max가 H-index라는것.

 

결국 

 

answer = list(map(tuple[0], enumerate(c, start= 1)))

이렇게 H-index를 찾아준다.

 

사실 문제가 너무 난해하게 느껴져서 계속 헷갈려서 맞는코드를 짜다가도 계속 헤맸다.

아직 레벨업을 많이 해야겠다고 느껴졌다. map과 enumerate의 사용법 또한 점점 익숙해져간다.

처음에 enumerate는 써본적이 없어서 어렵게만 느껴졌으나 이렇게 사용법을 익히다보니 어떻게 쓰는지 이해가 간다.

start= 로 시작 넘버까지 정할 수 있다는걸 배웠다.