728x90
반응형
안녕하세요. delay100 입니다!
미들러 문제
1번. H-Index
https://school.programmers.co.kr/learn/courses/30/lessons/42747
문제 이해가 너무 안돼서 정기세션 동안 못 풀뻔했습니다..ㅠㅠ
n회 이상 인용한 논문에 대해 저장하는 list를 만들어 해결했습니다.
상세 내용은 코드에 주석으로 적어두었습니다.
class Solution {
public int solution(int[] citations) {
int[] list = new int[10001]; // n회 이상 인용한 배열 추가
// n회 이상 인용한 배열 추가
// 테스트케이스 1번의 경우 [3, 0, 6, 1, 5]
// list[0] = 5 -> 0회 이상 인용된 논문 5개
// list[1] = 4 -> 1회 이상 인용된 논문 4개
// list[2] = 3
// list[3] = 3
// list[4] = 2
// list[5] = 2
// list[6] = 1
// list[7] = 0
// ...(그 이상은 모두 0)
for(int i=0; i<citations.length; i++) {
for(int j=0; j<=citations[i]; j++) {
list[j]++;
}
}
int answer = 0;
for(int i=10000; i>0; i--) { // 저장한 list값을 거꾸로 확인. 최대 값을 찾으면 바로 종료하기 위함
if(list[i] >= i) { // i회 이상 인용된 논문이 i편 이상인 경우
answer = i; // 거꾸로 탐색하므로 가장 큰 값임
break;
}
}
return answer;
}
}
2번. 프로세스
https://school.programmers.co.kr/learn/courses/30/lessons/42587
배열에서 순서가 정해지지 않은 값들 중에서 최대값의 위치를 구하는 것을 반복하여 풀었습니다.
최대값index 기준으로 뒤에 index를 먼저 탐색하여
동일한 우선순위인 경우, 최대값 기준으로 바로 다음에 있는 index에 순위를 추가할 수 있게끔 구현했습니다.
자세한 설명은 주석으로 설명해두었습니다.
class Solution {
public int solution(int[] priorities, int location) {
int[] list = new int[priorities.length];
int maxIndex = 0; // 현재 최대값이 위치한 index
int cnt = 1; // 현재 실행 순서
while(true) {
if(list[location] > 0) break; // 찾고자하는 위치에 순서가 정해지면 종료
// 최대값 찾기
int tempIndex = 0;
int max = 0;
// 1. 현재 최대값의 위치 ~ 배열의 끝
for(int i=maxIndex; i<priorities.length; i++) {
if(list[i]==0 && max < priorities[i]) {
max = priorities[i];
tempIndex = i;
}
}
// 2. 배열의 시작 ~ 현재 최대값의 위치
for(int i=0; i<maxIndex; i++) {
if(list[i]==0 && max < priorities[i]) {
max = priorities[i];
tempIndex = i;
}
}
// maxIndex 변경
maxIndex = tempIndex;
list[maxIndex] = cnt;
cnt++; // 현재 실행 순서 저장
}
// for(int i=0; i<list.length; i++) {
// System.out.print(list[i]+" ");
// }
return list[location];
}
}
마지막에 list를 출력해보면, 테스트케이스에 대해 위와 같이 결과가 나오게 됩니다.
+ 비기너 문제
1번.
https://school.programmers.co.kr/learn/courses/30/lessons/131128
2번.
https://school.programmers.co.kr/learn/courses/30/lessons/142086
+ 챌린저 문제
1번.
https://www.acmicpc.net/problem/1436
2번.
https://www.acmicpc.net/problem/11279
봐주셔서 감사합니다. 피드백 환영합니다.
728x90
반응형
'항해99 > 99club1기TIL' 카테고리의 다른 글
[99club/TIL] 5주차 - 수요일 TIL(Today I Learned) (0) | 2024.04.24 |
---|---|
[99club/TIL] 5주차 - 화요일 TIL(Today I Learned) (1) | 2024.04.23 |
[99club/TIL] 4주차 - 일요일 TIL(Today I Learned) (1) | 2024.04.22 |
[99club/TIL] 4주차 - 토요일 TIL(Today I Learned) (0) | 2024.04.20 |
[99club/TIL] 4주차 - 금요일 TIL(Today I Learned) (1) | 2024.04.19 |