[Java] 백준(Baekjoon) 1158. 요세푸스 문제
2024. 1. 24. 17:56ㆍAlgorithm/자료구조
https://www.acmicpc.net/problem/1158
1158번: 요세푸스 문제
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)
www.acmicpc.net
풀이
인덱스 지정하여 삭제 후, 인덱스 재조정 필요
=> ArrayList
1 2 3 4 5 6 7 //3(idx=2)
1 2 4 5 6 7 //6(idx=4) idx(4)+= idx(2)+(k(3)-1)
1 2 4 5 7 //2(idx=1)
idx+=idx+(k-1)을 하면 4+2= 6
-> 1로 만들려면 현재 배열의 사이즈로 나눈 나머지로 인덱스를 변경
package dataStructure;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class Ex1158 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s= br.readLine();
StringTokenizer st= new StringTokenizer(s);
int n= Integer.parseInt(st.nextToken());
int k= Integer.parseInt(st.nextToken());
List<Integer> arr= new ArrayList<Integer>();
//리스트 생성
for(int i=1;i<n+1;i++) {
arr.add(i);
}
StringBuilder sb = new StringBuilder();
sb.append("<");
int idx= k-1;
boolean on= false;
while(!arr.isEmpty()) {
if(on) {
sb.append(", ");
}
sb.append(arr.get(idx));
arr.remove(idx);
if(!arr.isEmpty()) {
idx= (idx+(k-1))%(arr.size());
}
on= true;
}
sb.append(">");
System.out.println(sb.toString());
}
}
'Algorithm > 자료구조' 카테고리의 다른 글
[Java] 백준(Baekjoon) 11279. 최대 힙 (0) | 2024.01.26 |
---|---|
[Java] 백준(Baekjoon) 1927. 최소 힙 (0) | 2024.01.25 |
[Java] 백준(Baekjoon) 1764. 듣보잡 (1) | 2024.01.25 |
[Java] 백준(Baekjoon) 10845. 큐 (0) | 2024.01.24 |
Data Distructure(자료구조) (1) | 2024.01.24 |