Algorithm/Java
[ํ๋ก๊ทธ๋๋จธ์ค/JAVA] H-Index
dbfl9911
2025. 1. 24. 20:39
๋ฐ์ํ
๐ ๋ฌธ์ ์์ฝ
[ ์ค๋ต ๋
ธํธ ]
โ ๊ธฐ์กด ์ค๋ต ์ฝ๋
import java.util.*;
class Solution {
public int solution(int[] citations) {
int answer = 0;
// 1. ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
Arrays.sort(citations);
// 2. ๋ฐ๋ณต ํ์ ์ธ๋ ๋ฐ๋ณต๋ฌธ
for (int j = 0; j < citations.length; j++) {
int up = 0, down = 0;
if (citations[j] > j) {
up++;
} else if (citations[j] < j) {
down++;
}
if (up == down) {
answer++;
break;
}
}
return answer;
}
}
๐ ๊ธฐ์กด ์ฝ๋์ ๋ฌธ์ ์
- ๋ฌธ์ ์กฐ๊ฑด ์๋ชป ์ดํด
- "h๋ฒ ์ด์ ์ธ์ฉ๋ ๋ ผ๋ฌธ์ด hํธ ์ด์์ด๊ณ ๋๋จธ์ง ๋ ผ๋ฌธ์ด h๋ฒ ์ดํ ์ธ์ฉ๋์๋ค๋ฉด h์ ์ต๋๊ฐ์ด ์ด ๊ณผํ์์ H-Index์ ๋๋ค." ์ด ๋ฌธ์ ์ ์กฐ๊ฑด์ "๋ ผ๋ฌธ์ด hํธ ์ด์์ธ ๋ ผ๋ฌธ์ ๊ฐ์ == ๋ ผ๋ฌธ์ด h๋ฒ ์ดํ ์ธ์ฉ๋ ๋ ผ๋ฌธ์ ๊ฐ์"๋ก ์๋ชป์ดํดํ๋ค.
- ๊ธฐ์กด ๋ฌธ์ ์กฐ๊ฑด์ h์ ์ต๋๊ฐ์ ์ฐพ๋ ๊ฒ์ด๊ณ , ๋ฐ๋ผ์ "h๋ฒ ์ด์ ์ธ์ฉ๋ ๋ ผ๋ฌธ์ด hํธ ์ด์"์ธ ์กฐ๊ฑด๋ง ์ถฉ์กฑ์ํจ๋ค๋ฉด ๋๋จธ์ง ์กฐ๊ฑด์ ์๋์ ์ผ๋ก ์ถฉ์กฑํ๊ฒ ๋๋ค.
[ ์ ๋ต ์ฝ๋ & ์ฌ๋ฐ๋ฅธ ํ์ด ]
๐ ์ฌ๋ฐ๋ฅธ ํ์ด
1ํ ์ธ์ฉ(1ํ์ด์): 1,3,5,6 => 4๊ฐ
(1ํ์ดํ): 0,1 => 2๊ฐ
-> 4ํธ์ ๋
ผ๋ฌธ์ด 1ํ ์ด์ ์ธ์ฉ์ด๋ฏ๋ก ์กฐ๊ฑด ์ถฉ์กฑx
2ํ ์ธ์ฉ(2ํ์ด์): 3,5,6 => 3๊ฐ
(2ํ์ดํ): 0,1 => 2๊ฐ
-> 3ํธ์ ๋
ผ๋ฌธ์ด 2ํ ์ด์ ์ธ์ฉ์ด๋ฏ๋ก ์กฐ๊ฑด ์ถฉ์กฑx
3ํ ์ธ์ฉ(3ํ์ด์): 3,5,6 => 3๊ฐ
(3ํ์ดํ): 0,1,3 => 3๊ฐ
-> 3ํธ์ ๋
ผ๋ฌธ์ด 3ํ ์ด์ ์ธ์ฉ์ด๋ฏ๋ก ์กฐ๊ฑด ์ถฉ์กฑo
1. "h๋ฒ ์ด์ ์ธ์ฉ๋ ๋ ผ๋ฌธ์ด hํธ ์ด์"์ธ ์กฐ๊ฑด๋ง ์ถฉ์กฑ์ํค๊ธฐ
- h๋ฒ ์ด์ ์ธ์ฉ๋ ๋ ผ๋ฌธ์ ์ ≥ h ์กฐ๊ฑด์ ์ ํํ ๋ฐ์ํ๋ค.
- ์ด๋ h๋ ์ ๋ ฌ๋ ๋ฐฐ์ด์์ citations.length - i๋ก ๊ณ์ฐํ๋ค.
2. ์กฐ๊ฑด ๋ง์กฑ ์ ์ข ๋ฃ
- if (citations[i] >= h) ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฒฝ์ฐ H-Index๋ฅผ ์ฐพ์์ผ๋ฏ๋ก ๋ฐ๋ณต๋ฌธ ์ข ๋ฃ
๐ ์ ๋ต ์ฝ๋
import java.util.*;
class Solution {
public int solution(int[] citations) {
int answer = 0;
// ๋ฐฐ์ด ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
Arrays.sort(citations);
// [0, 1, 3, 5, 6]
// citations[i]์์ i๊ฐ์ ์ฆ๊ฐ์ํค๊ณ ๋
ผ๋ฌธ์ ์๋ฅผ ๊ฐ์์ํค๋ฉด์ ๋น๊ต ํ์ ๋
// ์ธ์ฉ ํ์๊ฐ ๋
ผ๋ฌธ์ ์ ์ด์์ด ๋์์ ๋์ ๋
ผ๋ฌธ์ ์๊ฐ H-Index๊ฐ ๋๋ค
// 1ํ ์ธ์ฉ(1ํ์ด์): 1,3,5,6 => 4๊ฐ
// (1ํ์ดํ): 0,1 => 2๊ฐ
// -> 4ํธ์ ๋
ผ๋ฌธ์ด 1ํ ์ด์ ์ธ์ฉ์ด๋ฏ๋ก ์กฐ๊ฑด ์ถฉ์กฑx
// 2ํ ์ธ์ฉ(2ํ์ด์): 3,5,6 => 3๊ฐ
// (2ํ์ดํ): 0,1 => 2๊ฐ
// -> 3ํธ์ ๋
ผ๋ฌธ์ด 2ํ ์ด์ ์ธ์ฉ์ด๋ฏ๋ก ์กฐ๊ฑด ์ถฉ์กฑx
// 3ํ ์ธ์ฉ(3ํ์ด์): 3,5,6 => 3๊ฐ
// (3ํ์ดํ): 0,1,3 => 3๊ฐ
// -> 3ํธ์ ๋
ผ๋ฌธ์ด 3ํ ์ด์ ์ธ์ฉ์ด๋ฏ๋ก ์กฐ๊ฑด ์ถฉ์กฑo
for(int i = 0; i < citations.length; i++) {
// ์ธ์ฉ๋ ๋
ผ๋ฌธ ์
// 5๊ฐ -> 4๊ฐ -> 3๊ฐ -> 2๊ฐ -> 1๊ฐ ์์ผ๋ก
int h = citations.length - i;
// citations[i] ๋ 0 -> 1 -> 3 -> 5 -> 6 ์์ผ๋ก
if(citations[i] >= h) {
answer = h;
break;
}
}
return answer;
}
}
๋ฐ์ํ