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 |