https://www.acmicpc.net/problem/11866
오늘은 요세푸스 문제 11866번을 풀었습니다.
데이터 구조 영역의 문제였기에 큐를 사용할 때의 문제였습니다.
큰 어려움 없이 풀 수 있을 것 같아요!
!
자바에서 큐를 처음 써보는거라 기본적인 방법들을 함께 공부해봤습니다.
First-in-First-out의 구조를 이해해야 한다고 생각합니다.
마치…대기열과 같습니다!
원이니까 빙글빙글 돌면서 k번째 숫자를 빼도록 할게요!
오늘은 문제를 이해하기 위해 열심히 노력했고… 알고리즘을 개발했습니다.
분명히.. 제대로 썼는데 오타가 있어서 확인해보니..
입력한 숫자를 toCharArray로 만들 때 12와 같은 두 자리 숫자를 인식하지 못했습니다.
그거 까먹고..ㅠ 초보프로그래머같아..!
암튼 시간이 더 걸리더라도 스캐너의 nextInt로 번호를 알아냈어요 ㅎㅎ
나머지 알고리즘은 완벽하게 작동하여 2회 반복에 성공했습니다!
아 그리고 출력 방식이 좀 독특했는데 “<" erstellt und es auf diese Weise zum String hinzugefügt, bis die Que-Größe 1 erreicht hat, und es dann mit "3>” 닫고 출력!
코드 작성
하나
2
삼
4
5
6
7
8일
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
수입 java.util.LinkedList;
수입 java.util.Queue;
수입 java.util.스캐너;
공공의 수업 B11866 {
공공의 공전 비어 있는 주로(선() 인수) {
// TODO 자동으로 생성된 메서드 스텁
대기줄<정수> 요셉 = 새로운 LinkedList<>();
스캐너 sc=새로운 스캐너(체계.~ 안에);
내부 N=sc.nextInt();
내부 케이=sc.nextInt();
선 에스=“<";
// 큐에 먼저 푸시
~을 위한(내부 나=하나;나<N+하나;나++) {
요세푸스.에 추가(나);
}
//대기열 크기가 0이 될 때까지 이전 항목 추가 및 삭제를 반복합니다!
~하는 동안(요세푸스.크기()!
=0) { ~을 위한(내부 엘=하나; 엘<케이; 엘++) {
요세푸스.에 추가(요세푸스.피크());
josephus.remove();
}
만약에(요세푸스.크기()!
=하나) { 에스+=josephus.peek()+“, “;
}
다른 {
에스+=josephus.peek()+“>”;
}
josephus.poll();
}
체계.에서.프린트(에스);
}
|
CS |