stk에 원소가 있고, stk의 마지막 원소가 arr[i]와 같으면 stk의 마지막 원소를 stk에서 제거하고 i에 1을 더합니다.
stk에 원소가 있는데 stk의 마지막 원소가 arr[i]와 다르면 stk의 맨 마지막에 arr[i]를 추가하고 i에 1을 더합니다.
위 작업을 마친 stk를 출력하는 문제입니다. 단, 빈 배열은 [-1]을 출력합니다.
입출력 예
arr
result
[0, 1, 1, 1, 0]
[0, 1, 0]
[0, 1, 0, 1, 0]
[0, 1, 0, 1, 0]
[0, 1, 1, 0]
[-1]
테스트 (인텔리제이)
조건을 보면 i는 0으로 초기화 선언 해두고 i가 arr의 크기보다 작으면 주어진 조건을 반복해서 수행하라고 해서 while문을 사용했습니다.
while문은 i가 arr보다 커지면 멈추도록 하고
내부에서 첫 if문에는 answer가 빈 배열이면 arr의 i인덱스에 있는 원소를 추가하라는 조건을 수행합니다. isEmpty 메서드로 빈 배열인지 체크하고 true면 add 메서드에 arr[i] 원소를 추가하도록 합니다.
조건을 보면 두번째와 세번째는 빈배열이 아닐 시라는 공통 조건으로 첫 if문에서 처리했기 때문에 answer의 배열 체크는 하지 않고 answer의 마지막 원소가 arr[i] 원소와 같은지 체크하는 equals 메서드를 사용하여 true면 answer의 remove 메서드로 마지막 원소를 삭제합니다. remove 메서드에는 answer의 크기를 알려주는 size 메서드를 사용하고 배열의 시작은 0부터이기 때문에 1을 빼준 인덱스의 원소를 삭제합니다.
마지막은 첫 if문과 두번째 if문의 조건과 반대되는 조건이기 때문에 else를 사용하여 answer에 arr[i] 원소를 추가해줍니다.
여기서 또 공통의 조건으로 각 if문 들이 수행하고 나면 i에 1을 추가해주는 조건이 있기 때문에 while문 마지막에 i++을 사용하여 i에 1을 더해주도록 했습니다.
while문이 멈추면 최종 answer가 빈 배열인지 if문으로 체크하여 빈 배열이면 -1을 추가하여 출력하도록 했습니다.
package com.namji.codingtest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class 배열_만들기_6 {
public static void main(String[] args) {
/*
정수 배열 arr이 매개변수로 주어집니다.
arr은 0과 1로만 이루어져 있습니다.
arr을 이용해 stk라는 새로운 배열을 만드려고 합니다.
i의 초기값을 0으로 설정하고 i가 arr의 길이보다 작으면 다음을 반복합니다.
- 만약 stk이 빈 배열이라면 arr[i]를 stk에 추가하고 i에 1을 더합니다.
- stk에 원소가 있고, stk의 마지막 원소가 arr[i]와 같으면 stk의 마지막 원소를 stk에서 제거하고 i에 1을 더합니다.
- stk에 원소가 있는데 stk의 마지막 원소가 arr[i]와 다르면 stk의 맨 마지막에 arr[i]를 추가하고 i에 1을 더합니다.
위 작업을 마친 stk를 출력하는 문제입니다.
단, 빈 배열은 [-1]을 출력합니다.
입출력 예
arr result
[0, 1, 1, 1, 0] [0, 1, 0]
[0, 1, 0, 1, 0] [0, 1, 0, 1, 0]
[0, 1, 1, 0] [-1]
*/
int[] arr = {0, 1, 1, 0};
int i = 0;
List<Integer> answer = new ArrayList<>();
while (i < arr.length) {
if (answer.isEmpty()) {
answer.add(arr[i]);
} else if (answer.get(answer.size() - 1).equals(arr[i])) {
answer.remove(answer.size() - 1);
} else {
answer.add(arr[i]);
}
i++;
}
if (answer.isEmpty()) {
answer.add(-1);
}
System.out.println(answer);
}
}
프로그래머스 코드
class Solution {
public List solution(int[] arr) {
List<Integer> answer = new ArrayList<>();
int i = 0;
while (i < arr.length) {
if (answer.isEmpty()) {
answer.add(arr[i]);
} else if (answer.get(answer.size() - 1).equals(arr[i])) {
answer.remove(answer.size() - 1);
} else {
answer.add(arr[i]);
}
i++;
}
if (answer.isEmpty()) {
answer.add(-1);
}
return answer;
}
}