๋ฌธ์ : boj.kr/1561
๋ ์ง: 9์ 8์ผ (์ผ)
์ฑ๊ณต์ฌ๋ถ: X [01:30:34]
์ด๋ถํ์ ๋ฌธ์ ์ด๋ค.
N์ด 20์ต์ด๊ณ M์ด 1๋ง์ด๊ธฐ ๋๋ฌธ์ 0๋ถ์ ์์ด๋ค์ M๊ฐ์ ๋์ด๊ธฐ๊ตฌ์ ํ์ฐ๊ณ 1๋ถ๋ง๋ค ํ ๋ช
์ฉ ํ์ธ ์ ์๋ ๊ณณ์ ํ์์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฐพ๋๊ฑด ์๊ฐ์ด๊ณผ์ด๋ค. ๊ทธ๋ผ ์ด๋ฅผ ํจ์จ์ ์ผ๋ก ์ฐพ๋ ๋ฐฉ๋ฒ์ ์๊ฐํด์ผ ํ๋๋ฐ, ์ด๋ ์๊ฐ์ ์ด์ฉํด ์ด๋ถํ์์ ํ๋ฉด ๋ชจ๋๋ฅผ ํ์ฐ๋ ์ต์ ์ ์๊ฐ์ ์ฝ 31๋ฒ๋ง์ ๋ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋ค๋ ๊ฒ๊น์ง๋ ์๊ฐํ๋ค.
ํ์ง๋ง, ์ด ๋งค๊ฐ๋ณ์๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ๊ณผ ์ฐพ์์ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ์ง ๋ชปํด์ ํด์ค์ ๋ดค๋ค.
22 5
1 2 3 4 5
22๋ช
์ ํ์ฐ๋ ์ํฉ์ด๋ผ๋ฉด 22๋ช
์ด ๋ชจ๋ ํ๋ ์ต์ ์ ์๊ฐ์ ์ฐพ๋๋ค. ์ด ์๊ฐ์ ์ฐพ๋ ๋ฐฉ๋ฒ์ 0๋ถ์ M(5)๋ช
์ ์ผ๋จ ํ์ฐ๊ณ 0~30*n๊น์ง ์ด๋ถํ์์ ์งํํ๋ฉด์ mid๊ฐ์ ๊ฐ ๋์ด๊ธฐ๊ตฌ์ ์๊ฐ์ ๋๋ ๋ชซ์ ๋ํด์ ใ
ก์ด ๋ถ๋ถ์ด ์ดํดํ๊ธฐ ์ด๋ ค์ ๋๋ฐ, ๋ง์ฝ ๋์ด๊ธฐ๊ตฌ๊ฐ ์ดํ์๊ฐ์ด 3๋ถ์ด๋ผ๊ณ ํ๋ค๋ฉด ์ ์ฒด 6๋ถ๋์์ 2๋ช
์ ํ์ธ ์ ์๊ณ 9๋ถ๋์์ 3๋ช
์ ํ์ธ ์ ์๋ค. ์ด๋ฅผ ๋ชซ์ผ๋ก ๊ตฌํ ์ ์๋ ๊ฒ์ด๋ค.ใ
ก M(5) + ๋ชซ์ ์ ์ฒด ํฉ์ด n๋ช
๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด ์๊ฐ์ ๋ ์ค์ฌ๋ณด๊ณ , n(22)๋ช
๋ณด๋ค ์์ผ๋ฉด ํด๋น ์๊ฐ์๋ n(22)๋ช
์ด ๋ค ๋ชปํ๋ ๊ฒ์ด๋ ์๊ฐ์ ๋ ๋๋ ค๊ฐ๋ฉด์ ์ต์ ์ ์๊ฐ์ ์ฐพ์๋ณธ๋ค.
์ ์์ ์์ ํด๋นํ๋ ๊ฐ์ ์ฐพ์๋ณด๋ฉด 22๋ช
์ ๊ฒฝ์ฐ 8๋ถ์ด ๋์จ๋ค.
8 / 1 = 8
8 / 2 = 4
8 / 3 = 2
8 / 4 = 2
8 / 5 = 1
= 17 + 5 = 22
๊ทธ๋ผ 8๋ถ์์ ๋ชจ๋ ๋ค ํ ์ ์๋ ๊ฒ์ด๋๊น ํด๋น ์๊ฐ์ 1๋ถ ์ ์ํฉ์ ๊ตฌํด์ ํ๊ณ ์๋ ์ธ์์ ๊ตฌํ๋ค์ 8๋ถ์ ์ํฉ์์ ํ ์ ์๋ ๋์ด๊ธฐ๊ตฌ์ ๋จ์ ์ธ์์ ํ์๋ณด๋ฉด ๋ง์ง๋ง์ผ๋ก ํ๋ ์ธ์์ ๋์ด๊ธฐ๊ตฌ ๋ฒํธ๋ฅผ ์ฐพ์ ์ ์๋ค.
์ฝ๋
import java.io.*;
import java.util.StringTokenizer;
public class Main {
// ์๊ฐ์ ํ 2์ด, ๋ฉ๋ชจ๋ฆฌ์ ํ 128MB
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
long[] play = new long[m];
for (int i = 0; i < m; i++) play[i] = Integer.parseInt(st.nextToken());
if (n <= m) System.out.println(n);
else {
long low = 0;
long high = 30L * n + 1;
while (low + 1 < high) {
long mid = (low + high) / 2;
long cnt = m;
for (int i = 0; i < m; i++)
cnt += (mid / play[i]);
if (cnt >= n) high = mid;
else low = mid;
}
long ret = m;
for (int i = 0; i < m; i++)
ret += (low / play[i]);
for (int i = 0; i < m; i++) {
if (high % play[i] == 0) ret++;
if (ret == n) {
System.out.println(i+1);
break;
}
}
}
}
}
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2098 - ์ธํ์ ์ํ (2) | 2024.09.17 |
---|---|
2565 - ์ ๊น์ค (0) | 2024.09.12 |
2156 - ํฌ๋์ฃผ ์์ (0) | 2024.08.30 |
1463 - 1๋ก ๋ง๋ค๊ธฐ (0) | 2024.08.29 |
[swea] 1859. ๋ฐฑ๋ง ์ฅ์ ํ๋ก์ ํธ (1) | 2024.08.28 |