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

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

남건욱 2023. 11. 9. 09:32
반응형
60. 옹알이 (2)

문제

class Solution {
    public int solution(String[] babbling) {
        int answer = 0;
        
        for(int i=0; i<babbling.length; i++){
            String str = babbling[i];
            
            if(str.contains("ayaaya") || str.contains("yeye") || str.contains("woowoo") || str.contains("mama")){
                continue;
            }
            
            str = str.replace("aya", " ");
            str = str.replace("ye", " ");
            str = str.replace("woo", " ");
            str = str.replace("ma", " ");
            
            str = str.replace(" ", "");
            
            if(str.length() == 0) answer++;   
        }
        
        return answer;
    }
}

<작성한 코드>

예전에 Level0에서 풀었던 옹알이 1 방식과 유사하게 풀었다. 우선 연속된 발음은 하지 못한다고 했다. 따라서 반복문안에서 각 원소들을 str에 저장한 뒤 str에 연속된 발음 (ayaaya, yeye, woowoo, mama)가 된다면 반복문을 다음 원소로 넘어가도록 하였고, 아니라면 각 발음이 들어가는 aya, ye, woo, ma를 만날 시 이를 공백으로 바꿔줬다. 그 뒤 마지막에 공백을 없애주고 str의 길이가 0이라면 answer에 1을 더해줬다. 그 뒤 answer을 반환해 줬다.

 

 

 

61. 햄버거 만들기

문제

import java.util.*;

class Solution {
    public int solution(int[] ingredient) {
        int answer = 0;
        List<Integer> list = new ArrayList<>();
        
        for(int a : ingredient){
            list.add(a);
            
            while(list.size() >= 4){
                int size = list.size();
                if(!(list.get(size-1) == 1 && list.get(size-2) == 3 && list.get(size-3) == 2 && list.get(size-4) == 1)){
                    break;
                }
                
                for(int j=0; j<4; j++){
                    list.remove(list.size()-1);
                }
                answer++;
            }
        }
        
        return answer;
    }
}

<작성한 코드>

시간이 꽤 걸렸던 문제다. 우선 list를 하나 만들어주고 foreach문을 사용해서 ingredient의 값을 각각 list에 넣어줬다. 그 뒤 while문을 사용해서 list의 길이가 4 이상일 때만 실행하도록 했다. 정수형 변수 size에 list의 길이를 넣어준 뒤 list의 마지막 원소부터 순서대로 1, 3, 2, 1 인지 체크해 줬다. 앞에서부터 라면 1, 2, 3, 1이지만 뒤부터 체크해 줄 거 기 때문에 역순으로 1, 3, 2, 1로 체크했다. 만약 1, 3, 2, 1이 아니라면 while문을 멈춰줬다. 1, 3, 2, 1이라면 for문을 사용해서 list의 마지막 원소 4개를 차례대로 삭제시키고 answer을 1씩 더해줬다. 그 뒤 answer을 반환해 줬다.

 

 

 

62. 푸드 파이트 대회

문제

import java.util.*;

class Solution {
    public String solution(int[] food) {
        String answer = "";
        List<Integer> list = new ArrayList<>();
        
        for(int i=0; i<food.length; i++){
            if(food[i]/2 != 0){
                int num = food[i]/2;
                for(int j=0; j<num; j++){
                    list.add(i);
                }
            }
        }
        
        for(int i=0; i<list.size(); i++){
            answer += list.get(i);
        }
        
        answer += 0;
        
        Collections.reverse(list);
        
        for(int i=0; i<list.size(); i++){
            answer += list.get(i);
        }
        
        return answer;
    }
}

<작성한 코드>

리스트를 하나 만들었다. 그 뒤 for문을 사용해서 food의 모든 원소를 비교하였고 if문을 사용해서 food [i]를 2로 나눈 값이 0이 아닐 때만 실행하도록 했다. 정수형 변수 num에 food의 원소를 2로 나눈 값을 넣어주고 for문을 다시 사용해서 num번만큼 list에 i값을 넣어줬다. 이렇게 하면 한 사람이 먹어야 할 값들이 들어간다. 그 뒤 answer에 list에 들어있는 값을 넣어주고 0을 넣었다. 그 뒤 list를 뒤집어준 뒤 list의 값을 다시 넣어주고 answer을 반환했다.

 

 

 

 

 

63. 과일 장수

문제

import java.util.*;

class Solution {
    public int solution(int k, int m, int[] score) {
        int answer = 0;
        
        Arrays.sort(score);
        
        for(int i=score.length; i>=m; i-=m){
            answer += score[i-m] * m;
        }
        
        return answer;
    }
}

<작성한 코드>

여러 방법을 사용하다가 이 풀이 방법까지 오는 데에 시간이 조금 걸렸다. 간단한 문제였다. score를 오름차순으로 정렬해 준 뒤 for문을 사용해서 i는 score의 길이부터 시작해 줬다. i는 m씩 빼줬다. 이유는 어차피 최저점을 곱해줘야 하기 때문에 최저점에 해당하는 인덱스 값만 구해서 그에 속한 점수를 얻어온 뒤 m을 곱해주면 됐다. 따라서 answer에는 score [i-m]의 값을 구해온 뒤 m을 곱한 값을 더해줬다. 그 뒤 answer을 반환하였다.

반응형
프로필사진

남건욱's 공부기록