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

[์•Œ๊ณ ๋ฆฌ์ฆ˜ PS] ๋ฐฑ์ค€ 1158๋ฒˆ ์š”์„ธํ‘ธ์Šค ๋ฌธ์ œ ์ž๋ฐ” ๋ฌธ์ œํ’€์ด (ํ, ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ํ’€์ด)

by Wonit 2021. 2. 3.

๋ฌธ์ œ

ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ๋ฐฑ์ค€์˜ 1158๋ฒˆ ์š”์„ธํ‘ธ์Šค ๋ฌธ์ œ ์˜ ์ ‘๊ทผ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค.
์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋จผ์ € ์ƒ๊ฐํ•ด๋ณด์ž.

ํ•ด๊ฒฐ๋ฒ•

์ด ๋ฌธ์ œ๋Š” ํ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฌธ์ œ๊ฒฉ์ด๋‹ค.

 

๋ฌธ์ œ๋Š” ์ด๋ ‡๋‹ค.

 

1 ~ N ๊นŒ์ง€ ์ˆ˜๋ฅผ 1์ž๋กœ ๋Š˜์—ฌ๋†“๋Š”๋‹ค.

N = 7

1, 2, 3, 4, 5, 6, 7

๊ทธ๋ฆฌ๊ณ  ํฌ์ธํ„ฐ๋ฅผ K๋งŒํผ ์›€์ง์ธ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ํ•ด๋‹น ๋ฆฌ์ŠคํŠธ์—์„œ ์ œ์™ธ์‹œํ‚จ๋‹ค.

 

์ด ๊ณผ์ •์„ ๋ฆฌ์ŠคํŠธ์— ์›์†Œ๊ฐ€ ์—†์„ ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋Š”๋ฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ์ด๋‹ค.

N = 7, K = 3

Rount 1
=> 1, 2, 3, 4, 5, 6, 7
=>       -
=> return => 3,

Rount 2
=> 1, 2, 4, 5, 6, 7
=>             -
=> return => 3, 6

Rount 3
=> 1, 2, 4, 5, 7
=>    -
=> return => 3, 6, 2

Rount 4
=> 1, 4, 5, 7
=>             -
=> return => 3, 6, 2, 7

Rount 5
=> 1, 4, 5
=>       -
=> return => 3, 6, 2, 7, 5

Rount 6
=> 1, 4
=> -
=> return => 3, 6, 2, 7, 5, 1

Rount 7
=> 4
=> -
=> return => 3, 6, 2, 7, 5, 1, 4


Rount 8
=> Empty
=>
=> return => 3, 6, 2, 7, 5, 1, 4

์ ‘๊ทผ๋ฒ•

์ด ๋ฌธ์ œ๋Š” 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ
  2. ํ ์ž๋ฃŒ๊ตฌ์กฐ

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ํ•ด๊ฒฐ

์‚ฌ์‹ค ์ด ๋ฌธ์ œ๋Š” ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ๋ณด๋‹ค, ํ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ํŽธํ•˜๋‹ค.

 

๊ทธ ์ด์œ ๋Š” ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ์šฐ๋ฆฌ๋Š” ํ์™€ ๋น„์Šทํ•œ ๋™์ž‘์„ ํ•˜๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์šฐ์„  n์ด ๋“ค์–ด์˜ค๋ฉด n๊ธธ์ด๋ฅผ ๊ฐ–๋Š” ์ •๋‹ต ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ , k๋ฒˆ์งธ ์ˆ˜๋Š” 1 ~ n ๊นŒ์ง€ ๋ฐฐ์—ด์„ k๋ฒˆ ๋Œ๋ฉฐ 0๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ ๋…ธ๋“œ์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋„๋ก ํ•œ๋‹ค.

 

์ด ๊ณผ์ •์„ n๋ฒˆ ๋ฐ˜๋ณตํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ์š”์„ธํ‘ธ์Šค ์ˆ˜์—ด์ด ํƒ„์ƒํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

private static int[] solveByLinkedList(int n, int k) {

  List<Integer> list = new LinkedList<>();
  int[] answer = new int[n];
  k -= 1; // k ์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด -1
  for (int i = 0; i < n; i++) {
    list.add(i + 1); // 1 ~ n ์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ˆ˜์—ด ์ดˆ๊ธฐํ™”
  }

  for (int i = 0; i < n; i++) {
    int loop = k; // k๋งŒํผ ๋ฐ˜๋ณต์„ ์œ„ํ•ด ๋ฐ˜๋ณต ๋ณ€์ˆ˜ ์„ค์ •
    while(loop-- > 0) {
      list.add(list.remove(0)); // k๋ฒˆ์งธ๊ฐ€ ์•„๋‹Œ ์ˆ˜๋“ค์„ ๋‹ค์‹œ ๋ฆฌ์ŠคํŠธ ๋์œผ๋กœ ์ด๋™
    }
    answer[i] = list.remove(0); // k๋ฒˆ์งธ ์ˆ˜๋Š” ์ •๋‹ต ๋ฐฐ์—ด์— ์ถ”๊ฐ€
  }
  return answer;
}

ํ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ํ•ด๊ฒฐ

ํ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๋…ผ๋ฆฌ๋Š” ์œ„์˜ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋…ผ๋ฆฌ์™€ ๊ฐ™๋‹ค.


ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ์ ์ด ํ•˜๋‚˜ ์žˆ๋‹ค๋ฉด, ์ž๋ฃŒ ๊ตฌ์กฐ๋งŒ ๋‹ฌ๋ผ์กŒ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

private static int[] solveByQueue(int n, int k) {
  Queue<Integer> queue = new LinkedList<>();
  int[] answer = new int[n];
  for (int i = 0; i < n; i++) {
    queue.add(i + 1);
  }
  int index = 0;
  while(!queue.isEmpty()) {
    for (int i = 0; i < k-1; i++) {
        int value = queue.remove();
        queue.add(value);
    }
    answer[index] = queue.remove();
    index++;
  }
  return answer;
}

์˜ค๋‹ต ํ›„๋ณด

์ •๋‹ต ์ฝ”๋“œ


public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        String[] nk = br.readLine().split(" ");
        int n = Integer.parseInt(nk[0]);
        int k = Integer.parseInt(nk[1]);
        int[] answer = solveByQueue(n, k);


        if(n == 1 && k == 1) {
            bw.write("<" + answer[0] + ">");
        }else {
            bw.write("<" + answer[0]);
            for (int i = 1; i < answer.length - 1; i++) {
                bw.write(", " + answer[i]);
            }
            bw.write(", " + answer[answer.length-1] + ">");
        }

        bw.flush();
        bw.close();
    }

    private static int[] solveByLinkedList(int n, int k) {

        List<Integer> list = new LinkedList<>();
        int[] answer = new int[n];
        k -= 1;
        for (int i = 0; i < n; i++) {
            list.add(i + 1);
        }

        for (int i = 0; i < n; i++) {
            int loop = k;
            while(loop-- > 0) {
                list.add(list.remove(0));
            }
            answer[i] = list.remove(0);
        }
        return answer;
    }
    private static int[] solveByQueue(int n, int k) {
        Queue<Integer> queue = new LinkedList<>();
        int[] answer = new int[n];
        for (int i = 0; i < n; i++) {
            queue.add(i + 1);
        }
        int index = 0;
        while(!queue.isEmpty()) {
            for (int i = 0; i < k-1; i++) {
                int value = queue.remove();
                queue.add(value);
            }
            answer[index] = queue.remove();
            index++;
        }
        return answer;
    }
}

์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋‘ ํ’€์ด ๋ฐฉ๋ฒ• ๋ชจ๋‘ ํ†ต๊ณผํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋Œ“๊ธ€