Hayden's Archive
[알고리즘] 백준 - 1158번 : 요세푸스 문제 본문
알고리즘 문제 출처 : https://www.acmicpc.net/problem/1158
내가 작성한 코드
너무 어렵게 생각했다. 큐 하나에서 넣고 빼고를 둘 다 한다는 생각을 못해서 큐 2개를 가지고 씨름을 했다. 또 증감 연산자를 써서 m번째를 추출하고 또 해당 변수를 0으로 초기화하고 또 증감연산자를 쓰고 이렇게 하다 보니 시간 초과가 계속 나왔다. 이럴 땐 이중 for문을 돌리는 게 더 빠르다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.LinkedList;
import java.util.Queue;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
Queue<Integer> queue = new LinkedList<>();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
String[] number = br.readLine().split(" ");
int n = Integer.parseInt(number[0]);
int m = Integer.parseInt(number[1]);
sb.append("<");
for(int i=1; i<=n; i++) {
queue.offer(i);
}
for(int i=0; i<n-1; i++) {//마지막 하나를 남기기 위해 n-1번 반복
for(int j=0; j<m-1; j++) {//m-1번까지는 빼서 추가
queue.offer(queue.poll());
}
sb.append(queue.poll()+", ");//m번째 추출
}
sb.append(queue.poll()+">");
bw.write(sb.toString());
bw.flush();
bw.close();
}
}