21. 할인 행사

import java.util.*;
class Solution {
public int solution(String[] want, int[] number, String[] discount) {
int answer = 0;
List<String> wantFruit = new ArrayList<>();
for(int i=0; i<want.length; i++){
for(int j=0; j<number[i]; j++){
wantFruit.add(want[i]);
}
}
for(int i=0; i<discount.length-10+1; i++){
List<String> buyList = new ArrayList<>(wantFruit);
for(int j=i; j<i+10; j++){
if(buyList.contains(discount[j])){
buyList.remove(discount[j]);
} else{
continue;
}
}
if(buyList.size() == 0){
answer ++;
}
}
return answer;
}
}
<작성한 코드>
wantFruit라는 리스트 하나를 생성했다. 그 뒤 반복문을 사용해서 과일의 개수에 맞춰서 wantFruit에 넣어줬다. 그 뒤 for문으로 i는 0부터 discount길이에서 -10을 해주고 +1을 해준 값까지 반복시켰다. -10을 해준 이유는 10일간 일치해야 하기 때문에 최대수는 전체길이에서 10을 빼주고 마지막값을 비교하기 위해 1을 더해줬다. 그 뒤 내부에서는 반복문이 시작될 때마다 buyList에 wantFruit의 값들을 넣어서 초기화해 줬다. 내부의 for문에서는 j는 i부터 총 10번을 체크해야 하기 때문에 i+10까지 비교했다. 만약 discount [j]가 buyList에 포함된다면 값을 제거하고, 존재하지 않는다면 돌아간다. 이렇게 연속된 10번의 비교를 해서 buyList의 길이가 0이라면 모든 과일을 할인받았다는 뜻과 같으니 answer에 1을 추가해 줬다. 그 뒤 answer을 반환했다.
22. H-Index

import java.util.*;
class Solution {
public int solution(int[] citations) {
int answer = 0;
Arrays.sort(citations);
for(int i=0; i<citations.length; i++){
answer = citations.length - i;
if(citations[i] >= answer){
return answer;
}
}
return 0;
}
}
<작성한 코드>
배열 citations을 Arrays.sort를 사용하여 오름차순으로 정렬해줬다. 그 뒤 반복문을 사용하여 citations의 길이만큼 반복시켜 주고 answer에는 citations의 길이에서 i만큼 뺀 값을 넣어준다. 이유는 발표한 논문중 h번 이상 인용된 논문이 h 편 이상인 논문이 h번 이상이고 나머지 논문들은 h번 이하로 인용되어야 하기 때문에 그렇다. 반복문안에서 citations [i]는 현재 논문의 인용수를 나타내고, answer에 들어가 있는 citations.length - i는 현재 논문을 포함해서 그 이후의 논문들을 나타낸다. 그 뒤 citations [i]의 값이 answer보다 크거나 같으면 answer을 반환한다. 만약 반환하지 못하고 반복문이 끝나게 되면 0을 반환한다.
'프로그래머스 문제풀이 > 알고리즘 (JAVA)' 카테고리의 다른 글
남건욱's 공부기록