BOJ 1158 요세푸스 문제
- 문제 링크
https://www.acmicpc.net/problem/1158
- 문제 해설
ArrayList를 이용하여 풀었다.
제거할 사람의 인덱스가 k만큼 계속 더해진다. 인덱스의 시작이 0이고 처음 제거할 사람의 인덱스는 k-1이므로 인덱스 초기값을 -1로 설정했다.
k씩 더하다가 인덱스가 리스트의 마지막 인덱스를 넘어가면 다시 처음 인덱스 값으로 돌아가서 작동해야한다. 이 과정 처리를 나머지(mod) 연산을 이용하여 해결하였다.
- 코드 보기
package 큐; import java.io.*; import java.util.*; public class BOJ_1158 { static int n, k; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringBuilder sb = new StringBuilder(); StringTokenizer st = new StringTokenizer(br.readLine()); n = Integer.parseInt(st.nextToken()); k = Integer.parseInt(st.nextToken()); ArrayList<Integer> al = new ArrayList<>(); for (int i = 1; i <= n; i++) al.add(i); sb.append("<"); int idx = -1; while (!al.isEmpty()) { idx = (idx + k) % al.size(); sb.append(al.get(idx) + ", "); al.remove(idx); idx--; } sb.setLength(sb.length() - 2); sb.append(">"); bw.write(sb.toString()); br.close(); bw.flush(); bw.close(); } }
'PS > BOJ' 카테고리의 다른 글
BOJ 2609 최대공약수와 최소공배수 [Java] (0) | 2021.07.26 |
---|---|
BOJ 2003 수들의 합 2 [Java] (0) | 2021.07.24 |
BOJ 1406 에디터 [Java] (0) | 2021.07.22 |
BOJ 11656 접미사 배열 [Java] (0) | 2021.07.22 |
BOJ 11655 ROT13 [Java] (0) | 2021.07.21 |