๋ฌธ์
๋ฌธ์ ๋งํฌ https://www.acmicpc.net/problem/11866
- 1๋ฒ๋ถํฐ N๋ฒ๊น์ง N๋ช ์ ์ฌ๋์ด ์์ ์ด๋ฃจ๋ฉด์ ์์์๊ณ , ์์ ์ ์ K(≤ N)๊ฐ ์ฃผ์ด์ง๋ค.
- ์ด์ ์์๋๋ก K๋ฒ์งธ ์ฌ๋์ ์ ๊ฑฐํ๋ค. ํ ์ฌ๋์ด ์ ๊ฑฐ๋๋ฉด ๋จ์ ์ฌ๋๋ค๋ก ์ด๋ฃจ์ด์ง ์์ ๋ฐ๋ผ ์ด ๊ณผ์ ์ ๊ณ์ํด ๋๊ฐ๋ค. ์ด ๊ณผ์ ์ N๋ช ์ ์ฌ๋์ด ๋ชจ๋ ์ ๊ฑฐ๋ ๋๊น์ง ๊ณ์๋๋ค.
- ์์์ ์ฌ๋๋ค์ด ์ ๊ฑฐ๋๋ ์์๋ฅผ (N, K)-์์ธํธ์ค ์์ด์ด๋ผ๊ณ ํ๋ค. ์๋ฅผ ๋ค์ด (7, 3)-์์ธํธ์ค ์์ด์ <3, 6, 2, 7, 5, 1, 4>์ด๋ค.
- ์ฒซ์งธ ์ค์ N๊ณผ K๊ฐ ๋น ์นธ์ ์ฌ์ด์ ๋๊ณ ์์๋๋ก ์ฃผ์ด์ง๋ค. (1 ≤ K ≤ N ≤ 1,000)
์์ด๋์ด
- while๋ฌธ์ ๋๋ฆฌ๋ฉด์ ์์์ ์ ์์น์์ K๋ฒ์งธ ๋ค๊ฐ ํ์ฌ ์ธ์์ ์ต๋๊ฐ๋ณด๋ค ํด ๊ฒฝ์ฐ์๋ ์ฒ์์ผ๋ก ๋์๊ฐ์ ๋ค์ ์ธ๊ธฐ ์ํด ((์์์ + K - 1) % ๋จ์ ์ฌ๋ ์)๋ฅผ ํ๊ณ ์๋ ๊ฒฝ์ฐ์๋ ์์์ ์์ K - 1์ ๋ํ ๊ฐ์ ๋ค์ ์์์ ์ผ๋ก ์ก๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ ๊ฒ ์ฌ๋์ ํ๋ช ์ฉ ๋บ๋๋ง๋ค ArrayList์์๋ ํด๋น ์์น์ ๊ฐ์ removeํด์ค๋ค.
- ๊ทธ๋ ๊ฒ ์ฌ๋๋ค์ ๋ฒํธ๊ฐ ๋ค์ด์๋ ArrayList๊ฐ ๋น ๊ฐ์ด ๋๋ฉด While๋ฌธ์ ์ข ๋ฃํ๋ค.
๊ฒช์ ์ํ์ฐฉ์ค
- While๋ฌธ ์์ ์๋ if๋ฌธ์์ด ์๊ฐ์ฒ๋ผ ๋์๊ฐ์ง ์์์ ์ฌ๋ฌ๋ฒ ์ํ์ฐฉ์ค๋ฅผ ๊ฒช์ ๋์ ํด๊ฒฐํ ์ ์์๋ค..ใ ใ
์ฝ๋
import java.io.*;
import java.util.*;
public class BOJ11866 {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine());
// ์ซ์๋ฅผ ์ ์ฅํ arrayList
List<Integer> round = new ArrayList<Integer>();
List<Integer> result = new ArrayList<Integer>();
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
// ์์๋๋ก ์ซ์๋ฅผ ์ง์ด๋ฃ์
for(int i = 1; i <= N; i++){
round.add(i);
}
// ์์์์น
int start = 0;
while(true){
// ๋ง์ฝ ์์์์น์์ K๋ฒ์งธ ๋ค๊ฐ ์ต๋ ์ฌ๋์๋ฅผ ๋๊ฒผ๋ค๋ฉด
if(start + (K - 1) > (round.size() - 1)){
// ๋ค์ ์์ผ๋ก ๊ฐ์ ๋นผ๊ณ ๋จ์ ์ ๋งํผ ์นด์ดํธ
start = (start + (K - 1)) % round.size();
}
else{
// ์ต๋๊ฐ์ ๋์ด๊ฐ์ง ์๋๋ค๋ฉด K๋ฒ์งธ ๋ค๋ฅผ ์์์ ์ผ๋ก ์ฎ๊น
start = start + (K - 1);
}
// ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ arrayList์ ๋ฐ๋ ์์์ ์ ์๋ ์ฌ๋์ ์ ์ฅ
result.add(round.get(start));
// ๊ฒฐ๊ณผ ๊ฐ์ ์ ์ฅ๋์ผ๋ฉด ์๋ arrayList์์๋ ์ ๊ฑฐํด์ค
round.remove(start);
// ์ฌ๋๋ค ์ ์ฅํด๋์ arrayList๊ฐ ๋น์๋ค๋ฉด ์ข
๋ฃ
if(round.isEmpty()){
break;
}
}
sb.append("<");
for(int i = 0; i < N; i++){
if(i == N - 1){
sb.append(result.get(i) + ">");
}
else{
sb.append(result.get(i) + ", ");
}
}
System.out.println(sb);
}
}
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] BOJ 1920 ์ ์ฐพ๊ธฐ (0) | 2024.07.17 |
---|---|
[Java] BOJ 1018 ์ฒด์คํ ๋ค์ ์น ํ๊ธฐ (0) | 2024.07.17 |
[Java] BOJ 11651 ์ขํ ์ ๋ ฌํ๊ธฐ 2 (0) | 2024.07.16 |
[Java] BOJ 11650 ์ขํ ์ ๋ ฌํ๊ธฐ (0) | 2024.07.16 |
[Java] BOJ 10814 ๋์ด์ ์ ๋ ฌ (2) | 2024.07.16 |