https://www.acmicpc.net/problem/10828
💡문제 분석 요약
원을 이루며 앉아있는 N명의 사람 중 K번째 사람을 제거하는 과정을 N번 반복하여 제거되는 순서를 출력하는 문제이다.
- 시간 제한: 2초
- 메모리 제한: 256MB
💡알고리즘 설계
큐를 이용.
- 1~N까지의 숫자를 큐에 offer
- K-1번째 까지 맨 앞 값을 poll 한 다음, 맨 뒤에 offer
- K번째 값을 poll 하여 결과 문자열에 추가
- 2,3번을 N번 반복
💡코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String[] r = br.readLine().split(" ");
int N = Integer.parseInt(r[0]); int K = Integer.parseInt(r[1]);
Queue<Integer> q = new LinkedList<>();
for(int i=1; i<=N; i++){
q.offer(i);
}
sb.append("<");
while(N-- > 0) {
for(int i=0; i<K-1; i++) q.offer(q.poll());
sb.append(q.poll());
if(N!=0) sb.append(", ");
}
sb.append(">");
System.out.println(sb);
}
}
💡시간복잡도
메인 루프의 시간복잡도가 O(N), 루프 내에서 O(K-1)의 시간복잡도.
따라서 전체 시간복잡도는 O(N*K) 이다.
💡 느낀점 or 기억할정보
큐를 이용하면 간단히 해결할 수 있는 문제였지만, 방법을 생각해내는 데 오래걸렸다.
반응형
'알고리즘 문제 > 백준' 카테고리의 다른 글
[백준] 1260번: DFS와 BFS (2) | 2024.07.16 |
---|---|
[백준] 9093번: 단어 뒤집기 (1) | 2024.07.16 |
[백준] 1966번: 프린터 큐 (0) | 2024.07.12 |
[백준] 9012번: 괄호 (0) | 2024.07.11 |
[백준] 10828번: 스택 (0) | 2024.07.10 |
댓글