문제
0과 1로만 이루어진 정수 배열 arr가 주어집니다. 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을 return 하는 solution 함수를 완성해 주세요.
단, 만약 빈 배열을 return 해야한다면 [-1]을 return 합니다.
풀이와 결과
package programmers.codingBasicTraining;
import java.util.*;
public class PROB120 {
public static void main(String[] args) {
int[] arr = {1,1,1,1,1,1,1,1};
System.out.println(Arrays.toString(solution(arr)));
}
public static int[] solution (int[] arr) {
List<Integer> stk = new ArrayList<>();
int i = 0;
while(i < arr.length) {
if (stk.isEmpty()) {
stk.add(arr[i]);
i++;
System.out.println(i + Arrays.toString(stk.toArray()));
} else if (stk.get(stk.size() - 1) == arr[i]){
stk.remove(stk.get(stk.size() - 1));
i++;
System.out.println(i + Arrays.toString(stk.toArray()));
} else if (stk.get(stk.size() - 1) != arr[i]) {
stk.add(arr[i]);
i++;
System.out.println(i + Arrays.toString(stk.toArray()));
}
}
if (stk.isEmpty()) {
return new int[]{-1};
} else {
return stk.stream().mapToInt(v -> v).toArray();
}
}
}
Java
복사
테스트 1 〉 통과 (0.05ms, 67.6MB)
테스트 2 〉 통과 (1.98ms, 72.8MB)
테스트 3 〉 통과 (0.06ms, 76.4MB)
테스트 4 〉 실패 (3.09ms, 77.1MB)
테스트 5 〉 실패 (2.99ms, 75.4MB)
테스트 6 〉 통과 (1.88ms, 78.8MB)
테스트 7 〉 실패 (2.01ms, 73.1MB)
테스트 8 〉 실패 (5.99ms, 74.4MB)
테스트 9 〉 통과 (0.09ms, 67.6MB)
테스트 10 〉 실패 (2.74ms, 73.6MB)
테스트 11 〉 실패 (2.52ms, 79.3MB)
테스트 12 〉 실패 (6.80ms, 73MB)
테스트 13 〉 실패 (13.59ms, 82.1MB)
테스트 14 〉 실패 (6.46ms, 76.2MB)
테스트 15 〉 실패 (3.91ms, 74.4MB)
테스트 16 〉 실패 (23.36ms, 82.5MB)
테스트 17 〉 실패 (23.07ms, 80MB)
테스트 18 〉 실패 (43.55ms, 93.5MB)
테스트 19 〉 실패 (128.82ms, 133MB)
테스트 20 〉 실패 (25.67ms, 87.6MB)
Java
복사
..? 코드 실행 에서의 테케는 만족하는데 나머지는 불만족해서 테스트케이스 찾아내야 할듯,,