ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준] 1158 요세푸스 문제 - Java
    알고리즘 문제 풀이 2024. 4. 27. 02:48

    문제 - 요세푸스 문제

    https://www.acmicpc.net/problem/1158

     

     

    문제 설명 

     

    입력

    첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)

     

    출력

    예제와 같이 요세푸스 순열을 출력한다.

     

     

    예제 입력

    7 3

     

    예제 출력

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

     

    접근 방법

     

    - 문제를 보면 숫자를 차례대로 탐색하고 K 번째 숫자를 제거하고 그런식으로 처리를 한다 

    - 여기에서 생각 해볼 자료구조가 링크드리스트나 큐를 생각했다

    - 큐를 생각한 이유는 차례대로 탐색을 하면서 K번째 이전의 값들은 다시 빼고 다시 넣는 형태가 맞는 것 같아서 생각을 했다 그리고 숫자를 차례대로 탐색하는 형식이라 선입선출 형식과 맞는 것 같다

     


    코드 작성

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.LinkedList;
    import java.util.Queue;
    import java.util.StringTokenizer;
    
    public class Main {
        public static void main(String[] args) throws IOException {
    
            try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
                StringTokenizer st = new StringTokenizer(br.readLine());
                int N = Integer.parseInt(st.nextToken());
                int K = Integer.parseInt(st.nextToken());
    
                Queue<Integer> queue = new LinkedList<>();
    
                for (int i = 1; i <= N; i++) {
                    queue.offer(i);
                }
    
                StringBuilder sb = new StringBuilder();
                sb.append("<");
    
                while (queue.size() != 1) {
                    for (int i = 0; i < K - 1; i++) {
                        queue.offer(queue.poll());
                    }
                    sb.append(queue.poll()).append(", ");
                }
                sb.append(queue.poll()).append(">");
                System.out.println(sb);
            }
        }
    }

     


    문제 풀고 느낀점

     

    - 이 문제는 자료구조만 잘 선택해서 데이터 처리를 어떻게 하는냐는 문제이다

    - 어렵지 않은 문제이지만 적절한 자료구조를 선택하지 않으면 로직이 난해 해질수도 있을 것 같다

    '알고리즘 문제 풀이' 카테고리의 다른 글

    [프로그래머스] 구명보트 - Java  (0) 2024.04.29
    [백준] 5430 AC - Java  (0) 2024.04.28
    [백준] 10845 큐 -Java  (1) 2024.04.25
    [백준] 1966 프린터 큐 - Java  (0) 2024.04.25
    [백준] 2161 카드1 - Java  (0) 2024.04.24
Designed by Tistory.