https://programmers.co.kr/learn/courses/30/lessons/12906
[기본 상태]
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
int[] answer = {};
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
System.out.println("Hello Java");
return answer;
}
}
[풀이에 필요한 조건]
입력받은 arr 비교를 위한 clone Array를 생성.
int[] clone = arr.clone();
비교 후 결과값을 임시저장할 int형 가변 리스트 생성.
ArrayList<Integer> integers = new ArrayList<>();
비교를 위한 for 문 작성.
for문은 arr 길이보다 1 작게 ( arr[i] vs arr[i+1] 을 비교하기 위해, 마지막에 arr 길이값을 넘어 오류가 날 수 있음. )
clone에 저장된 값을 다음 값과 비교하여 값이 일치하지 않을 때, Arraylist.add(data)를 통해 list에 값을 넣어줌.
ex) {1,1,2} > arr[0]=1, arr[1]=1 은 비교값이 일치하여 특별한 조작 없이 다음으로 넘어감.
> arr[1]=1, arr[2]=2 에서 비교값이 일치하지 않아 arr[1]의 값을 list(0) 에 저장.
arr 의 마지막 2개의 데이터를 처리하기 위한 조건을 추가함.
{1,1,3,4,4} = {1,3,4} arr[3]=4, arr[4]=4 에서 일치하면 arr[3]만 저장
{1,1,3,4,5} = {1,3,4,5} arr[3]=4, arr[4]=5 에서 상위 조건문을 통해 arr[3]은 저장되었으나, arr[4]를 저장하지 못함.
위 예시와 같이 마지막 2개의 데이터가 동일하다면 1개만 출력되고, 다르다면 2개의 데이터가 저장되어야함.
for문이 arr.length-2 만큼 진행되면, arr[arr.length-2], arr[arr.length-1]를 비교하여
조건에 맞춰 arr[arr.length-1] 데이터를 저장하도록 함.
answer를 ArrayList 의 길이만큼의 배열로 지정하고,
ArrayList.get() 으로 데이터 값을 하나씩 부여함.
[참고]
Arraylist :
https://psychoria.tistory.com/765
Array Clone() :
https://coding-factory.tistory.com/548
[해답]
import java.util.*;
import java.util.ArrayList;
class Solution {
public int[] solution(int []arr) {
int[] clone = arr.clone();
ArrayList<Integer> integers = new ArrayList<>();
loop:
for (int i = 0; i < arr.length - 1; i++) {
if (clone[i] != clone[i + 1]) {
integers.add(clone[i]);
}
if (i == arr.length - 2) {
if (clone[i] != clone[i + 1]) {
integers.add(clone[i+1]);
break loop;
} else {
integers.add(clone[i]);
break loop;
}
}
}
int[] answer = new int[integers.size()];
for (int i = 0; i < integers.size(); i++) {
answer[i] = integers.get(i);
}
return answer;
}
}
import java.util.ArrayList;
class Solution {
public int[] solution(int []arr) {
int[] clone = arr.clone();
ArrayList<Integer> integers = new ArrayList<>();
int count = 0;
loop:
for (int i = 0; i < arr.length - 1; i++) {
if (clone[i] != clone[i + 1]) {
integers.add(clone[i]);
System.out.print("비교대상 : " + clone[i] + "vs" + clone[i + 1] + " / " + "count = " + count + " / " + "추가된 integer[" + count + "] = " + integers.get(count) + "\n");
count += 1;
}
// else {
// System.out.print("비교대상 : "+clone[i]+"vs"+clone[i+1]+" / "+ "count = "+count + "\n");
// }
if (i == arr.length - 2) {
if (clone[i] != clone[i + 1]) {
integers.add(clone[i+1]);
break loop;
} else {
integers.add(clone[i]);
break loop;
}
}
// System.out.print("{");
// for(int i=0;i<integers.size();i++){
// System.out.print(integers.get(i));
// if(i< integers.size()-1){
// System.out.print(",");
// }
// }
// System.out.print("}\n");
}
int[] answer = new int[integers.size()];
for (int i = 0; i < integers.size(); i++) {
answer[i] = integers.get(i);
}
return answer;
}
}
public class Main {
public static void main(String[] args) {
Solution sol = new Solution();
int[] arr = {1,1,5,1,1,6,6,8,4,6,8,1,9,9,8};
int[] result = sol.solution(arr);
System.out.print("{");
for(int i=0;i<result.length;i++){
System.out.print(result[i]);
if(i<result.length-1){
System.out.print(",");
}
}
System.out.print("}\n");
}
}
public class Solution {
public int[] solution(int []arr) {
ArrayList<Integer> tempList = new ArrayList<Integer>();
int preNum = 10;
for(int num : arr) {
if(preNum != num)
tempList.add(num);
preNum = num;
}
int[] answer = new int[tempList.size()];
for(int i=0; i<answer.length; i++) {
answer[i] = tempList.get(i).intValue();
}
return answer;
}
}