카테고리 없음
Baekjoon_1158_요세푸스 문제
Treejin
2021. 3. 5. 19:38
반응형
문제 설명
1158번: 요세푸스 문제
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)
www.acmicpc.net
- 양의 정수 N과 K가 주어진다.
- 1번부터 N번까지의 사람이 원 모양을 그리며 있다.
- 순서대로 K번째 사람을 제거한 후, 거기서부터 또 K번째 사람을 제거하면서 전부 제거될 때까지 수행한다.
=> 제거된 사람의 번호를 순서대로 출력한다.
문제 풀이
ArrayList를 이용해 구현했다.
나머지 연산을 이용해 K번째 사람의 index를 구하고, 출력문에 index를 추가하면서 리스트에서 제거한다.
그리고 위치 값을 1씩 빼면서 연산을 이어갔다.
문제 풀이 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class _1158_요세푸스문제 {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(in.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
ArrayList<Integer> list = new ArrayList<>();
for(int i = 1; i<=N;++i) { //사람 배치
list.add(i);
}
StringBuilder sb = new StringBuilder();
sb.append("<");
int value = -1;
for(int i = 0; i<N;++i) {
value = (value+K)%(N-i); //K번째 사람 찾기
sb.append(list.get(value)+", "); //출력
list.remove(value); //제거
value--; //위치 값 빼기
}
sb.setLength(sb.length()-2);
sb.append(">");
System.out.println(sb);
}
}
반응형