프로그래머스 Level 1
같은 숫자는 싫어
자바(Java)
같은 숫자는 싫어 문제는 배열 arr를 받아서
첫 값과 그 다음 값이 다를 경우에는 새로 추가하지 않고
값이 다를 경우에만 추가하고 그 추가한 값으로 배열의 다음값과 비교해 추가하는 방식이다
포인트는 배열에는 처음 크기를 지정해 주고 넣어야 하는데
몇개가 나올지 모르는데 어떻게 처음 배열의 크기를 지정하냐는 것과
그 다음으로는 값을 비교해가면서 새 배열에 기존 arr 배열의 값을 담아야 하는데
어떻게 비교해서 담냐는 것이다
내 풀이방법은 다음과 같은데
먼저 처음 배열의 크기를 정확히 측정할 수 없는 만큼
arr의 배열의 길이만큼 int 형태의 배열을 생성한다
이후 for문을 돌려서
맨 처음의 경우에는 비교할 대상이 없으므로 무조건 삽입하고
이후에 j++를 통해 다음 값으로 보내준다
이제 맨 처음이 아닌 경우인데
이 경우에는 j-1로 이전 값을 가져와 신규 값과 비교한다
신규 값과 동일하다면 추가 없이 넘어가고
신규 값과 다르다면 j에 값을 넣어주고
j를 추가해 다음 값과 비교하게 한다
마지막으로 arrOri 배열 안에 값은 다 담았으나
배열 길이가 더 크기 때문에
필요한 값 외의 남은 배열의 칸은 죄다 0이 들어가 있는데
이제 Arrays.copyOf(복사할 배열명, 복사할 길이);
를 통해 추가한 배열만큼의 길이만 잘라준다
근데 추가한 배열의 길이는 어떻게 알까?
추가할 때 마다 j를 추가해주지 않았나!
j를 이용해서 잘라주면
필요한 만큼의 배열만 잘라내서 반환할 수 있다
마지막으로 프로그래머스 답안용으로는
아래 코드를 참조하면 된다
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
int[] arrOri = new int[arr.length];
int j = 0;
for(int i = 0; i<arr.length; i++) {
if(i == 0) { // 처음의 경우
arrOri[j] = arr[i];
j++;
} else { // 처음이 아닐 경우
if(arrOri[j-1] != arr[i]) {
arrOri[j] = arr[i];
j++;
} else {
}
}
}
int[] answer = Arrays.copyOf(arrOri, j);
return answer;
}
}
'IT > Algorithm' 카테고리의 다른 글
프로그래머스(Programmers) 나누어 떨어지는 숫자 배열(java) (0) | 2019.08.11 |
---|---|
프로그래머스(Programmers) 문자열 내 p와 y의 개수(java) (0) | 2019.08.10 |
프로그래머스(Programmers) 가운데 글자 가져오기(java) (0) | 2019.08.08 |
프로그래머스(Programmers) 문자열 다루기 기본 풀이(java) (0) | 2019.08.08 |
프로그래머스(Programmers) 서울에서 김서방 찾기 풀이(java) (0) | 2019.08.08 |
댓글