프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/12906)
자바 + 초급문제의 같은 숫자는 싫어 이다.
상당히 난해하고...무언가 반복문을 써야할 듯하면서 인덱스를 비교해 줘야할 듯 하면서 if문을 써야할 듯하면서...
마지막 숫자는 어떻게 하나...하면서 상당히 골머리를 썩었다. 한 5h정도 걸린 듯 하다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
package programmers_같은숫자는싫어;
public class Exam {
public int[] solution(int []arr) {
int[] answer = {};
int o =0;
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
for( int i=0; i<arr.length; i++ ) {
if(arr[i] !=arr[i+1] ) {
answer[o] = arr[i];
o++;
/* i를 검사할때 다음수가 다르면 o에 넣고 o를 증가시켜서
* 인덱스 값을 다음 인덱스로 돌린다.
*/
if(i == arr.length && arr[i]==arr[arr.length] ) {
o++;
answer[o] = arr[arr.length];
return answer;
}
}
}
return answer;
}
}
|
cs |
긴 문장은 아니지만 여러모로 돌려보면서 오랜시간 삽질을 했다.
그러다가 아...모르겠다 죽을 것 같애..하면서 정보를 긁어모으다가 홈페이지에서 정답과 스치듯 마주치게 되었고(?)
'이왕 봐버린거 코드 해석을 열심히 하자!' 라고 마음먹은 난 감탄할 수 밖에 없었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
package programmers_같은숫자는싫어;
import java.util.*;
public class exam2 {
public int[] solution(int []arr) {
ArrayList<Integer> list = new ArrayList<Integer>();
/*ArrayList
* 클래스(객체) integer 형 배열 생성
* 새로운 객채로 생성 이 배열에 요소를 넣으려면
* 생성배열이름.add.();메소드사용
* 특정인덱스의 요소를 삭제하려면 생성배열이름.remove(인덱스넘버);
* 특정인덱스의 요소를 가져오려면 생성배열이름.get(인덱스넘버);
*/
int a =10;//10으로 시작되는 수를 막기위한 변수
for( int i = 0; i<arr.length; i++ ) {
//arr의 길이만큼 도는 i반복문
if( arr[i] != a ) {
/*첫 수 i가 10이 아닐때 시작.
* 만족하면 .add()메소드로 i=0이니
* arr[0]을 list의 인덱스값으로 저장하며 스타트
* 그리고 a에 arr[0]을 줌으로서 다음 수 i=1일때 와 자동비교하게끔
* 설정했다.
* 즉, 첫수를 저장하고서 다음 숫자와 비교하게끔 만드는 것.
*/
list.add(arr[i]);
a = arr[i];
}
}
/*이후 answer에 int[]객체를 새로 만들고 = list.size()로 초기화하여
* 인덱스 공간 확보.
*/
int[] answer = new int[list.size()];
/*for문을 확보한 list의 인덱스 값만큼 돌려서 반복시키고
* 0~list.size-1 의 횟수만큼 answer의 인덱스에
*list.get(i)로 인덱스요소를 전부 가져와서 대입한다.
*/
for( int i=0; i<list.size(); i++ ) {
answer[i] = list.get(i);
}
//이 과정이 끝나면 리턴!
return answer;
}
}
|
cs |
이렇게 깔끔한 사고가 있을 줄이야! 싶다.
새로운 배열을 깔아놓고 10을 기준으로 시작해 그 수를 비교 하고 또 그에 저장해가며 다음 수와 자연스레 중복여부를 확인하고 계셨다.
그 순간 뒷자리 수에 대한 고민은 없애놓고 시작하신 것이다...보고선 바로 "와...."라고 말했다.
앞자리는 정해놨고 뒷자리 수를 기준으로 판단하니까 2개의 기준을 잡아놓고 다른 수를 list에 집어넣으신 것 같더라.
간결해서 놀랬고 이렇게 연산할 수도 있음에 놀랐다.
그 후 answer 값에 list의 인덱스 만큼 늘려주고 그 안에 for문을 사용하셔서 answer의 각 인덱스 값에 list의 인덱스 값을
대입해 주신다.
그리고 깔끔하게 리턴. 왠지 리턴도 멋져보인다.
놀랍다. 초보자인 나에겐 정말 큰 충격이였다.
뭐라고 해야하나...이게 놀랍고 미묘하고 감탄스럽고 아쉬운 이 기분을.
나중에 익숙해질 때가 되면 나도 다시 한번 도전해서 점수를 받아보겠다.!
'자바 초급문제로 맨땅에 해딩하기' 카테고리의 다른 글
자바 초급문제 7. K번째수 (0) | 2020.03.29 |
---|---|
자바 초급문제 6. 문자열을 정수로 바꾸기 (0) | 2020.03.29 |
자바 초급문제 4. 수박수박수박수박수박수? (0) | 2020.03.25 |
자바 초급문제 3. 서울에서 김서방 찾기 (0) | 2020.03.25 |
자바 초급문제 2. 완주하지 못한 선수 (0) | 2020.03.24 |