728x90
자료구조 1 Page 노트 정리 5일차 주제 : LinkedList

백준 1158번 : 요세푸스 문제 풀이

K번째 사람을 제거해야 하는데, index는 0부터 시작이니 K - 1 사람을 제거하는 문제다.예제에서는 K = 3 이니 index가 2인 사람을 계속해서 지워가면 된다.제거할 때마다 list의 size가 계속해서 줄어들기 때문에 index가 2인 사람이 존재하지 않을 수 있다.따라서 변수를 하나 생성하고 (int idx = 0;)idx + K - 1을 list.size()로 나눈 나머지를 이용해 삭제할 사람의 위치를 구해야 한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) throws IOException {
// 입력을 위한 BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 출력을 위한 StringBuilder
StringBuilder sb = new StringBuilder();
// Stream을 이용한 배열 생성
int[] inputData = Arrays
.stream(br.readLine().split(" "))
.mapToInt(Integer::parseInt)
.toArray();
int N = inputData[0];
int K = inputData[1];
// Stream을 이용한 LinkedList 생성
LinkedList<Integer> ll = IntStream
.range(1, N + 1)
.boxed()
.collect(Collectors.toCollection(LinkedList::new));
int idx = 0;
sb.append("<");
while (!ll.isEmpty()) {
idx = (idx + K - 1) % ll.size();
if (ll.size() != 1) {
sb.append(ll.remove(idx)).append(", ");
} else {
sb.append(ll.remove(idx));
}
}
sb.append(">");
System.out.println(sb);
br.close();
}
}728x90
'📌Zero-base' 카테고리의 다른 글
| 앞으로의 백엔드 개발자가 되기 위한 공부 계획 (feat. 백엔드 공부법) 제로베이스 백엔드스쿨 (0) | 2024.04.22 |
|---|---|
| 백준 24174번 힙 정렬2 제로베이스 자료구조 마지막 주제 : Heap (1) | 2024.04.20 |
| 백준 26008번 해시 해킹 제로베이스 자료구조 4일차 주제 : HashMap (0) | 2024.04.18 |
| 백준 10818번 최소, 최대 제로베이스 자료구조 3일차 주제 : Array (1) | 2024.04.17 |
| 백준 1021번 회전하는 큐 제로베이스 자료구조 2일차 주체 : Queue (0) | 2024.04.16 |