Algorithm/ν…Œμ½”ν…Œμ½”1.5(2025)

[ν…Œμ½”ν…Œμ½”1.5 4-07] μš”μ„Έν‘ΈμŠ€ 문제

binaryJournalist 2025. 2. 21. 14:08
λ°˜μ‘ν˜•
πŸ’‘ν…Œμ½”ν…Œμ½” μ‹œμ¦Œ 1.5 4회 λͺ¨μž„ on-site 문제 ν’€μ΄μž…λ‹ˆλ‹€. (2025.02.15)

 

문제

좜처: λ°±μ€€ - μš”μ„Έν‘ΈμŠ€ 문제

 

λ‚΄μš©

 

μš”μ„Έν‘ΈμŠ€ λ¬Έμ œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

1λ²ˆλΆ€ν„° Nλ²ˆκΉŒμ§€ Nλͺ…μ˜ μ‚¬λžŒμ΄ 원을 μ΄λ£¨λ©΄μ„œ μ•‰μ•„μžˆκ³ , μ–‘μ˜ μ •μˆ˜ K(≤ N)κ°€ 주어진닀. 이제 μˆœμ„œλŒ€λ‘œ K번째 μ‚¬λžŒμ„ μ œκ±°ν•œλ‹€. ν•œ μ‚¬λžŒμ΄ 제거되면 남은 μ‚¬λžŒλ“€λ‘œ 이루어진 원을 따라 이 과정을 계속해 λ‚˜κ°„λ‹€. 이 과정은 Nλͺ…μ˜ μ‚¬λžŒμ΄ λͺ¨λ‘ 제거될 λ•ŒκΉŒμ§€ κ³„μ†λœλ‹€. μ›μ—μ„œ μ‚¬λžŒλ“€μ΄ μ œκ±°λ˜λŠ” μˆœμ„œλ₯Ό (N, K)-μš”μ„Έν‘ΈμŠ€ μˆœμ—΄μ΄λΌκ³  ν•œλ‹€. 예λ₯Ό λ“€μ–΄ (7, 3)-μš”μ„Έν‘ΈμŠ€ μˆœμ—΄μ€ <3, 6, 2, 7, 5, 1, 4>이닀.

Nκ³Ό Kκ°€ 주어지면 (N, K)-μš”μ„Έν‘ΈμŠ€ μˆœμ—΄μ„ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

κΈ°λ‘ν•˜κΈ°

πŸ’‘ μ–΄λ””κΉŒμ§€ μƒκ°ν•΄λ΄€λŠ”μ§€ λ‹¨κ³„μ μœΌλ‘œ κΈ°λ‘ν•΄λ΄…λ‹ˆλ‹€.

μ–΄λ–€ μ•Œκ³ λ¦¬μ¦˜μ„ μ μš©ν•˜λ € ν–ˆλ‚˜μš”?

μ›ν˜• 큐λ₯Ό μ μš©ν•œλ‹€.

적용 κ·Όκ±°λŠ” 무엇인가?

"원을 μ΄λ£¨λ©΄μ„œ μ•‰μ•„μžˆλ‹€."

문제 풀이 κ³Όμ •μ—μ„œ ν•΄λ‹Ή μ•Œκ³ λ¦¬μ¦˜μ„ μ–΄λ–»κ²Œ μ½”λ“œλ‘œ κ΅¬ν˜„ν•˜λ € ν–ˆλ‚˜μš”?

λͺ¨λ“ˆλŸ¬ 연산은 μ‚¬μš©ν•˜μ§€ μ•Šκ³  deque, enqueλ₯Ό ν™œμš©ν•œλ‹€.

 

풀이

풀이 μ‹œκ°„

μ‹œμž‘ μ‹œκ° μ’…λ£Œ μ‹œκ° 총 μ†Œμš” μ‹œκ°„
    15λΆ„

 

문제 뢄석

μ œμ•½ 사항 νŒŒμ•… & μž…λ ₯κ°’ 뢄석

πŸ’‘ μž…λ ₯값을 λΆ„μ„ν•˜λ©΄ λ¬Έμ œμ—μ„œ μš”κ΅¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„ λ³΅μž‘λ„λ₯Ό κ°„μ ‘μ μœΌλ‘œ νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μž…λ ₯

첫째 쀄에 Nκ³Ό Kκ°€ 빈 칸을 사이에 두고 μˆœμ„œλŒ€λ‘œ 주어진닀. (1 ≤ K ≤ N ≤ 5,000)

좜λ ₯

μ˜ˆμ œμ™€ 같이 μš”μ„Έν‘ΈμŠ€ μˆœμ—΄μ„ 좜λ ₯ν•œλ‹€.

 

예제 μž…λ ₯1
7 3
예제 좜λ ₯1
<3, 6, 2, 7, 5, 1, 4>

 

 

μ˜μ‚¬ μ½”λ“œ μž‘μ„±

πŸ’‘ μ˜μ‚¬ μ½”λ“œλŠ” λ™μž‘ μ€‘μ‹¬μœΌλ‘œ μž‘μ„±ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.

πŸ’‘ μ˜μ‚¬ μ½”λ“œλŠ” 문제 ν•΄κ²° μˆœμ„œλ‘œ μž‘μ„±ν•©λ‹ˆλ‹€.

πŸ’‘ μ˜μ‚¬ μ½”λ“œλ₯Ό μΆ©λΆ„νžˆ ν…ŒμŠ€νŠΈν•΄λ΄…λ‹ˆλ‹€.

solution(n, k) {
    // 1234567 -> 456712 -> 71245 -> 4571 -> 145
    // enque, deque ν™œμš©
    // k번째 μˆ˜λŠ” deque만 κ·Έ μ™ΈλŠ” deque ν›„ enque
}

 

 

κ΅¬ν˜„

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(bufferedReader.readLine(), " ");
        StringBuilder answer = new StringBuilder("<");

        int n = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());

        ArrayDeque<Integer> queue = new ArrayDeque<>();
        for (int i = 0; i < n; i++) {
            queue.add(i + 1);
        }

        // 1234567 -> 456712 -> 71245 -> 4571 -> 145
        int count = 1;
        int front;
        while (!queue.isEmpty()) {
            front = queue.poll();
            if (count == k) {
                answer.append(front);
                if (!queue.isEmpty()) {
                    answer.append(", ");
                }
                count = 1;
                continue;
            }
            queue.add(front);
            count++;
        }

        answer.append(">");
        System.out.println(answer);
    }
}
λ°˜μ‘ν˜•