๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ’ป Computer Science/- Data Structure, Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์Šคํ‚ฌ] ์ž๋ฐ”๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฐ์—ด shift ๊ตฌํ˜„ํ•˜๊ธฐ

by Wonit 2021. 1. 13.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋‹ค ๋ณด๋ฉด ๋ฌธ์ œ์™€ ๋ฌด๊ด€ํ•œ ๋ถ€๋ถ„์—์„œ ๋ง‰ํž ๋•Œ๊ฐ€ ์žˆ๋‹ค.


์˜ค๋Š˜ ์•Œ์•„๋ณผ ๋ฐฐ์—ด shift๋„ ๋น„์Šทํ•œ ๋งฅ๋ฝ์ด๋‹ค.

๋ฐฐ์—ด shift

๋ฌธ์ œ ํ’€์ด์— ๋ฐฐ์—ด shift๋ฅผ ๊ตฌํ˜„ํ•˜๋ผ๋Š” ์‹์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ•  ๋•Œ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์„ ์ข…์ข… ๋งˆ์ฃผํ–ˆ๋‹ค.

์•„.. ๊ฑฐ์˜ ๋‹ค ํ’€์—ˆ๋Š”๋ฐ ๋ฐฐ์—ด์— ์žˆ๋Š” ์• ๋“ค์ด ์™ผ์ชฝ์œผ๋กœ 5์นธ์”ฉ๋งŒ ์›€์ง์ด๋ฉด ๋์ธ๋ฐ,,

์ด ๊ฒƒ์€ ์‹ค์ œ๋กœ ๋ณธ์ธ์ด ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์œˆํ„ฐ ์ฝ”๋”ฉ ์ฝ”ํ…Œ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋Š๊ผˆ์—ˆ๋˜ ๊ฐ์ •์ด์—ˆ๋‹ค.

 

์ด ๋ฌธ์ œ๋ฅผ ์ข€ ๋” ๋ช…ํ™•ํžˆ ์ด์•ผ๊ธฐ ํ•ด๋ณด์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

๋ฐฐ์—ด A๊ฐ€ ์ฃผ์–ด์ง„ ๊ฒฝ์šฐ ์™ผ์ชฝ(์˜ค๋ฅธ์ชฝ) ์œผ๋กœ n์นธ shift ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ผ.

 

์ข€ ๋” ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•˜๊ธฐ. hack !

๋ฐฐ์—ด shift์—๋„ hack์ด ์กด์žฌํ•œ๋‹ค.

 

์—๋ฅผ ๋“ค์–ด์„œ arr = [1, 2, 3, 4, 5] ๋ผ๋Š” ๋ฐฐ์—ด์ด ์žˆ๊ณ  ์˜ค๋ฅธ์ชฝ์œผ๋กœ 3์นธ ์ด๋™ํ•˜๋ผ๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

 

๊ทธ๋Ÿผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค.

ํ•˜์ง€๋งŒ ๋ฐฐ์—ด ๋’ค์ง‘๊ธฐ๋ฅผ ์ด์šฉ ํ•œ๋‹ค๋ฉด ๋”์šฑ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฐฐ์—ด ๋’ค์ง‘๊ธฐ

๋ฐฐ์—ด ๋’ค์ง‘๊ธฐ๋Š” ๋ง ๊ทธ๋Œ€๋กœ ๋ฐฐ์—ด์˜ ์›์†Œ๋ฅผ ๋’ค์ง‘๋Š” ๊ฒƒ์ด๋‹ค.

 

arr = [1, 2, 3]

์ด๋ผ๋Š” ๋ฐฐ์—ด์„ ๋’ค์ง‘์œผ๋ฉด?

 

arr = [3, 2, 1]

์ด ๋˜๋Š” ๊ฐ„๋‹จํ•œ ๋…ผ๋ฆฌ์ด๋‹ค.

 

์ด๋Ÿฐ ๋ฐฐ์—ด ๋’ค์ง‘๊ธฐ๋ฅผ ์ด์šฉํ•  ๊ฒƒ์ธ๋ฐ, ์ˆœ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

์˜ค๋ฅธ์ชฝ shift์—ฐ์‚ฐ์œผ๋กœ n๋ฒˆ ์ด๋™

  1. ๋ฐฐ์—ด 0๋ฒˆ์งธ ์ธ๋ฑ์Šค์—์„œ n๋ฒˆ์งธ ์ธ๋ฑ์Šค ๊นŒ์ง€ ๋’ค์ง‘๊ธฐ
  2. ๋ฐฐ์—ด n๋ฒˆ์งธ ์ธ๋ฑ์Šค์—์„œ ๋ฐฐ์—ด ๋ ์ธ๋ฑ์Šค ๊นŒ์ง€ ๋’ค์ง‘๊ธฐ
  3. ์ „์ฒด ๋ฐฐ์—ด ๋’ค์ง‘๊ธฐ.

์™ผ์ฉ shift ์—ฐ์‚ฐ์œผ๋กœ n๋ฒˆ ์ด๋™

  1. ๋ฐฐ์—ด ๋ ์ธ๋ฑ์Šค์—์„œ n๋ฒˆ์งธ ๊นŒ์ง€ ๋’ค์ง‘๊ธฐ
  2. ๋ฐฐ์—ด 0๋ฒˆ์งธ ์ธ๋ฑ์Šค์—์„œ ๋ฐฐ์—ด ๋์—์„œ n๋ฒˆ์งธ ๋ฅผ ๋บธ ๋งŒํผ ๋’ค์ง‘๊ธฐ
  3. ์ „์ฒด ๋ฐฐ์—ด ๋’ค์ง‘๊ธฐ

Java๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ

์ด์ œ ์ž๋ฐ”๋กœ ๊ตฌํ˜„ํ•ด๋ณด์ž.


์ „์ฒด ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋จผ์ € ๋ณด์—ฌ์ฃผ์ž๋ฉด.

public class ArrayShift {
  public static void main(String[] args) {
    int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    int num = 3;

    rightShift(arr, num);
    System.out.println(Arrays.toString(arr));

    leftShift(arr, num);
    System.out.println(Arrays.toString(arr));
  }

  /* ๋ฐฐ์—ด ๋’ค์ง‘๊ธฐ๋ฅผ ์œ„ํ•œ ๋ฐฐ์—ด ์ธ๋ฑ์Šค๋ผ๋ฆฌ ๋ณ€๊ฒฝ ๋ฉ”์„œ๋“œ */
  private static void swap(int[] arr, int idx1, int idx2) {
    int temp = arr[idx1];
    arr[idx1] = arr[idx2];
    arr[idx2] = arr[idx2];
  }

  /* ๋ฐฐ์—ด ์‹œ์ž‘ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ๋ ์ธ๋ฑ์Šค๊นŒ์ง€ ๋ฐ˜๋ณต์„ ๋Œ๋ฉฐ swap์„ ์ง„ํ–‰ํ•  ๋ฉ”์„œ๋“œ*/
  private static void reverse(int[] arr, int start, int end) {
    int end = end - 1; // ๋ฐฐ์—ด ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋Š” ๋ฐฐ์—ด ๊ธธ์ด - 1์ด๊ธฐ ๋•Œ๋ฌธ์—
    while(start < end) { // ๋ฐ˜๋ณต์„ (start ~ end) -> (start + 1 ~ end - 1) ... ๊นŒ์ง€ ์ง„ํ–‰
      swap(arr, start, end);
      start++;
      end--;
    }
  }

  private static void rightShift(int[] arr, int n) {
    int size = arr.length;
    reverse(arr, 0, n);
    reverse(arr, n, size);
    reverse(arr, 0, size)
  }

  private static void leftShift(int[] arr, int n) {
    int size = arr.length;
    reverse(arr, size - n, size);
    reverse(arr, 0, size - n);
    reverse(arr, 0, size);
  }
}

์œ„์™€ ๊ฐ™๋‹ค.

 

์—ฌ๊ธฐ์„œ ์กฐ๊ธˆ ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์„ค๋ช…ํ•˜์ž๋ฉด

 

reverse

private static void reverse(int[] arr, int start, int end) {
  int end = end - 1;
  while(start < end) {
    swap(arr, start, end);
    start++;
    end--;
  }
}
  • int end = end - 1; : ๋ฐฐ์—ด ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋Š” ๋ฐฐ์—ด ๊ธธ์ด - 1์ด๊ธฐ ๋•Œ๋ฌธ์—
  • while(start < end) : ๋ฐ˜๋ณต์„ (start ~ end) -> (start + 1 ~ end - 1) ...์„ start๊ฐ€ ๋ฐ”๊ฟ€ end๊ฐ€ ์—†์„ ๋•Œ ๊นŒ์ง€ ์ง„ํ–‰

๋Œ“๊ธ€