Search
Duplicate
📒

[Programmers] 04-2. H-Index

상태
완료
수업
Algorithm Solving
주제
Programmers
4 more properties
참고

문제해설

NOTE
입력 값 ⇒ 1차원 정수 배열
출력 값 ⇒ 1차원 정수 배열의 H-Index
H-Index ⇒ n개의 정수배열중 h이상인 값이 h개이고 나머지요소는 h 이하인 h값의 최대

문제 로직고민

NOTE
1차원 정수 배열을 내림차순으로 정렬한 뒤, 순차순회하면서 해당 요소값이 탐색횟수 이하이면 H-Index를 구할 수 있다.
단순한 접근법이었는데 더 생각하면 반례가 있다.
인용 횟수에서 H-Index가 존재한다면 올바른 선택일지 모르지만, [100.99]와 같이 인용 횟수가 배열안에 없을 수도 있음.
이 경우를 대비해서 배열내에 정답이 없는경우에는 배열의 길이를 반환하도록 한다.
위의 과정으로 작성한 코드는 일단 정답이 아니었다.
다음과 같은 반례가 존재한다 [100,99,0] ⇒ 해당 경우 0때문에 결과가 0으로 반환된다.
이러한 경우를 막기위해서 결과값을 해당 요소의 값과, 이전까지 탐색한 배열길이중 최대값을 내보낸다.

작성코드

NOTE
import java.util.*; class Solution { public int solution(int[] citations) { Integer[] c = Arrays.stream(citations).boxed().toArray(Integer[]::new); Arrays.sort(c, (n1,n2) -> Integer.compare(n2, n1)); int answer = c.length; for(int i =0; i<c.length; i++){ if(c[i] <= i+1) { answer = Math.max(c[i], i); break; } } return answer; } }
Java
복사

다른사람 풀이

NOTE
import java.util.*; class Solution { public int solution(int[] citations) { Arrays.sort(citations); int max = 0; for(int i = citations.length-1; i > -1; i--){ int min = (int)Math.min(citations[i], citations.length - i); if(max < min) max = min; } return max; } }
Java
복사
더 깔끔한 코드
내림차순 정렬을 위해 스트림으로 복잡한 과정을 수행했는데 사실 위처럼 그냥 역순 탐색하면 되는건데 너무 복잡하게 작성한것같다.
중간에 if문에서 결과값을 찾으면 break을 걸어주면 완벽한 코드라 생각한다.