reverse
진행 과정
먼저 역순으로 출력하기전에 어떤식으로 진행하는지 보겠습니다.
1 | 2 | 3 | 4 | 5 |
먼저 이렇게 생긴 배열이 있습니다.
맨앞에 있는 1과 5를 교환하면 아래와 같이 변합니다.
5 | 2 | 3 | 4 | 1 |
또 한번 교환 시키면 역순으로 만들어 진 것을 확인할 수 있습니다.
5 | 4 | 3 | 2 | 1 |
여기서 알 수 있는점은
교환 횟수는 배열의 크기/2 이며 i번째 배열과 (배열의 크기-i)번째값이 교환되는 것을 확인할 수 있습니다.
두 값의 교환 메소드
두 값을 교환 하기 위해서는 임시 저장 공간을 통한 교환 과정이 필요합니다. 진행 과정은 아래와 같습니다.
1. t = a[x]
2. a[x] = a[y]
3. a[y] = t
그러면 아래와 같은 메소드를 만들 수 있습니다.
static void swap(int[] a, int x, int y) {
int t = a[x];
a[x] = a[y];
a[y] = t;
}
역순으로 만드는 메소드
그러면 swap을 이용해서 배열을 역순으로 만드는 메소드를 만들겠습니다.
static void reverse(int[] a) {
for(int i=0;i<a.length/2;i++) {
swap(a,i,a.length-i-1);
}
}
예제
n개의 랜덤값을 입력받은 배열을 역순으로 출력하는 코드
import java.util.Random;
import java.util.Scanner;
public class ReverseArray {
static void swap(int[] a, int idx1, int idx2) {
int t = a[idx1];
a[idx1] = a[idx2];
a[idx2] = t;
}
static void reverse(int[] a) {
for(int i=0;i<a.length/2;i++) {
swap(a,i,a.length-i-1);
}
}
public static void main(String[] args) {
Random rand = new Random();
Scanner sc = new Scanner(System.in);
System.out.print("배열의 크기 입력 : ");
int num = sc.nextInt();
int[] x = new int[num];
for(int i=0;i<x.length;i++) {
x[i]=rand.nextInt(1024);
System.out.print("["+x[i]+"] ");
}
System.out.println();
System.out.println("##역순 출력##");
reverse(x);
for(int i=0;i<x.length;i++) {
System.out.print("["+x[i]+"] ");
}
}
}
결과값은 아래와 같습니다.
'Coding > Java' 카테고리의 다른 글
003. Java의 기본 자료구조(다차원배열(달력,날짜계산)) (1) | 2020.01.08 |
---|---|
002. Java의 기본 자료구조(소수나열) (0) | 2020.01.07 |
000. Java의 기본 자료구조(배열) (1) | 2020.01.06 |
댓글