[백준 1242번] 소풍

2025. 6. 1. 17:32·알고리즘
728x90
반응형

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

 

문제 유형

  • 수학

 

문제 난이도

  • Gold 1

 

문제 분석

총 N명 학생에 대하여 순서대로 번호를 부르고, K번을 부른 사람을 퇴장시킨다. 퇴장한 사람 다음 사람이 다시 1번부터 차례대로 숫자를 불러 K번 부르는 사람을 퇴장하도록 반복하고, M번에 해당하는 사람이 퇴장할 때 몇 번째로 퇴장하는지를 구하는 문제이다.

문제에서 N <= 5,000,000라고 주어졌고, 단순하게 생각한다면
시간 복잡도는 O(N*K)로 N번 순회하면서 그때의 K번째 사람을 찾아서 제외한다면 시간 초과가 발생한다.

따라서 시간 복잡도를 줄이는 문제였다.
 
숫자는 1번부터 시작하지만 인덱스를 0번부터 시작한다고 가정했을 때, 처음 M번에 해당하는 사람은 (M-1) 번째에 위치하고, 처음 시작은 1번부터 시작하므로 0번 인덱스부터 시작한다.

K번 부른 사람을 제거하고, 바로 다음 사람부터 다시 시작한다고 했을 때, 사람은 계속 한 명씩 줄어들 것이고,
이전 인덱스 + (K-1) 번째에 해당하는 사람이 다음 번에 제거 될 것이다. 원형으로 사람들이 둘러쌓여 있으므로, 전체 인원수에 대한 mod를 통해 인덱스를 찾아낼 수 있다.

 

전체 코드

package _250601;

import java.util.*;
import java.io.*;
/**
 *packageName    : _250601
 * fileName       : BOJ_G1_1242_소풍
 * author         : moongi
 * date           : 6/1/25
 * description    :
 *
 */
public class BOJ_G1_1242_소풍 {
	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();

		int N = Integer.parseInt(st.nextToken());
		int K = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());

		int pos = M - 1;

		int prev = 0;
		int cnt = 0;

		for (int i = N; i > 0; i--) {

			int idx = (prev + (K - 1)) % i;
			cnt++;

			if (pos == idx) {
				sb.append(cnt);
				System.out.println(sb);
				return;
			}

			if (idx < pos) {
				pos--;
			}

			prev = idx;
		}
	}
}
728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'알고리즘' 카테고리의 다른 글

[PCCP 기출 10번] 공원  (0) 2025.06.02
[PCCP 기출 9번] 지폐 접기  (1) 2025.06.01
[2024 KAKAO INTERN] 도넛과 막대 그래프  (0) 2025.05.30
[2024 KAKAO INTERN] 가장 많이 받은 선물  (0) 2025.05.29
[프로그래머스] 유연근무제  (0) 2025.05.29
'알고리즘' 카테고리의 다른 글
  • [PCCP 기출 10번] 공원
  • [PCCP 기출 9번] 지폐 접기
  • [2024 KAKAO INTERN] 도넛과 막대 그래프
  • [2024 KAKAO INTERN] 가장 많이 받은 선물
moongi
moongi
프로그래밍 관련 공부를 정리하는 블로그
  • moongi
    By_Me
    moongi
  • 전체
    오늘
    어제
    • 공부 (84) N
      • 알고리즘 (49)
        • 기업별 유사 문제 (2)
        • Sudo Code (5)
        • 예외처리 (1)
        • SQL (9)
      • spring boot (6)
        • jpa (0)
        • querydsl (0)
        • MVC pattern (0)
        • setting (2)
      • 취준 (3)
      • CS (9) N
        • 디자인패턴 (2) N
        • 데이터베이스 (4)
        • 네트워크 (3)
        • 운영체제 (0)
  • 인기 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
moongi
[백준 1242번] 소풍
상단으로

티스토리툴바