์šฐ๊ทœ์ด์ธ์šฐ์œค
Eager To Learn ๐ŸŒŒ
์šฐ๊ทœ์ด์ธ์šฐ์œค
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿก ํ™ˆ
  • ๐Ÿš€ ๊นƒํ—ˆ๋ธŒ
  • โ›… ํƒœ๊ทธ ํด๋ผ์šฐ๋“œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (217)
    • ๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm ๊ธฐ๋ฒ• (1)
      • ๋ฐ”ํ‚น๋… (21)
    • ๋ธ”๋กœ๊ทธ ์ด์‚ฌ (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • ์ž๋ฃŒ๊ตฌ์กฐ (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • ๊ฐœ๋ฐœ์„œ์  (15)
      • ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ (1)
      • ์˜ค๋ธŒ์ ํŠธ - ์กฐ์˜ํ˜ธ (7)
      • ์นœ์ ˆํ•œ SQL ํŠœ๋‹ (7)
    • ํšŒ๊ณ  (2)
hELLO ยท Designed By ์ •์ƒ์šฐ.
์šฐ๊ทœ์ด์ธ์šฐ์œค

Eager To Learn ๐ŸŒŒ

๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS/๋ฐ”ํ‚น๋…

[JAVA] ๋ฐฑ์ค€ 23326๋ฒˆ ใ€G3.ํ™์ต ํˆฌ์–ด๋ฆฌ์ŠคํŠธใ€‘

2023. 9. 5. 15:21

๋ฌธ์ œ

 

23326๋ฒˆ: ํ™์ต ํˆฌ์–ด๋ฆฌ์ŠคํŠธ

๋„ํ˜„์ด๋Š” ํ™์ต ํˆฌ์–ด๋ฆฌ์ŠคํŠธ๊ฐ€ ๋˜์–ด ํ™์ต๋Œ€ํ•™๊ต๋ฅผ ๊ฒฌํ•™ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ํ™์ต๋Œ€ํ•™๊ต๋Š” $N$๊ฐœ์˜ ๊ตฌ์—ญ์ด ์›ํ˜•์œผ๋กœ ๋ฐฐ์น˜๋œ ๋ชจ์Šต์ด๋‹ค. $1$๋ฒˆ ๊ตฌ์—ญ์—์„œ ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ๊ฐ $2$๋ฒˆ, ... , $N$๋ฒˆ ๊ตฌ์—ญ์ด ์กด์žฌํ•˜๊ณ ,

www.acmicpc.net


ํ’€์ด

1๏ธโƒฃ treeSet์„ ์ด์šฉํ•œ ํ’€์ด

๐Ÿ’ก ๋– ์˜ค๋ฅธ Idea

๊ตฌ์—ญ์˜ ๊ฐœ์ˆ˜๊ฐ€ 500000 ์ด๊ณ  ์ฟผ๋ฆฌ์˜ ๊ฐœ์ˆ˜๊ฐ€ 100000 ์ด๋ฏ€๋กœ

์„ ํ˜•ํƒ์ƒ‰์„ ํ•˜๊ฒŒ๋˜๋ฉด ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ์ตœ๋Œ€ 500000*100000 ์œผ๋กœ ์ ˆ๋Œ€ ํ†ต๊ณผ ๋ชปํ•˜๋Š” ์ˆ˜์น˜๊ฐ€ ๋‚˜์˜จ๋‹ค.

๋”ฐ๋ผ์„œ, treeSet์„ ์ด์šฉํ•œ ํ’€์ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

treeSet์˜ ๋Œ€๋ถ€๋ถ„์˜ ๋ฉ”์„œ๋“œ๋Š” log(N) ์˜ ์„ฑ๋Šฅ์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.



treeSet์— ๋ช…์†Œ ๋ฒˆํ˜ธ๋ฅผ ๊ฐฑ์‹ ํ•˜๊ณ , ์ฟผ๋ฆฌ๋ฌธ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ ๋„ํ˜„์ด์˜ ์œ„์น˜๋„ ๊ฐฑ์‹ ํ•œ๋‹ค.

๋งŒ์•ฝ ๋„ํ˜„์ด์™€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์œ„์น˜์˜ ๋ช…์†Œ ๋ฒˆํ˜ธ๋ฅผ ์ฐพ๋Š” ๊ณผ์ •์€,

์‹œ๊ณ„ ๋ฐฉํ–ฅ ๊ธฐ์ค€ ์ตœ์†Œ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ, treeSet ์•ˆ์— ๋„ํ˜„์ด์˜ ์œ„์น˜๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๋ช…์†Œ๋ฅผ ๋จผ์ € ํƒ์ƒ‰ํ•ด๋ณธ๋‹ค. (ceiling ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ)

๋งŒ์•ฝ ๋„ํ˜„์ด๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๋ช…์†Œ๊ฐ€ ์—†๋‹ค๋ฉด treeSet์˜ ์ œ์ผ ์•ž ์›์†Œ๊ฐ€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ช…์†Œ๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.

๋„ํ˜„์ด๋ณด๋‹ค ๋ฒˆํ˜ธ ์ƒ ์•ž์— ์žˆ๋Š” ๋ช…์†Œ์™€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ• ๋•Œ์—๋Š” ( N - dohyun + ๋ช…์†Œ) ๋กœ ๊ตฌํ•ด์ค€๋‹ค.

 

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] input = br.readLine().split(" ");
        int N = Integer.parseInt(input[0]), Q = Integer.parseInt(input[1]);

        input = br.readLine().split(" ");
        
        // ๋ช…์†Œ ๋“ฑ๋ก
        TreeSet<Integer> places = new TreeSet<>();
        for (int i = 0; i < N; i++) {
            if (input[i].equals("1")) {
                places.add(i + 1);
            }
        }

        int doHyun = 1;
        StringBuilder ans = new StringBuilder();
        
        // ์ฟผ๋ฆฌ ์ˆ˜ํ–‰
        while (Q-- > 0) {
            input = br.readLine().split(" ");
            if (input[0].equals("3")) {
                Integer ceiling = places.ceiling(doHyun);

                int distance = 0;
                
                // ๋„ํ˜„์ด ์œ„์น˜ ๋’ค์— ๋ช…์†Œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ (rotate ํ•„์š”)
                if (ceiling == null) {
                    
                    // ๋ช…์†Œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ
                    if (!places.isEmpty()) {
                        ceiling = places.first();
                        distance = N - doHyun + ceiling;
                    // ๋ช…์†Œ๊ฐ€ ์•„์˜ˆ ์—†๋Š” ๊ฒฝ์šฐ    
                    } else {
                        distance = -1;
                    }
                } else {
                    // ๋„ํ˜„์ด ๋’ค์— ๋ช…์†Œ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ
                    distance = ceiling - doHyun;
                }

                ans.append(distance + "\n");


            } else {
                int num = Integer.parseInt(input[1]);

                // ๋ช…์†Œ ์ถ”๊ฐ€ ํ˜น์€ ๋ณ€๊ฒฝ
                if (input[0].equals("1")) {
                    if (places.contains(num)) {
                        places.remove(num);
                    } else {
                        places.add(num);
                    }
                // ๋„ํ˜„์ด ์ด๋™    
                } else {
                    doHyun = (doHyun + num) % N;
                    if (doHyun == 0) {
                        doHyun = N;
                    }
                }
            }
        }

        System.out.println(ans);

    }
}

๐Ÿ“– ํšŒ๊ณ 

์ด๋ฒˆ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ, treeSet์˜ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์ž˜ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

ํŠนํžˆ, ํŠน์ • ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฐ’์„ ์ฐพ๋Š” ceiling ๋ฉ”์„œ๋“œ์™€

 

ํŠน์ • ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฐ’์„ ์ฐพ๋Š” floor ๋ฉ”์„œ๋“œ๋ฅผ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

    '๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS/๋ฐ”ํ‚น๋…' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [JAVA] ๋ฐฑ์ค€ 1655๋ฒˆ ใ€G2.๊ฐ€์šด๋ฐ๋ฅผ ๋งํ•ด์š”ใ€‘
    • [JAVA] ๋ฐฑ์ค€ 1715๋ฒˆ ใ€G4.์นด๋“œ ์ •๋ ฌํ•˜๊ธฐใ€‘
    • [JAVA] ๋ฐฑ์ค€ 22939๋ฒˆ ใ€G4.๋ฌธ์ œ ์ถ”์ฒœ ์‹œ์Šคํ…œ Version 1ใ€‘
    • [JAVA] ๋ฐฑ์ค€ 20166๋ฒˆ ใ€G4.๋ฌธ์ž์—ด ์ง€์˜ฅ์— ๋น ์ง„ ํ˜ธ์„ใ€‘
    ์šฐ๊ทœ์ด์ธ์šฐ์œค
    ์šฐ๊ทœ์ด์ธ์šฐ์œค
    ๊ฐœ๋ฐœ์ž ๊ฟˆ๋‚˜๋ฌด

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”