๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜

[Java] BOJ 11866 ์š”์„ธํ‘ธ์Šค ๋ฌธ์ œ 0

by ๐ŸŠ๊ทค๐ŸŠ 2024. 7. 17.

๋ฌธ์ œ 

๋ฌธ์ œ ๋งํฌ https://www.acmicpc.net/problem/11866

  • 1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€ N๋ช…์˜ ์‚ฌ๋žŒ์ด ์›์„ ์ด๋ฃจ๋ฉด์„œ ์•‰์•„์žˆ๊ณ , ์–‘์˜ ์ •์ˆ˜ K(≤ N)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
  • ์ด์ œ ์ˆœ์„œ๋Œ€๋กœ K๋ฒˆ์งธ ์‚ฌ๋žŒ์„ ์ œ๊ฑฐํ•œ๋‹ค. ํ•œ ์‚ฌ๋žŒ์ด ์ œ๊ฑฐ๋˜๋ฉด ๋‚จ์€ ์‚ฌ๋žŒ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ์›์„ ๋”ฐ๋ผ ์ด ๊ณผ์ •์„ ๊ณ„์†ํ•ด ๋‚˜๊ฐ„๋‹ค. ์ด ๊ณผ์ •์€ N๋ช…์˜ ์‚ฌ๋žŒ์ด ๋ชจ๋‘ ์ œ๊ฑฐ๋  ๋•Œ๊นŒ์ง€ ๊ณ„์†๋œ๋‹ค.
  • ์›์—์„œ ์‚ฌ๋žŒ๋“ค์ด ์ œ๊ฑฐ๋˜๋Š” ์ˆœ์„œ๋ฅผ (N, K)-์š”์„ธํ‘ธ์Šค ์ˆœ์—ด์ด๋ผ๊ณ  ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด (7, 3)-์š”์„ธํ‘ธ์Šค ์ˆœ์—ด์€ <3, 6, 2, 7, 5, 1, 4>์ด๋‹ค.
  • ์ฒซ์งธ ์ค„์— N๊ณผ K๊ฐ€ ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ K ≤ N ≤ 1,000)

์•„์ด๋””์–ด

  • while๋ฌธ์„ ๋Œ๋ฆฌ๋ฉด์„œ ์‹œ์ž‘์ ์˜ ์œ„์น˜์—์„œ K๋ฒˆ์งธ ๋’ค๊ฐ€ ํ˜„์žฌ ์ธ์›์˜ ์ตœ๋Œ“๊ฐ’๋ณด๋‹ค ํด ๊ฒฝ์šฐ์—๋Š” ์ฒ˜์Œ์œผ๋กœ ๋Œ์•„๊ฐ€์„œ ๋‹ค์‹œ ์„ธ๊ธฐ ์œ„ํ•ด ((์‹œ์ž‘์  + K - 1) % ๋‚จ์€ ์‚ฌ๋žŒ ์ˆ˜)๋ฅผ ํ•˜๊ณ  ์•„๋‹ ๊ฒฝ์šฐ์—๋Š” ์‹œ์ž‘์ ์—์„œ K - 1์„ ๋”ํ•œ ๊ฐ’์„ ๋‹ค์‹œ ์‹œ์ž‘์ ์œผ๋กœ ์žก๋Š”๋‹ค. 
  • ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ ‡๊ฒŒ ์‚ฌ๋žŒ์„ ํ•œ๋ช…์”ฉ ๋บ„๋•Œ๋งˆ๋‹ค ArrayList์—์„œ๋„ ํ•ด๋‹น ์œ„์น˜์˜ ๊ฐ’์„ removeํ•ด์ค€๋‹ค.
  • ๊ทธ๋ ‡๊ฒŒ ์‚ฌ๋žŒ๋“ค์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ArrayList๊ฐ€ ๋นˆ ๊ฐ’์ด ๋˜๋ฉด While๋ฌธ์„ ์ข…๋ฃŒํ•œ๋‹ค. 

๊ฒช์€ ์‹œํ–‰์ฐฉ์˜ค

  • While๋ฌธ ์•ˆ์— ์žˆ๋Š” if๋ฌธ์‹์ด ์ƒ๊ฐ์ฒ˜๋Ÿผ ๋Œ์•„๊ฐ€์ง€ ์•Š์•„์„œ ์—ฌ๋Ÿฌ๋ฒˆ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ๊ฒช์€ ๋์— ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค..ใ…œใ…œ

์˜ค๋Š˜๋„ ์—ด์‹ฌํžˆ ํ–ˆ๋‹ค..!

์ฝ”๋“œ

import java.io.*;
import java.util.*;

public class BOJ11866 {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        StringTokenizer st = new StringTokenizer(br.readLine());

        // ์ˆซ์ž๋ฅผ ์ €์žฅํ•  arrayList
        List<Integer> round = new ArrayList<Integer>();
        List<Integer> result = new ArrayList<Integer>();

        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());

        // ์ˆœ์„œ๋Œ€๋กœ ์ˆซ์ž๋ฅผ ์ง‘์–ด๋„ฃ์Œ
        for(int i = 1; i <= N; i++){
            round.add(i);
        }

        // ์‹œ์ž‘์œ„์น˜
        int start = 0;

        while(true){
            // ๋งŒ์•ฝ ์‹œ์ž‘์œ„์น˜์—์„œ K๋ฒˆ์งธ ๋’ค๊ฐ€ ์ตœ๋Œ€ ์‚ฌ๋žŒ์ˆ˜๋ฅผ ๋„˜๊ฒผ๋‹ค๋ฉด
            if(start + (K - 1) > (round.size() - 1)){
                // ๋‹ค์‹œ ์•ž์œผ๋กœ ๊ฐ€์„œ ๋นผ๊ณ  ๋‚จ์€ ์ˆ˜ ๋งŒํผ ์นด์šดํŠธ
                start = (start + (K - 1)) % round.size();
            }
            else{
                // ์ตœ๋Œ“๊ฐ’์„ ๋„˜์–ด๊ฐ€์ง€ ์•Š๋Š”๋‹ค๋ฉด K๋ฒˆ์งธ ๋’ค๋ฅผ ์‹œ์ž‘์ ์œผ๋กœ ์˜ฎ๊น€
                start = start + (K - 1);
            }

            // ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•  arrayList์— ๋ฐ”๋€ ์‹œ์ž‘์ ์— ์žˆ๋Š” ์‚ฌ๋žŒ์„ ์ €์žฅ
            result.add(round.get(start));
            // ๊ฒฐ๊ณผ ๊ฐ’์— ์ €์žฅ๋์œผ๋ฉด ์›๋ž˜ arrayList์—์„œ๋„ ์ œ๊ฑฐํ•ด์คŒ
            round.remove(start);

            // ์‚ฌ๋žŒ๋“ค ์ €์žฅํ•ด๋†“์€ arrayList๊ฐ€ ๋น„์—ˆ๋‹ค๋ฉด ์ข…๋ฃŒ
            if(round.isEmpty()){
                break;
            }
        }

        sb.append("<");

        for(int i = 0; i < N; i++){
            if(i == N - 1){
                sb.append(result.get(i) + ">");
            }
            else{
                sb.append(result.get(i) + ", ");
            }
        }

        System.out.println(sb);
    }
}