๐ ๏ธ ๋ฌธ์ ๐ ๏ธ
๐๏ธ ์ค๋ช ๐๏ธ
2023.12.30์ผ์ ์ฒ์์ผ๋ก SciOI 2023 Open Contest · Arena #16 ์ ์ฐธ๊ฐํ๋ค.
์ฝ๋ฉํ ์คํธ๋ฅผ ๋ณธ๋ค๋ ์๊ฐ์ผ๋ก ๊ธด์ฅ๊ฐ์ ๊ฐ์ง๊ณ ์์ํ๋ค. ์ด ๋ฌธ์ ๊ฐ ์ฒซ ๋ฌธ์ ์๋ค.
๋น์์ ๋๋ฌด ๋ณต์กํ๊ฒ ์๊ฐํ๋์ง ๊ผฌ์ฌ๋ฒ๋ ธ๋ ๋ฌธ์ ๋ฅผ ์ค๋ ๋ค์ ์ ๋ฆฌํด์ ํ์ด๋ณด์๋ค.
ํ์ด ๊ณผ์ ์์ 2๊ฐ์ง ๋ฌธ์ ๋ฅผ ์๊ฒ๋์ด ์ด๋ฅผ ์ ๋ฆฌํ๋ ค๊ณ ํ๋ค.
1. ํ๋ฆฐ ์์ธ์ฒ๋ฆฌ
if(m == 1 && k == 1) return -1;
์ฒ์์๋ ์์ ๊ฐ์ด ์ฐ์ฐ์ด 1๊ฐ์ด๊ณ ์ฐ์ฐ์ ์ธ ์ ์๋ ์ฌ๋ ์๊ฐ 1๋ช ์ผ ๊ฒฝ์ฐ์๋ ๋ฌด์กฐ๊ฑด ๋ถ๊ฐ๋ฅํ๋ค๊ณ ํ๋ค.
ํ์ง๋ง ๋ง์ฝ์ ์ฌ๋์ด ๊ฑด๋์ผ ํ๋ ์ฌ๋์ด 1๋ช ์ด๋ฉด ์ด ๊ฒฝ์ฐ์๋ ๋ถ๊ฐ๋ฅํ ๊น?
๋ด๊ฐ ์๊ฐํ์ง ๋ชปํ๋ ๋ถ๋ถ ์ฒซ๋ฒ์งธ์๋ค. ์ฌ๋์ด 1๋ช ์ผ ๊ฒฝ์ฐ์๋ 1ํ๋ก ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ๋นผ๋จน์์๋ค.
if(m == 1 && k == 1) {
if(n == 1) return 1; //์ฌ๋์ด 1๋ช
์ด๋ฉด 1๋ฒ์ผ๋ก ๊ฐ๋ฅ
return -1;
}
2. ๋ณต์กํ ์๊ฐ
๋ ๊ธด์ฅํ๊ณ ๋ฌธ์ ๋ฅผ ํ ๋๋ง๋ค ํ์๋ณด๋ค ๋ฌธ์ ๋ฅผ ์ด๋ ต๊ฒ ์๊ฐํ๋ค๊ณ ๋๋๋ค.
์ด ๋ฌธ์ ์์๋ ์ค๋ช ์ด ์น์ ํ๊ฒ ๋์ด์์ด ๊ตฌํ์ ์ฐจ๊ทผ์ฐจ๊ทผํด๋ณด๋ฉด ํ๋ ธ์ ๊ฒ ๊ฐ๋ค.
ํ์ง๋ง ๋น์์ ์์์ผ๋ก ํ์ด์ผ ํ๋ค๋ ์๊ฐ์ ๊ณ์ ํ๋ฉด์ ํ๋ฆฐ ์ ์ ์ฐพ์๊ฐ๋ ค๊ณ ํ๋ค. ์๋๋ ํ๋ฆฐ ํ์ด์ด๋ค.
n % (m*k-1) == 0 ? n / (m*k-1) : n / (m*k-1) + 1
์ด ๋ฌธ์ ๋ฅผ ๋ฑ ๋ณด์๋ง์ ์๊ฐ๋ ์๊ณ ๋ฆฌ์ฆ์ Greedy์ด๋ค.
ํ๋ฒ ์ด๋ํ ๋ ๋ชจ๋ ์ฐ์ฐ์ ์ฌ์ฉํ์ฌ ์ด๋ํ๊ณ 1๋ช ์ด ๋ชจ๋ ์ฐ์ฐ์ ๋ค๊ณ ๋์์์ผ์ง ์ต์ ์ด๋ํ์๋ฅผ ๊ตฌํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋๋ก ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํํ๋ค๋ฉด ๋ง์ ๊ฒ์ด๋ค.
ํ์ง๋ง ์์ ๊ฐ์ด ์๊ฐํ๋ฉด์ m*k๋ช ์ด ๊ฐ๋ค๊ฐ 1๋ช ์ด ๋์์ค๋ฉด ๋๋ค๋ ์๊ฐ์ m*k-1 ์ ๊ฐ์ง๊ณ ์์์ ์์ฑํ๋ ค ํ๋ค.
๋ฐ๋ก๋ n๋ฒ๋ณด๋ค ๋ ๋ง์ ํ์๋ฅผ ์๋ค๊ฐ๋ค ํ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ๋๋ฐ ์์ ํ์ด๋ n๋ฒ ์ดํ๋ง์ ๊ตฌํ ์ ์๋ค.
์์ ๊ฐ์ ์ ๋ ฅ์ด ์ฃผ์ด์ง๋ค๋ฉด ์์ ํ์ด๋ 5ํ๋ผ๋ ์๋ชป๋ ๋ต์ ๋์ถํ ๊ฒ์ด๋ค.
๊ทธ๋์ ์๋์ ๊ฐ์ด ์ค๋ช ๋๋ก ๊ตฌํํด๋ณด์๋ค.
int count = 0;
int start = n;
int s = m;
int end = 0;
int e = 0;
while(end < n) {
if(s != 0) {
int t = s * k;
start -= t;
end += t;
e += s;
s = 0;
}
else {
start += 1;
end -= 1;
s = e;
e = 0;
}
count++;
}
์๋ง ์ค์ ๋์๊ฐ๋ ๋ฐฉ์๋๋ก ๊ตฌํํด๋ณด๋ ค ํ์ง ์์๋ค๋ฉด ๋ฐ๋ก๋ฅผ ์๊ฐํ๊ธฐ ์ฝ์ง ์์์ ๊ฒ ๊ฐ๋ค.
๋จธ๋ฆฌ๋ฅผ ์ํ๊ณ ๋ค์ ์๊ฐํด๋ณด๋ ์ ๋ง ๋จ์ํ ๋ฌธ์ ์์ง๋ง ๊นจ๋ฌ์ ์ ์ด ์๋ค.
๋ ์๊ฐ์ ์ซ๊ฒจ ๋น ๋ฅด๊ฒ ํ๋ ค๊ณ ํ๋๋ผ ์์ผ๊ฐ ์ข์์ง๊ณ ์์๋ค.
๋ง์ฝ ํ๋ฆด ๊ฒ ๊ฐ์๋ฐ ๊ณ ์น๋ฉด ๊ณ ์น ์๋ก ๊ผฌ์ฌ๊ฐ๋ ๋๋์ด ๋ค๋ฉด ๊ธํ๊ฒ ์๊ฐํ์ง ๋ง๊ณ ๋ณด์ด๋ ๊ทธ๋๋ก ๊ตฌํํด๋ณด๋ฉฐ ๋์ ๋ฐฉ์์ ์ดํดํ๊ณ ๊ทธ ๋ค์์ ์ด๋ฅผ ๊ฐ์ ํด ๋๊ฐ๋ ๋ฐฉ๋ฒ์ ์ ์ฉํ ์ ์๋๋ก ๋ง์์ ์ฌ์ ๋ฅผ ๊ฐ์ ธ์ผ๊ฒ ๋ค.
๐ ํ์ด ๐
package SciOI2023;
import java.io.*;
import java.util.StringTokenizer;
public class A1 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int t = Integer.parseInt(br.readLine());
StringTokenizer st;
for(int i = 0; i < t; i++) {
st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
bw.write(solve(n, m, k) + "\n");
}
bw.flush();
bw.close();
}
public static int solve(int n, int m, int k) {
if(m == 1 && k == 1) { //์ฐ์ฐ์ด 1๊ฐ์ด๊ณ 1๋ช
๋ง ์ธ ์ ์๋ค๋ฉด
if(n == 1) return 1; //์ฌ๋์ด 1๋ช
์ด๋ฉด 1๋ฒ์ผ๋ก ๊ฐ๋ฅ
return -1; //๊ทธ ์ธ์๋ ๋ถ๊ฐ๋ฅ
}
int count = 0;
boolean umbrella = true; //์ฐ์ฐ์ด ์ฐฝ์ ์ธ์ฌ๊ด์ ์๋์ง
int destination = 0; //์ตํฉ์ธ์ฌ๊ด์ ์๋ ํ์ ์
while(destination < n) {
if(umbrella) {
destination += m * k;
umbrella = false;
}
else {
destination -= 1;
umbrella = true;
}
count++;
}
return count;
}
}
'ProgramSolve > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 2512๋ฒ - ์์ฐ (Java) (0) | 2024.01.15 |
---|---|
[BOJ] 13904๋ฒ - ๊ณผ์ (Java) (2) | 2024.01.05 |
[BOJ] 12919๋ฒ - A์ B 2 (Java) (0) | 2023.12.24 |
[BOJ] 10942๋ฒ - ํฐ๋ฆฐ๋๋กฌ? (Java) (0) | 2023.12.22 |
[BOJ] 17609๋ฒ - ํ๋ฌธ (Java) (0) | 2023.12.13 |