본문 바로가기

알고리즘 테스트 공부

배열만들기 4

import java.util.ArrayList;

class Solution {
    public int[] solution(int[] arr) {
        ArrayList<Integer> stkArray = new ArrayList<Integer>();
       
        for(int i = 0; i < arr.length; i++){
            if(stkArray.size() == 0 ){
                stkArray.add(arr[i]);
                i += 1 ;  
            }else if(stkArray.get(stkArray.size()-1) < arr[i]){
                stkArray.add(arr[i]);
                i += 1 ;
            }else if(stkArray.get(stkArray.size()-1) >= arr[i]){
                stkArray.remove(stkArray.size()-1);
            }else {
                
            }
        }
        int[] stk = new int[stkArray.size()];
        for(int i =0;i < stkArray.size();i++){
      stk[i] = stkArray.get(i);      
        }
        return stk;
    }
}

처음 생각해본 코드방향! 테스트는 통과했지만 제출은 틀린답으로 나왔다ㅠㅠㅠ 다시!!

 

추가로->

import java.util.ArrayList;

class Solution {
    public int[] solution(int[] arr) {
        ArrayList<Integer> stkArray = new ArrayList<Integer>();

        for(int i = 0; i < arr.length; i++){
            if(stkArray.size() == 0 || stkArray.get(stkArray.size()-1) < arr[i]){
                stkArray.add(arr[i]);
            } else {
                int last = stkArray.get(stkArray.size() - 1);
                while (!stkArray.isEmpty() && last >= arr[i]) {
                    stkArray.remove(stkArray.size() - 1);
                    if (!stkArray.isEmpty()) {
                        last = stkArray.get(stkArray.size() - 1);
                    }
                }
                stkArray.add(arr[i]);
            }
        }
        
        int[] stk = new int[stkArray.size()];
        for(int i = 0; i < stkArray.size(); i++){
            stk[i] = stkArray.get(i);      
        }
        
        return stk;
    }
}

 

더해서 찾아본 코드!1

import java.util.ArrayList;

class Solution {
    public int[] solution(int[] arr) {
        ArrayList<Integer> tmp= new ArrayList();
        
        int i=0;
        while(i<arr.length){
            
            if(tmp.size()==0){
                tmp.add(arr[i]);
                i=i+1;
            }
            else{
                int last=tmp.get(tmp.size()-1);
                if(tmp.size()!=0 && last<arr[i]){
                tmp.add(arr[i]);
                i=i+1;
                }
                else if(tmp.size()!=0 && last>=arr[i]){
                    tmp.remove(tmp.size()-1);
                }
            }
            
        }
        
        int stk[]=new int[tmp.size()];
        for(int k=0;k<tmp.size();k++){
            stk[k]=tmp.get(k).intValue();
        }
        return stk;
    }
}

형식으로 선언하고, 값 넣는 건 .add(), 지우는건 .remove(), 크기는 .size() 이다. 그리고 다시 stk배열에 넣어줬다.
Integer타입이기 때문에 .intValue()를 이용해서 넣어줬다.

 

 

 

 

import java.util.*;

class Solution {
    public Stack<Integer> solution(int[] arr) {
        Stack<Integer> stack = new Stack<>();
        int i = 0;

        while (i < arr.length) {
            if (stack.empty() || stack.peek() < arr[i]) {
                stack.push(arr[i]);
                i++;
            } else if (stack.peek() >= arr[i]) {
                stack.pop();
            }
        }
        return stack;
    }
}

 

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        ArrayList<Integer> arrayList = new ArrayList<>();
        int i = 0;
        while (i < arr.length) {
            if (arrayList.isEmpty()) {
                arrayList.add(arr[i]);
                i += 1;
            } else if (arrayList.get(arrayList.size() - 1) < arr[i]) {
                arrayList.add(arr[i]);
                i += 1;
            } else if (arrayList.get(arrayList.size() - 1) >= arr[i]) {
                arrayList.remove(arrayList.size() - 1);
            }
        }
        int idx = 0;
        int[] stk = new int[arrayList.size()];
        for (int data : arrayList)
            stk[idx++] = data;
        return stk;
    }
}​

 

import java.util.Stack;

class Solution {
    public int[] solution(int[] arr) {

        Stack<Integer> stack = new Stack<>();

        for (int num : arr) {
            while (!stack.isEmpty() && num <= stack.peek())
                stack.pop();
            stack.push(num);
        }

        return stack.stream().mapToInt(i -> i).toArray();
    }
}

'알고리즘 테스트 공부' 카테고리의 다른 글

글자 이어 붙여 문자열 만들기  (0) 2024.01.10
주사위게임 3  (1) 2024.01.09
간단한 논리 연산  (0) 2024.01.05
콜라츠 수열만들기  (0) 2024.01.04
카운트 업  (1) 2024.01.03