본문 바로가기
Coding/Java

001. Java의 기본 자료구조(reverse)

by hyun-am 2020. 1. 6.

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]+"] ");
		}
	}
}

 

결과값은 아래와 같습니다.

 

 

댓글