프로그래머스 - 3

·2024년 12월 12일
0

코테

목록 보기
10/11

문제 14 - 과일 장수

  1. 내림차순 정렬하는 법
    --> Arrays.sort(배열, Collections.reverseOrder())
    --> 대신 int 배열은 Integer로 바꿔주고 진행해야 함
		Integer[] arr = new Integer[score.length];
        
		for (int i = 0; i < score.length; i++) {
            arr[i] = score[i];  // 각 요소를 복사
        }
        
        Arrays.sort(arr, Collections.reverseOrder());
        
        int sum = 0;
        
        for(int i = 1; i <= (score.length / m); i++) {
            sum += arr[i * m - 1] * m;
        }

문제 15 - 푸드 파이트 대회

  • 이 문제에서 가장 중요한 건 '대칭'
    -> 1. StringBuilder로 반만 일단 만들고 reverse() 함수 사용하기
    -> 2. 일단 반만 배열에 넣고 for문으로 붙히기
class Solution {
    public String solution(int[] food) {
        
        StringBuilder half = new StringBuilder();
        
        for(int i = 1; i < food.length; i++) {
            for(int j = 1; j <= (food[i] / 2); j++) {
                half.append(i);
            }
        }
        
        return half.toString() + "0" + half.reverse();
    }
}

문제 16 - 햄버거 만들기

  • 짝 맞춰진 거 찾기
    -> 리스트를 만들고 만들어지면 제거하는 방식으로 풀기
import java.util.*;

class Solution {
    public int solution(int[] ingredient) {
        
        ArrayList<Integer> list = new ArrayList<Integer>();
		
		for(int i : ingredient) {
			list.add(i);
		}
        
		int count = 0;
        for(int i = 0; i <= list.size() - 4;) {
            if (list.get(i) == 1 && list.get(i + 1) == 2 && list.get(i + 2) == 3 && list.get(i + 3) == 1) {
            	list.remove(i);
            	list.remove(i);
            	list.remove(i);
            	list.remove(i);
            	count++;
                i = 0;
            } else {
            	i++;
            }
        }
        
        return count;
    }
}

이렇게 풀었는데 시간초과 5개나 떠서 스택으로 해보려고 합니다

import java.util.*;

class Solution {
    public int solution(int[] ingredient) {
        
        Stack<Integer> stack = new Stack<Integer>();
        
        int count = 0;
        for(int i : ingredient) {
            stack.push(i);
            
            if(stack.size() >= 4) {
                int size = stack.size();
                if(stack.peek() == 1 && stack.get(size - 2) == 3 && stack.get(size - 3) == 2 && stack.get(size - 4) == 1) {
                    count++;
                    stack.pop();
                    stack.pop();
                    stack.pop();
                    stack.pop();
                }
            }
        }
        return count;
    }
}

처음엔 stack.get(size-1)이 peek() 밑인 줄 알았는데 인덱스가 0부터 시작한다는 걸 까먹음 바보바보 ..~~


문제 17 - 옹알이(2)

  • 같은 문자열이 있으면 count+1인 건 알겠는데 yee랑 ye 이걸 어케 구분하지? 싶음
    --> 공백으로 바꾸고 제거
class Solution {
    public int solution(String[] babbling) {
        
        String [] possible = new String[] {"aya", "ye", "woo", "ma"};
        int count = 0;
        
        for(String s : babbling) {
            boolean isCorrect = true;
            
            for (int i = 0; i < possible.length; i++) {
                if(s.contains(possible[i] + possible[i])) {
                    isCorrect = false;
                    break;
                }
            }
            
            if(isCorrect) {
                for(String p : possible) {
                    s = s.replace(p, " ");
                }
                
                if(s.trim().isEmpty()) count++;
            }
        }
        
        return count;
    }
}

문제 18 - 콜라 문제

class Solution {
    public int solution(int a, int b, int n) {
        
        int total = 0;
        
        while(n >= a) {
            int give = (n / a) * a;
            int receive = (give / a) * b;
            total += receive;
            n = n - give + receive;
            
        }
        
        return total;
    }
}

걍 수학문제


문제 19 - 삼총사

  • 세 가지의 수의 합을 어떻게 반복하면서 판단하지? 제거하려니까 제거된 수에서도 답이 나올 수도 있어서 마음대로 제거 못함
    -> 이건 해결

  • 어떻게 횟수를 셌던 숫자인 걸 구별하지?
    -> 걍 이거 dfs로 푸는 거였삼...


문제 20 - 숫자 짝꿍

import java.util.*;

class Solution {
    public String solution(String X, String Y) {
        
        int [] countX = new int[10];
        int [] countY = new int[10];
        
        for (char c : X.toCharArray()) {
            countX[c - '0']++;
        }
        
        for (char c : Y.toCharArray()) {
            countY[c - '0']++;
        }
        
        StringBuffer result = new StringBuffer();
        
        for(int i = 9; i >= 0; i--) {
            int num = Math.min(countX[i], countY[i]);
            
            for(int j = 0; j < num; j++) {
                result.append(i);
            }
        }
        
        if (result.length() == 0) return "-1";
        if (result.toString().equals("0".repeat(result.length()))) return "0";
        
        return result.toString();
    }
}
profile
~*

0개의 댓글