๐ ๋ฌธ์
nํ m์ด์ ๊ฒฉ์๊ฐ ์์ต๋๋ค. ๊ฒฉ์์ ๊ฐ ํ์ 0, 1, ..., n-1๋ฒ์ ๋ฒํธ, ๊ทธ๋ฆฌ๊ณ ๊ฐ ์ด์ 0, 1, ..., m-1๋ฒ์ ๋ฒํธ๊ฐ ์์๋๋ก ๋งค๊ฒจ์ ธ ์์ต๋๋ค. ๋น์ ์ ์ด ๊ฒฉ์์ ๊ณต์ ํ๋ ๋๊ณ , ๊ทธ ๊ณต์ ๋ค์๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ๋ค์ ๋ ๋ฆฌ๊ณ ์ ํฉ๋๋ค.
- ์ด ๋ฒํธ๊ฐ ๊ฐ์ํ๋ ๋ฐฉํฅ์ผ๋ก dx์นธ ์ด๋ํ๋ ์ฟผ๋ฆฌ (query(0, dx))
- ์ด ๋ฒํธ๊ฐ ์ฆ๊ฐํ๋ ๋ฐฉํฅ์ผ๋ก dx์นธ ์ด๋ํ๋ ์ฟผ๋ฆฌ (query(1, dx))
- ํ ๋ฒํธ๊ฐ ๊ฐ์ํ๋ ๋ฐฉํฅ์ผ๋ก dx์นธ ์ด๋ํ๋ ์ฟผ๋ฆฌ (query(2, dx))
- ํ ๋ฒํธ๊ฐ ์ฆ๊ฐํ๋ ๋ฐฉํฅ์ผ๋ก dx์นธ ์ด๋ํ๋ ์ฟผ๋ฆฌ (query(3, dx))
๋จ, ๊ณต์ ๊ฒฉ์ ๋ฐ๊นฅ์ผ๋ก ์ด๋ํ ์ ์์ผ๋ฉฐ, ๋ชฉ์ ์ง๊ฐ ๊ฒฉ์ ๋ฐ๊นฅ์ธ ๊ฒฝ์ฐ ๊ณต์ ์ด๋ํ๋ค๊ฐ ๋ ์ด์ ์ด๋ํ ์ ์์ ๋ ๋ฉ์ถ๊ฒ ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, 5ํ × 4์ด ํฌ๊ธฐ์ ๊ฒฉ์ ๋ด์ ๊ณต์ด 3ํ 2์ด์ ์์ ๋ query(3, 10) ์ฟผ๋ฆฌ๋ฅผ ๋ฐ์ ๊ฒฝ์ฐ ๊ณต์ 4ํ 2์ด์์ ๋ฉ์ถ๊ฒ ๋ฉ๋๋ค. (๊ฒฉ์์ ํฌ๊ธฐ๊ฐ 5ํ × 4์ด์ด๋ฏ๋ก, 0~4๋ฒ ํ๊ณผ 0~3๋ฒ ์ด๋ก ๊ฒฉ์๊ฐ ๊ตฌ์ฑ๋๊ธฐ ๋๋ฌธ์
๋๋ค.)
๊ฒฉ์์ ํ์ ๊ฐ์ n, ์ด์ ๊ฐ์ m, ์ ์ x์ y, ๊ทธ๋ฆฌ๊ณ ์ฟผ๋ฆฌ๋ค์ ๋ชฉ๋ก์ ๋ํ๋ด๋ 2์ฐจ์ ์ ์ ๋ฐฐ์ด queries๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. n × m๊ฐ์ ๊ฐ๋ฅํ ์์์ ์ ๋ํด์ ํด๋น ์์์ ์ ๊ณต์ ๋๊ณ queries ๋ด์ ์ฟผ๋ฆฌ๋ค์ ์์๋๋ก ์๋ฎฌ๋ ์ด์
ํ์ ๋, xํ y์ด์ ๋์ฐฉํ๋ ์์์ ์ ๊ฐ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- 1 ≤ n ≤ 10^9
- 1 ≤ m ≤ 10^9
- 0 ≤ x < n
- 0 ≤ y < m
- 1 ≤ queries์ ํ์ ๊ฐ์ ≤ 200,000
- queries์ ๊ฐ ํ์ [command,dx] ๋ ์ ์๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- 0 ≤ command ≤ 3
- 1 ≤ dx ≤ 109
- ์ด๋ query(command, dx)๋ฅผ ์๋ฏธํฉ๋๋ค.
์ ์ถ๋ ฅ ์
2 | 2 | 0 | 0 | [[2,1],[0,1],[1,1],[0,1],[2,1]] | 4 |
2 | 5 | 0 | 1 | [[3,1],[2,2],[1,1],[2,3],[0,1],[2,1]] | 2 |
โ๏ธ ํ์ด
๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ์งํํ๋ค๋ฉด ๋ฌด์กฐ๊ฑด ์๊ฐ์ด๊ณผ๊ฐ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค. ๊ทธ๋์ ๋ฐ๋๋ก ์ฟผ๋ฆฌ๋ฅผ ์งํํ๋ฉด์ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
๋ง์ฝ ←(1๋ฒ์งธ) ↓(2๋ฒ์งธ) ↓(3๋ฒ์งธ) →(4๋ฒ์งธ)์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฆฐ๋ค๋ฉด ์์นํด์ผ ํ๋ ์ง์ ์์ ์์ํด์ ๋ฐ๋๋ก →(4๋ฒ์งธ) ↓(3๋ฒ์งธ) ↓(2๋ฒ์งธ) ←(1๋ฒ์งธ)๋ก ์ญ์์ผ๋ก ์งํํ๋ค. ๋ํ ๋ฐฉํฅ๋ ๋ฐ๋๊ฐ ๋์ด ์ต์ข ์ ์ผ๋ก ←(4๋ฒ์งธ) ↑(3๋ฒ์งธ) ↑(2๋ฒ์งธ) →(1๋ฒ์งธ)๋ฅผ ์คํํด๋ณด๋ ๊ฒ์ด๋ค.
๊ฐ์ฅ ์ค์ํ๋ค๊ณ ์๊ฐํ๋ ์ ์ ๋ฒฝ์ ๊ณต์ด ์์นํด ์๋ค๋ฉด ๋ฒ์๋ก ๊ณ์ฐ์ด ๋๋ค๋ ๊ฒ์ด์๋ค.
๋ง์ฝ ๊ณต์ด ์ ์ด๋ฏธ์ง์ ํด๋น ์์น๋ก ์ด๋ํด์ผ ํ๊ณ ํ์ฌ ์ํํ๋ ์ฟผ๋ฆฌ๊ฐ ์ค๋ฅธ์ชฝ์ผ๋ก ๋์นธ ๊ฐ๋ ์ํฉ์ด๋ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ํฉ์ ํด๋น ์์น๋ก ์ด๋ํ ์ ์๋ค.
๋ ์์น ๋ชจ๋ ์ผ์ชฝ์ผ๋ก ๋์นธ ์ด๋ํ์ ๋ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ์ญ์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์ํํ๋ฉด์ ์ฃผ์ํด์ผํ๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ minX, maxX, minY, maxY๋ผ๋ 4๊ฐ์ ๋ณ์๋ฅผ ์ ์ธํ๋ค. ๊ฐ๊ฐ ๋ฒ์์ ์๋จ, ํ๋จ, ์ข์ธก, ์ฐ์ธก์ ๊ฐ๋ฅดํจ๋ค. ๋ค์ ์ด๋ฏธ์ง๋ฅผ ๋ณด๋ฉด ์ดํดํ๊ธฐ ๋ ์ฝ๋ค.
๋ฒ์๊ฐ ๋ ๋๋ ์กฐ๊ฑด์ด ์๋๋ฐ ๊ธฐ์กด ์ฟผ๋ฆฌ์ ๋ฐฉํฅ๊ณผ ํด๋น ๋ฐฉํฅ์ ๋ฒฝ์ด ๋ฐ๋ก ์์ ์์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ์ด ์กฐ๊ฑด์ผ๋ ์ขํ๋ฅผ (์๋จ ํ๋จ), (์ข์ธก ์ฐ์ธก) ๋๋ค ์์ ํ๋ ๊ฒ์ด ์๋ ํ๋๋ง ์์ ํ์ฌ ๋ฒ์๋ก ๊ตฌ์ฑ๋๋๋ก ํ๋ค.
ํ๊ฐ์ง ๋ ์ฃผ์ํ ์ ์ด ์๋๋ฐ ๋ง์ฝ ๋ฐ๋๋ก ์ด๋ํ์ ๋ ์ฌ๊ฐํ ๋ฒ์๋ฅผ ์์ ๋ฒ์ด๋๋ ์ํฉ์ด๋ค. ํ์ฌ ๋ฒ์๊ฐ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑ๋์ด ์์๋๋ฅผ ์๊ฐํด๋ณด์
์ด๋ ๋ง์ฝ ์ข์ธก์ผ๋ก 3ํ ๊ฐ๋ ๊ฒฝ์ฐ์๋ ์ด๋ป๊ฒ ๋ ๊น?
ํ๋์ ํ ๋๋ฆฌ๊ฐ ์์ ๊ฒฉ์ ๋ฐ์ผ๋ก ๋์ด๊ฐ๋ค. ๋ง์ฝ ์ผ๋ถ๋ง ๋์ด๊ฐ ๊ฒฝ์ฐ ํ ๋ด๋ถ์ ์๋ ๋ถ๋ถ์ ๊ฐ๋ฅํ๋ฏ๋ก ๊ณ์ ์งํํ ์ ์์ง๋ง ์์ ๋๊ฐ๋ ๊ฒฝ์ฐ์๋ ๊ฐ๋ฅํ ๊ฒฝ์ฐ๊ฐ ์๋ค๋ ์๋ฏธ๋ก 0์ ๋ฐ๋ก ๋ฐํํ๋ค. ๊ฐ ์ต๋๊ฐ์ด 0 ๋ฏธ๋ง์ด ๋๊ฑฐ๋, ์ต์๊ฐ์ด ๊ฒฉ์์ ํฌ๊ธฐ(n, m)์ด์์ด ๋ ๋๋ก ํ๋จํ๋ค.
๋ชจ๋ ์ฟผ๋ฆฌ๋ฅผ ๋ฐ๋๋ก ์ํํ๊ณ ๊ตฌํ minX, maxX, minY, maxY๋ ๋ณ์ ์์น๋ฅผ ์๋ฏธํ๋ฏ๋ก ๋์ด๋ฅผ ๊ตฌํด์ค๋ค.
(maxX - minX + 1) * (maxY - minY + 1)
๋ ํ๊ฐ์ง ๋ด ๋ฐ๋ชฉ์ ์ก์ ๋ฌธ์ ๊ฐ ์์๋๋ฐ ๊ทธ๊ฑด ๋ฐ๋ก BigInt์๋ค. n๊ณผ m์ ๋ฒ์๊ฐ 10^9๋ก ๊ณ์ฐํ ๋ ํํ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ์ ์๊ธฐ ๋๋ฌธ์ BigInt ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๊ณ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
โจ๏ธ ์ฝ๋
function solution(n, m, x, y, queries) {
var answer = -1;
let minX = BigInt(x),
maxX = BigInt(x),
minY = BigInt(y),
maxY = BigInt(y);
queries.reverse();
for (const query of queries) {
let [dist, cnt] = query;
cnt = BigInt(cnt);
if (dist === 0) {
if (minY !== 0n) minY = minY + cnt;
maxY = maxY + cnt;
} else if (dist === 1) {
if (maxY !== BigInt(m - 1)) maxY = maxY - cnt;
minY = minY - cnt;
} else if (dist === 2) {
if (minX !== 0n) minX = minX + cnt;
maxX = maxX + cnt;
} else if (dist === 3) {
if (maxX !== BigInt(n - 1)) maxX = maxX - cnt;
minX = minX - cnt;
}
if (maxX < 0 || maxY < 0 || minX >= n || minY >= m) return 0;
minX = minX < 0n ? 0n : minX;
maxX = maxX >= BigInt(n) ? BigInt(n - 1) : maxX;
minY = minY < 0n ? 0n : minY;
maxY = maxY >= BigInt(m) ? BigInt(m - 1) : maxY;
}
answer = (maxX - minX + 1n) * (maxY - minY + 1n);
return answer;
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ์ฑ๊ฒฉ ์ ํ ๊ฒ์ฌํ๊ธฐ (0) | 2023.04.09 |
---|---|
[Algorithm] ์ฐ์๋ ๋ถ๋ถ ์์ด์ ํฉ (0) | 2023.04.08 |
[Algorithm] ๋ฑ์ฐ์ฝ์ค ์ ํ๊ธฐ (0) | 2023.04.06 |
[Algorithm] ์ฌ๋ผ์ง๋ ๋ฐํ (0) | 2023.04.05 |
[Algorithm] N์ผ๋ก ํํ (0) | 2023.04.04 |