본문 바로가기

코딩 테스트 공부 일지

#2. 프로그래머스 - 배열뒤집기

결과 : 실패

[나의 해결 계획]
1. StringBuilder 생성
2. .append() 메서드를 통해 StringBuilder에 넣고, reverse() 메서드를 사용하여 뒤집음.
3. 뒤집은 StringBuilder를 String -> String[] -> int[] 변환하여 리턴.

public class Main {
    public static void main(String[] args) {
        int[] num_list = {1,2,3,4,5,15};
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < num_list.length; i++) {
            sb.append(num_list[i]);
        }
        sb.reverse();
        System.out.println("sb = " + sb);

        String str = sb.toString();
        String[] str_arr = str.split("");

        int[] answer = new int[str_arr.length-1];

        for (int i = 0; i < str_arr.length; i++) {
            answer[i] = Integer.parseInt(str_arr[i]);
        }
        System.out.println(Arrays.toString(answer));
    }
}

 

[문제점]
이렇게하면 2자리 수의 값이 들어가게되면 해결안됨.

[해결책]
1. answer[] 을 대상 배열의 길이 만큼 생성.
2. for 반복문으로 answer[i] = 대상배열[대상배열.length-i-1];로 생성.

public class Main {
    public static void main(String[] args) {
        int[] num_list = {1,2,3,4,5,15};
        int[] answer = new int[num_list.length];

        for (int i = 0; i < num_list.length; i++) {
            answer[i] = num_list[num_list.length-i-1];
        }
        System.out.println(Arrays.toString(answer));
        
    }
}

Java에서는 첫번째 배열의 인덱스는 0 이고, 마지막 배열의 인덱스는 length - 1이다.
역방향 배열은 위와 반대로 첫번쨰 인덱스는 length - 1이고, 마지막 인덱스는 0 이다.

역방향 배열 1번째 = 대상의 마지막 인덱스 요소.
인덱스 (0) = 인덱스 (length - 1)
역방향 배열의 마지막번째 = 대상의 첫번째 인덱스 요소.
인덱스(length - 1) = 인덱스 (0)

즉 역방향 배열에서 인덱스 i 를 이용하여 순서를 조절할 수 있다.