본문 바로가기

Coding Test/Problem Number

[Java] 요세푸스 문제 [1158번]

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

  • 예제 입력1
7 3
  • 예제 출력1
<3, 6, 2, 7, 5, 1, 4>

  • 문제 접근
    • 1 ~ N까지 원을 그리고 K번째마다 빼서 별도 저장
    • 원이 모두 사라질 때까지 반복
  • 문제 해결
    • 1 ~ N번까지 Queue에 추가하여 Queue 셋팅
    • K-1번을 빼고 다시 Queue에 추가
    • K번은 빼고 StringBuilder에 추가
  • 기존 풀이 [메모리 : 294824 KB / 시간 : 576 ms]
public static void main(String[] args) throws Exception{
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringTokenizer st = new StringTokenizer(br.readLine());
    StringBuilder sb = new StringBuilder();
    Queue<Integer> queue = new LinkedList<>();

    int N = Integer.parseInt(st.nextToken());
    int K = Integer.parseInt(st.nextToken());
    for(int i = 1; i <= N; i++) queue.offer(i);
    sb.append("<");

    while(!queue.isEmpty()){
        for(int i = 0; i < K; i++){
            int value = queue.remove();
            if(i == K-1) sb.append(value).append(",").append(" ");
            else queue.add(value);
        }
    }
    sb.deleteCharAt(sb.length()-1).deleteCharAt(sb.length()-1).append(">");
    System.out.println(sb);
}

 

'Coding Test > Problem Number' 카테고리의 다른 글

[Java] 최소 힙 [1927번]  (0) 2024.07.25
[Java] 센티와 마법의 뿅망치 [19638번]  (0) 2024.07.25
[Java] 프린터 큐 [1966번]  (0) 2024.07.24
[Java] 에디터 [1406번]  (0) 2024.07.24
[Java] 스택 [10828번]  (0) 2024.07.24