티스토리 뷰

문제


문제해석

문제는 비교적 간단합니다. 현재 위치의 값과 다음값을 비교하여 같은면 넘어가고 다른면 현재위치의 값을 배열에 저장을 해주면됩니다.

만약에 문제에서 정렬을 하라는것이 있었으면 sort메소드를 이용하여 정렬을 하면됩니다.

하지만 문제는 마지막위치에 있는 값을 "어떻게 비교하냐" 입니다.

결론적으로 마지막에 있는 값은 그전의 값과 같던, 틀리던 무조건 배열에 저장을 해주면 됩니다. 

왜냐하면 만약에 4,4,4,3,3 라는 배열이 주어지게되면 우선 2번째와 3번째 값이 다르기 때문에 4라는 값이 배열에 저장이 될것이며, 다음 3번째와 4번째 값이 같기 때문에 배열에 저장되지않습니다.

그리고 다음으로 넘어가 4번째와 5번째 둘이 비교를 해야하지만 5번째 위치의 값이 존재 하지 않기때문에 outOfBounds라는 에러가 발생 할것입니다.

그렇기에 마지막값은 무조건 그전에 있는 값과 같던 틀리던 무조건 배열에 저장을 해주면 됩니다.

소스코드

그럼 소스코드를 한번 보시겠습니다.

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
package Solution;
 
import java.util.*;
 
public class solution {
    public static void main(String[] args) {
        System.out.print("Please specify the size of the array :");
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] ar = new int[n];
        for(int i=0;i<ar.length;i++) {
            System.out.print("["+i+"] :");            
            int inputnumber = sc.nextInt();
            ar[i] = inputnumber;
        }
        ArrayList<Integer> list = new ArrayList<Integer>();
        for(int i=0;i<ar.length-1;i++) {
            if(ar[i]!=ar[i+1]) {
                list.add(ar[i]);
            }
            
        }
        list.add(ar[n-1]);
        
        System.out.println(list);
        
    }
 
}
 
cs

처음에는 Eclipse를 이용하여 코드를 작성하였습니다.

Scanner메소드를 이용하여서 배열의 크기를 지정하고 배열의 값을 넣어주었습니다.

그리고 리스트를 만들어서 for문을 돌려주었습니다.

여기서 ar.length-1을 사용한 이유는 마지막 값은 무조건 리스트에 지정해주기 위해 조건을 ar.length-1을 넣어 주었습니다.

다음은 현재 위치와 다음위치에 있는 값을 비교하여 다르면 리스트에 넣어주고 다르면 다음으로 넘어가게 됩니다.

그리고 마지막에는 list.add(ar[n-1])을 넣어주어 마지막 값을 추가하였습니다.

그리고 출력하게 되면 다음과 같이 정상적으로 중복된 값이 제거되것을 확인할 수 있습니다.

다음은 프로그래머스에서 작성한 코드입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.*;
 
public class Solution {
    public int[] solution(int []arr) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        for(int i=0;i<arr.length-1;i++){
            if(arr[i]!=arr[i+1]){
                list.add(arr[i]);
            }
        }
        list.add(arr[arr.length-1]);        
        int[] answer = new int[list.size()];
        for(int j=0;j<answer.length;j++){
            answer[j] = list.get(j);
        }
        
        return answer;
    }
}
cs

Eclipse에서 작성한 코드와 같은 방식 이지만 return을 이용하여 실행을 해야하기 때문에 우선 리스트를 이용하여 값을 리스트에 저장 후 

리스트 크기만큼의 배열을 만들어 주었습니다.

그다음 배열에 list.get() 메소드를 이용하여 0번째부터 하나하나 넣어 주었습니다.



HyunInKim/I_don-t_like_same_number
Contribute to HyunInKim/I_don-t_like_same_number development by creating an account on GitHub.
github.com



ps. 삽질을 굉장히 많이했다....outOfBounds....








공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함