***** 문제 설명 *****
배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,
arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.
arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.
배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.
***** 제한사항 *****
1. 배열 arr의 크기 : 1,000,000 이하의 자연수
2. 배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수
***** 문제 풀이 *****
프로그래머스에서는 해당문제를 큐/스택 문제로 정의내리고 있습니다.
그러나 큐, 스택으로 해당문제를 풀려 해도 도저히 풀이 되지 않아
그동안 생각했던것을 전부 지우고 처음부터 다시 생각을 하기 시작해 문제가 풀렸습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public static ArrayList solution(int []arr) {
ArrayList answer = new ArrayList();
int num = 1;
answer.add(arr[0]);
for(int i = 0; i < arr.length -1; i++){
if(arr[i] == arr[i + 1]){
}else{
answer.add(arr[i + 1]);
num++;
}
}
return answer;
}
|
cs |
지금 보니깐 for문 안에 if문도 계선할 여지가 보이네요
요지는 int[] 를 ArrayList로 변경하여 반환값을 가변적으로 만드는 것에 있습니다.
이번 문제는 int배열을 가변적으로 만들거나 값이 다 나온 경우에 배열을 생성하여야 해결이 되기 때문에 그렇게 생각하였고 다행히 프로그래머스에서는 반환값의 배열 타입을 변경하여도 정답처리가 진행됩니다.
하여 값을 첫번째 값과 그 다음값을 비교하여 같으면 return값에 포함하지않고 다르다면 포함하는 형식 입니다.
'Algorithm & Data Structure > Algorithm' 카테고리의 다른 글
[프로그래머스]문자열 나누기 with Swift (0) | 2024.05.28 |
---|---|
[프로그래머스] 3진법 뒤집기 java 풀이 (1) | 2023.11.21 |
[프로그래머스] 문자열 다루기 기본 풀이 (0) | 2023.11.16 |
[프로그래머스] 문자열 내림차순으로 배치하기 풀이 (0) | 2023.11.15 |
[프로그래머스] 약수의 개수와 덧셈 풀이 (1) | 2023.11.14 |