Problem ๐ป
๋จ์ํ ๋ธ๋ฃจํธํฌ์ค ๋ฌธ์ ์ง๋ง ์ด๋ป๊ฒ ํ์ด์ผํ ์ง ์ข ๊ณ ๋ฏผํด๋ด์ผ ํ๋ ๋ฌธ์ ์ด๋ค.
Approach 1 โ
- ์ขํ ์์ ํ์
- ๋ณ ๊ธฐ์ค์ผ๋ก ์์ ํ์
์ฒ์ ํ์ด๋ 2๊ฐ์ง์๋ค. ์ขํ ์์ ํ์๊ณผ ๋ณ ๊ธฐ์ค ์์ ํ์.
์ขํ ์์ ํ์์ (1, 1)๋ถํฐ (M-L, N-L)๊น์ง x ~ x+L, y ~ y+L ์ฌ์ด์ ๊ฒน์น๋ ์ขํ๊ฐ ์๋์ง ํ๋ํ๋์ฉ ์ฐพ์์ ์ต๊ณ ๊ฐ์ ๊ฐฑ์ ํด์ฃผ๋ ๋ฐฉ๋ฒ์ด๋ค. ํ์ง๋ง, ๋ฌธ์ ์ ์กฐ๊ฑด์ N, M์ ์ต๋ 500,000์ผ๋ก ๋์ด์๊ธฐ ๋๋ฌธ์ ์ด๋ ๊ฒ ํ ๊ฒฝ์ฐ L = 1์ธ ์ต์ ์ ๊ฒฝ์ฐ 500,000 * 500,000์ผ๋ก 2500์ต ๊ฐ๊น์ด ๋๋ ์ฐ์ฐ์ด ์ผ์ด๋๋ค. ๋น์ฐํ ์๊ฐ์ด๊ณผ์ด๋ค.
๊ทธ๋์ ์๊ฐํ ๋ฐฉ๋ฒ์ด ๋ณ ๊ธฐ์ค์ผ๋ก ์์ ํ์์ด๋ค. ์ฒ์์ ๋ณ ์ขํ ๊ธฐ์ค์ผ๋ก x ~ x+L, y ~ y+L ๊น์ง ๊ฒน์น๋ ๋ณ๋ค ์ค ์ต๋๊ฐ์ผ๋ก ๊ตฌํ๋ค. ํ์ง๋ง, ์ 1, 2, 3, 4 ์ฌ๋ถ๋ฉด์ผ๋ก ๋๋์ด ๊ตฌํ๋ ๊ฒ์ด ๋ฐ๋ก์ ๊ฑธ๋ฆฌ์ง ์์ ๊ฒ ๊ฐ๋ค๊ณ ์๊ฐํด์ ๊ฐ ๋ณ์ ์ขํ๋ฅผ ์ค์ฌ์ผ๋ก ํ ์ 1, 2, 3, 4 ์ฌ๋ถ๋ฉด์ ๊ตฌํด ์ต๋๊ฐ์ ์ฐพ๋๋ก ํ์๋ค. ๊ทผ๋ฐ ์ด ๋ฐฉ๋ฒ์ ๋ฐ๋ก๊ฐ ์๋ค.
. * .
* . *
. * .
์์ ๊ฐ์ ๋ณ ์์น๊ฐ ์ฃผ์ด์ง๊ณ L์ด 3์ด๋ผ๋ฉด (1, 1)์ ํธ๋จํ๋ฆฐ์ ๋๋ ๊ฒ์ด ๋ชจ๋ ๋ณ์ ๋ค ํ๊ฒจ๋ผ ์ ์๋ค. ํ์ง๋ง, ๋ฐฉ๊ธ ๋ก์ง์ผ๋ก๋ ์ต๋ 3๊ฐ๊น์ง์ ๋ณ๋ง ํ๊ฒจ๋ผ ์ ์์ผ๋ฏ๋ก ์ ๋ต์ด ๋ ์ ์๋ค.
Approach 2 โญ
- ์ฃผ์ด์ง ๋ณ ์ขํ๋ค์ ๋ชจ๋ y ์ขํ ํ์
๋ณ๋ฅ๋ณ ๋ ๊ฐ๋ฅผ ์ ํํด์ ํ๋๋ x ์ขํ, ํ๋๋ y ์ขํ๋ง ๊ฐ์ ธ์จ๋ค. ์ ์ด๋ ๊ฒ ํธ๋๋ฉด ์ต๋ํ ๋ณ๋ฅ๋ณ๋ค์ด ๋ง์ด ๋ชจ์ฌ์๋ ์์น์ ํธ๋จํ๋ฆฐ์ ๋ฐฐ์นํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
. * .
* . *
. * .
์์ ๊ฐ์ ์ํฉ์ผ ๋ (1, 2)์ x์ (2, 1)์ y๋ฅผ ๊ฐ์ ธ์ค๋ฉด (1, 1)์ ํธ๋จํ๋ฆฐ์ ์ค์นํ ์ ์๊ฒ๋๋ค. ๊ทธ๋ ๊ฒํด์ผ ์ต๋ํ ๋ง์ ๋ณ๋ฅ๋ณ์ ํ๊ฒจ๋ผ ์ ์๋ค. ์ฆ, ์ต๋ํ ๋ณ๋ค์ ํธ๋จํ๋ฆฐ ๋ชจ์๋ฆฌ์ ์์น์์ผ ๋ง์ ๋ณ๋ฅ๋ณ์ ํ๊ฒจ๋ด๋ ๊ฒ์ด๋ค. ์ด๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
Solution ๐ก
public class BOJ_14658 {
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());
int l = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
int[][] stars = new int[k][2];
for (int i = 0; i < k; i++) {
st = new StringTokenizer(br.readLine());
stars[i][0] = Integer.parseInt(st.nextToken());
stars[i][1] = Integer.parseInt(st.nextToken());
}
int ret = 0;
for (int s1 = 0; s1 < k; s1++) {
int x = stars[s1][0];
for (int s2 = 0; s2 < k; s2++) {
int y = stars[s2][1];
int cnt = 0;
for (int s = 0; s < k; s++) {
if (x <= stars[s][0] && (x + l) >= stars[s][0] && y <= stars[s][1] && (y + l) >= stars[s][1]) cnt++;
}
ret = Math.max(ret, cnt);
}
}
System.out.println(k - ret);
}
}
Reference ๐
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
10875. ๋ฑ (0) | 2025.02.05 |
---|---|
1800. ์ธํฐ๋ท ์ค์น (0) | 2025.02.05 |
1863. ์ค์นด์ด๋ผ์ธ ์ฌ์ด๊ฑฐ (0) | 2025.01.22 |
4485. ๋ น์ ์ท ์ ์ ์ ๊ฐ ์ ค๋ค์ง? (0) | 2025.01.19 |
1238. ํํฐ (0) | 2025.01.17 |