[Java] 백준 1158번 - 요세푸스 문제

2024. 4. 23. 13:28·백준

문제 링크 : 백준 1158번 - 요세푸스 문제

 

이런 문제를 마주쳤을 때 가장 먼저 할 것은 어떤 자료구조를 사용할 것이느냐이다.

크게 스택과 큐 중 하나를 고를 수 있는데, 이 문제에서는 큐(FIFO)를 사용하는 것이 적절하다.

 

자바에서는 ArrayDeque를 사용하면 되고, N명의 사람을 삽입해준다.

    ArrayDeque<Integer> list = new ArrayDeque<>();
    for (int i = 1; i <= N; i++) {
        list.add(i);
    }

 

 

출력을 위한 StringBuilder를 만들어주고, 사람이 빌 때까지 반복한다.

중요한 것은 사람이 K명보다 적어지더라도 K번째 사람이 사라져야 하기 때문에, 다음과 같이 K-1명 만큼 리스트에서 제거해 다시 넣어준 후 K번째 사람을 제거해주면 된다. 이러면 원형으로 계산을 할 수 있다. FIFO의 자료구조를 생각해보면, 제일 먼저 들어간 것이 제일 먼저 나오므로 제일 앞에 있는 사람이 나와 제일 뒤로 갈 것이기때문에 원형으로 자료의 순서가 유지된다.

StringBuilder sb = new StringBuilder("<");
while (!list.isEmpty()) {
    for (int i = 0; i < K - 1; i++) {
        list.add(list.remove());
    }
    sb.append(list.remove());
    sb.append(!list.isEmpty() ? ", " : "");
}
sb.append(">");
System.out.println(sb);

 

'백준' 카테고리의 다른 글

[Java] 1788번 - 피보나치 수의 확장  (0) 2024.04.23
[Java] 백준 4375번 - 1  (0) 2024.04.23
[Java] 백준 17626번 - Four Squares  (0) 2024.04.23
[Java] 백준 9375번 - 패션왕 김해빈  (0) 2024.04.23
[Java] 백준 2630번 - 색종이 만들기  (0) 2024.04.23
'백준' 카테고리의 다른 글
  • [Java] 1788번 - 피보나치 수의 확장
  • [Java] 백준 4375번 - 1
  • [Java] 백준 17626번 - Four Squares
  • [Java] 백준 9375번 - 패션왕 김해빈
효재감자
효재감자
  • 효재감자
    효재감자의 우당탕탕 개발일지
    효재감자
  • 전체
    오늘
    어제
    • 분류 전체보기 (73)
      • 아무거나 (3)
      • 백준 (44)
      • 알고리즘 (4)
      • 자바 (1)
      • 리눅스(우분투) 및 클라우드 (2)
      • 스프링 (14)
        • 스프링 시큐리티 인 액션 (도서 정리) (5)
      • 플러터(Dart) (0)
  • 블로그 메뉴

    • 홈
    • Github
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
효재감자
[Java] 백준 1158번 - 요세푸스 문제
상단으로

티스토리툴바