백준 11866번 문제는 Queue 자료 구조를 이용하여 해결하는 문제이다.
처음에 문제를 이해하는데 어려울 수 있는데 쉽게 생각해보면 원 모양의 탁자에 순서대로 1번 부터 사람이 앉아 있다고 생각해보자.
아래의 예제에서 나온 것과 같이 7명의 사람이 앉아 있는데 3번째 마다 해당하는 사람을 제거 해야한다.
처음에 1번 부터 시작한다면 3번째 순서인 3번 사람이 제거될 것이고 그 다음 6번 사람이 제거된다.
여기서 중요한 것은 3번째 사람을 제거하는 방식은 한 번 제거된 사람은 제외하고 남은 사람들에게만 적용한다는 것을 알고 있으면 풀기 수월한 문제이다.
문제
입력 & 출력
풀이
먼저 Queue 자료구조를 활용해야 되기 때문에 해당 자료구조를 선언해준다.
총 참가하는 사람을 N명으로 생각하고 몇번 째마다 제거되야 하는지 숫자를 K로 받는다.
마지막으로 StringBuilder를 사용하여 "<"를 append 해주는데 출력 예제를 보듯이 앞에는 항상 "<" 으로 시작해야 되기 때문이다.
먼저 인원수 만큼 반복문을 돌면서 큐 자료구조에 데이터를 삽입해준다.
그 다음 while문을 통해 K번째 사람을 제거하는 것을 반복해준다.
K번째 해당하는 사람이 아닐 경우 poll()해서 다시 큐에다 add()해준다.
for문이 끝나고 난 후 poll() 해줘서 나온 사람은 3번째 해당하는 사람으로 StringBuilder에 append 해준다.
위의 과정을 큐의 사이즈가 1이 될때까지 반복해주고 1이 되었을 경우 해당 데이터를 마지막으로 append 해준다.
마지막으로 예제 출력과 같이 출력 형식을 맞추기 위해 ">"를 추가하고 출력해준다.
'알고리즘 공부' 카테고리의 다른 글
백준 실버3 2346번(자바) (0) | 2023.09.07 |
---|---|
백준 실버2 18870(자바) (0) | 2023.09.07 |
백준 실버4 18258번(자바) (0) | 2023.09.04 |
백준 실버4 12789번(자바) (2) | 2023.09.04 |
백준 실버4 28278번(자바) (0) | 2023.09.03 |