Stack/Queue

같은 숫자는 싫어

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        Stack<Integer> st = new Stack<>();
        
        for (int i = 0; i < arr.length; i++) {
            if (i == 0) {
                st.push(arr[i]);
                continue;
            }
            
            if (st.peek() == arr[i]) continue;
            
            st.push(arr[i]);
        }
        
        int[] answer = new int[st.size()];
        
        for (int i = answer.length -1; i >= 0; i--) {
            answer[i] = st.pop();
        }

        return answer;
    }
}

기능 개발

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        Stack<Integer> st = new Stack<>();
        
        for (int i = 0; i < arr.length; i++) {
            if (i == 0) {
                st.push(arr[i]);
                continue;
            }
            
            if (st.peek() == arr[i]) continue;
            
            st.push(arr[i]);
        }
        
        int[] answer = new int[st.size()];
        
        for (int i = answer.length -1; i >= 0; i--) {
            answer[i] = st.pop();
        }

        return answer;
    }
}
// 다른 사람 풀이 
import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        Queue<Integer> q = new LinkedList<>();
        List<Integer> answerList = new ArrayList<>();

        for (int i = 0; i < speeds.length; i++) {
            double remain = (100 - progresses[i]) / (double) speeds[i];
            int date = (int) Math.ceil(remain);

            if (!q.isEmpty() && q.peek() < date) {
                answerList.add(q.size());
                q.clear();
            }

            q.offer(date);
        }

        answerList.add(q.size());

        int[] answer = new int[answerList.size()];

        for (int i = 0; i < answer.length; i++) {
            answer[i] = answerList.get(i);
        }

        return answer;
    }
}

올바른 괄호

import java.util.*;

class Solution {
    boolean solution(String s) {
        Stack<Character> st = new Stack<>();

        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '(') st.push(s.charAt(i));
            else {
                if(st.isEmpty()) return false;
                st.pop();
            }
        }
        return st.isEmpty();
        
    }
}

프린터

import java.util.*;
import java.util.stream.IntStream;

class Solution {
    public int solution(int[] priorities, int location) {
        Queue<Integer> q = new LinkedList<>();
        
        for (int i = 0; i < priorities.length; i++) {
            q.add(i);
        }
        int cnt = 0;
        // System.out.println("---------------------------");

        while (!q.isEmpty()) {
            int idx = q.poll().intValue();
            if (IntStream.of(priorities).anyMatch(x -> x > priorities[idx])) {
                q.add(idx);
                
            }
            else {
                cnt++;
                priorities[idx] = -1;
                if (idx == location) return cnt;
            }
        }
        
        return cnt;
    }
}

❌ 다리를 지나는 트럭

// Some code

주식 가격

class Solution {
    public int[] solution(int[] prices) {
        int[] answer = new int[prices.length];
        
        for (int i = 0; i < prices.length; i++) {
            int priod = 0;
            if (i == prices.length - 1) {
                answer[i] = priod;
                break;
            }
            for (int j = i + 1; j < prices.length; j++) {
                if (prices[i] <= prices[j]) priod++;
                else {
                    priod++;
                    break;
                }
            }
            
            answer[i] = priod;
        }
        return answer;
    }
}

Last updated