프로그래머스 문제풀이/알고리즘 (JAVA)

[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 2 (21~22번 문제풀이) / Level 0 (224/224) / Level 1 (77/77)

남건욱 2024. 1. 8. 09:10
반응형
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을 반환한다.

반응형
프로필사진

남건욱's 공부기록