๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿš€ Algorithm/BOJ

[๋ฐฑ์ค€] ์š”์„ธํ‘ธ์Šค ๋ฌธ์ œ 0 (JAVA)

11866๋ฒˆ: ์š”์„ธํ‘ธ์Šค ๋ฌธ์ œ 0

๋ฌธ์ œ


์š”์„ธํ‘ธ์Šค ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

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

N๊ณผ K๊ฐ€ ์ฃผ์–ด์ง€๋ฉด (N, K)-์š”์„ธํ‘ธ์Šค ์ˆœ์—ด์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N๊ณผ K๊ฐ€ ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ K ≤ N ≤ 1,000)

์ถœ๋ ฅ

์˜ˆ์ œ์™€ ๊ฐ™์ด ์š”์„ธํ‘ธ์Šค ์ˆœ์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ

7 3 // 7: N(์‚ฌ๋žŒ ์ˆ˜), 3: K(์ œ๊ฑฐํ•  ์ˆœ์„œ)

์˜ˆ์ œ ์ถœ๋ ฅ

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

 

 

K=3์ด๋ฏ€๋กœ 3๋ฒˆ์งธ ์‚ฌ๋žŒ ์ œ๊ฑฐ → 3๋ฒˆ์งธ ์‚ฌ๋žŒ์—์„œ๋ถ€ํ„ฐ ๊ทธ๋‹ค์Œ 3๋ฒˆ์งธ์— ์žˆ๋Š” ์‚ฌ๋žŒ์ธ 6 ์ œ๊ฑฐ → 6์—์„œ 3๋ฒˆ์งธ์— ์žˆ๋Š” ์‚ฌ๋žŒ์ธ 2 ์ œ๊ฑฐ → 2์—์„œ 3๋ฒˆ์งธ์— ์žˆ๋Š” ์‚ฌ๋žŒ์ธ 7 ์ œ๊ฑฐ (์ด๋ฏธ ์ œ๊ฑฐ๋œ ์‚ฌ๋žŒ์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ์ˆœ์„œ๋ฅผ ์„ผ๋‹ค.) → … ๋ฐ˜๋ณต

 

 

๋ฌธ์ œ ์ •๋ฆฌ


์ „์ฒด ์ธ์›(N)๊ณผ ์–‘์˜ ์ •์ˆ˜(K)๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ํ•œ ์‚ฌ๋žŒ๋งŒ ๋‚จ์„ ๋•Œ๊นŒ์ง€ ์‚ฌ๋žŒ๋“ค์„ ์›์—์„œ ์ œ๊ฑฐํ•˜๋Š” ์ˆœ์„œ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ

 

์ž…๋ ฅ

๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ ๋‘ ๊ฐœ์˜ ์ •์ˆ˜

  • N : ์ฒซ ๋ฒˆ์งธ ์ •์ˆ˜, ์ด ์ธ์›
  • K : ๋‘ ๋ฒˆ์งธ ์ •์ˆ˜, ์–‘์˜ ์ •์ˆ˜, ์ œ๊ฑฐํ•  ์ˆœ์„œ

์ถœ๋ ฅ

<> ์•ˆ์— ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋œ ์ผ๋ จ์˜ ์ˆซ์ž๋กœ ์š”์„ธํ‘ธ์Šค ์ˆœ์—ด ์ธ์‡„

 

์š”๊ตฌ ์‚ฌํ•ญ

  • ์ž…๋ ฅ ์ •์ˆ˜ N ๋ฐ K ์ฝ๊ธฐ
  • 1์—์„œ N๊นŒ์ง€ ๋ ˆ์ด๋ธ”์ด ์ง€์ •๋œ N๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์žˆ๋Š” ์ˆœํ™˜ ์—ฐ๊ฒฐ ๋ชฉ๋ก ๋งŒ๋“ค๊ธฐ
  • ๋ชฉ๋ก์„ ๋ฐ˜๋ณตํ•˜๊ณ  ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋งŒ ๋‚จ์„ ๋•Œ๊นŒ์ง€ ๋ชจ๋“  K๋ฒˆ์งธ ๋…ธ๋“œ ์ œ๊ฑฐ
  • ๋…ธ๋“œ๊ฐ€ ์ œ๊ฑฐ๋œ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅ

 

 

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•


  1. ์ž…๋ ฅ์—์„œ N๊ณผ K ์ฝ๊ธฐ
  2. 1๋ถ€ํ„ฐ N๊นŒ์ง€ ๋ ˆ์ด๋ธ”์ด ์ง€์ •๋œ N๊ฐœ์˜ ๋…ธ๋“œ๋กœ ์ˆœํ™˜ ๋งํฌ ๋ฆฌ์ŠคํŠธ ์ดˆ๊ธฐํ™”
  3. ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ๋…ธ๋“œ 1๋กœ ์„ค์ •
  4. While ๋ชฉ๋ก์— ๋…ธ๋“œ๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ ์žˆ๋Š” ๋™์•ˆ: a. ๋ชฉ๋ก์„ ๋ฐ˜๋ณตํ•˜์—ฌ K๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ์ฐพ๋Š”๋‹ค. b. K๋ฒˆ์งธ ๋…ธ๋“œ ์ œ๊ฑฐ c. ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•œ ๋…ธ๋“œ๋ฅผ ๋ฐ”๋กœ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์„ค์ •
  5. print ์ œ๊ฑฐ๋œ ์ˆœ์„œ๋Œ€๋กœ ๋…ธ๋“œ ์ˆœ์„œ ์ถœ๋ ฅ

→ ArrayList๋ฅผ ์ด์šฉํ•˜์—ฌ ์›ํ˜• ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„

 

์ฝ”๋“œ

import java.util.*;

public class Main {
    public static void main(String[] args) {
				// N ๋ฐ K์— ๋Œ€ํ•œ ์ž…๋ ฅ ๊ฐ’ ์ฝ๊ธฐ
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(); // ์ธ์› ์ˆ˜
        int k = sc.nextInt(); // ์ œ๊ฑฐ๋  ์‚ฌ๋žŒ์˜ ๋ฒˆํ˜ธ

				// ์› ์•ˆ์— ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๋ชฉ๋ก ์ดˆ๊ธฐํ™”
        ArrayList<Integer> list = new ArrayList<>(); // ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
        for (int i = 1; i <= n; i++) {
            list.add(i); // ๋ฆฌ์ŠคํŠธ์— ์ธ์› ์ถ”๊ฐ€
        }
				
				// ์ถœ๋ ฅํ•  ๋•Œ < ํ•„์š”
        StringBuilder sb = new StringBuilder();
        sb.append("<");

				// ์›์˜ ์‹œ์ž‘ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜ '์ธ๋ฑ์Šค'๋ฅผ 0์œผ๋กœ ์„ค์ •
        int idx = 0; // ๋ฃจํ”„ ์•ˆ์—์„œ๋Š” ์ด์ „์— ๋งˆ์ง€๋ง‰์œผ๋กœ ์ œ๊ฑฐ๋œ ์‚ฌ๋žŒ์˜ ์ธ๋ฑ์Šค๋ฅผ ๋‚˜ํƒ€๋ƒ„

				// ์‚ฌ๋žŒ ๋ชฉ๋ก์ด ๋น„์›Œ์งˆ ๋•Œ๊นŒ์ง€ ๋ฐ˜
        while (list.size() > 1) { // ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ๊ฐ€ 1๋ณด๋‹ค ํฐ ๋™์•ˆ ๋ฐ˜๋ณต
            **idx = (idx + k - 1) % list.size();** // K๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ œ๊ฑฐ๋  ์‚ฌ๋žŒ์˜ ์ธ๋ฑ์Šค ๊ณ„์‚ฐ
            sb.append(list.remove(idx)).append(", "); // ํ•ด๋‹น ์ธ๋ฑ์Šค์˜ ์‚ฌ๋žŒ์„ ์ œ๊ฑฐํ•˜๊ณ  ์ถœ๋ ฅ ๋ฌธ์ž์—ด์— ์ถ”๊ฐ€
        }
        sb.append(list.get(0)).append(">"); // ๋งˆ์ง€๋ง‰์œผ๋กœ ๋‚จ์€ ์‚ฌ๋žŒ์„ ์ถœ๋ ฅ ๋ฌธ์ž์—ด์— ์ถ”๊ฐ€
        System.out.println(sb); // ๊ฒฐ๊ณผ ์ถœ๋ ฅ
    }
}
  • idx = (idx + k - 1) % list.size() : ์ œ๊ฑฐ๋  ์‚ฌ๋žŒ์˜ ์ธ๋ฑ์Šค ๊ณ„์‚ฐ
    • idx : ๋ฃจํ”„ ์•ˆ์—์„œ๋Š” ์ด์ „์— ๋งˆ์ง€๋ง‰์œผ๋กœ ์ œ๊ฑฐ๋œ ์‚ฌ๋žŒ์˜ ์ธ๋ฑ์Šค๋ฅผ ๋‚˜ํƒ€๋ƒ„
    • k : ๋ˆ„๊ตฌ๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์ „์— ๊ฑด๋„ˆ๋›ธ ์‚ฌ๋žŒ์˜ ์ˆ˜
    • ์ œ๊ฑฐํ•  ๋‹ค์Œ ์‚ฌ๋žŒ์„ ์ฐพ์œผ๋ ค๋ฉด k ์‚ฌ๋žŒ์„ ๊ฑด๋„ˆ๋›ฐ์–ด์•ผ ํ•˜๋ฏ€๋กœ ํ˜„์žฌ ์ธ๋ฑ์Šค idx์— k-1์„ ์ถ”๊ฐ€ํ•˜์ง€๋งŒ ์ด๋ฏธ idx๋ฒˆ์งธ ์‚ฌ๋žŒ์—์„œ ์‹œ์ž‘ํ•˜๊ณ  ์žˆ๋‹ค.

'๐Ÿš€ Algorithm > BOJ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐฑ์ค€] 2828 ์‚ฌ๊ณผ ๋‹ด๊ธฐ ๊ฒŒ์ž„(JAVA)  (0) 2023.04.02
[๋ฐฑ์ค€] 2178 ๋ฏธ๋กœ ํƒ์ƒ‰(JAVA)  (0) 2023.03.27
[๋ฐฑ์ค€] 1926 ๊ทธ๋ฆผ(JAVA)  (0) 2023.03.21
8958  (0) 2021.08.18
1110  (0) 2021.08.16