[programmers] 배열 만들기 6(Java)

J-Cheol·2023년 12월 14일
0

프로그래머스

목록 보기
22/27
post-thumbnail

문제


프로그래머스 문제링크

풀이 코드


import java.util.*;
class Solution
{
    public int[] solution(int[] arr)
    {
        List<Integer> stk = new ArrayList<>();
        int i = 0;
        int k = -1;
        while (i < arr.length)
        {
            if (stk.isEmpty())
            {
                stk.add(arr[i]);
                k++; 
            } else if (stk.get(k) == arr[i])
            {
                stk.remove(k);
                k--;
            } else if (stk.get(k) != arr[i])
            {
                stk.add(arr[i]);
                k++;
            }
            i++;
        }
        if (stk.size() == 0)
            return new int[]{-1};

        int[] answer = new int[stk.size()];
        int j = 0;
        for (int num : stk)
        {
            answer[j++] = num;
        }

        return answer;
    }
}

리뷰


import java.util.*;
class Solution
{
    public int[] solution(int[] arr)
    {
        List<Integer> stk = new ArrayList<>(); // 정수형을 저장할 ArrayList 생성(스택으로 사용)
        int i = 0; // arr 배열의 index
        int k = -1; // 스택의 마지막 요소를 가리킬 index, 0으로 할 경우 다음 값이 계속 같다면 index가 음수기 때문에 초기값 -1

        while (i < arr.length)
        {
            if (stk.isEmpty()) // 스택이 비어 있다면
            {
                stk.add(arr[i]); // 스택에 arr[i] 값을 추가
                k++; // 스택의 index 증가
            } else if (stk.get(k) == arr[i]) // 스택의 마지막 값과 arr[i]의 값이 같다면
            {
                stk.remove(k); // 스택에서 마지막 값을 제거
                k--; // 스택의 index 감소
            } else if (stk.get(k) != arr[i]) // 스택의 마지막 값과 arr[i]의 값이 다르다면
            {
                stk.add(arr[i]); // 스택에 arr[i] 값을 추가
                k++; // 스택의 index 증가
            }
            i++; // arr 배열의 index 증가
        }
        if (stk.size() == 0) // 반복문이 끝난 후 스택이 비어있다면
            return new int[]{-1}; // -1을 포함한 배열을 반환

        int[] answer = new int[stk.size()]; // 스택의 크기로 배열을 생성
        int j = 0; // answer 배열의 index
        for (int num : stk) // for each, 스택의 값을 순회
        {
            answer[j++] = num; // 스택의 값을 answer 배열에 복사
        }

        return answer; // 결과 반환
    }
}

스택풀이

import java.util.*;
class Solution {
    public Stack<Integer> solution(int[] arr) // int배열 -> Stack<Integer>로 반환 타입 변경
  {
        Stack<Integer> stk = new Stack<>(); // 정수형을 저장할 스택 생성

        for (int i = 0; i < arr.length; i++) 
		{
            if (stk.isEmpty()) // 스택이 비어있다면
			{
                stk.push(arr[i]); // arr[i]을 스택에 추가
            } else if (stk.peek() == arr[i])  // 스택의 맨 위 값과 arr[i]의 값이 같다면
			{
                stk.pop(); // 스택의 맨 위 값을 제거
            } else // 스택의 맨 위 값과 현재 값이 다르다면
			{
                stk.push(arr[i]); // 현재 값을 스택에 추가
            }
        }
        if (stk.isEmpty()) // 스택이 비어있다면 
			stk.push(-1); // -1을 추가
        return stk; // 최종적인 스택을 반환
    }
}
profile
신입 백엔드 개발자(JAVA, Spring Boot, MYSQL)

0개의 댓글