- ๋์ ํ๋ก๊ทธ๋๋ฐ
- ์น๋ฆฐ์ด
- golang
- Python
- ๋นํธ๋ง์คํน
- js
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
- LCs
- go
- ํ๋ก๊ทธ๋๋จธ์ค
- ์ด๋ถํ์
- BFS
- ๋นํธ๋งต
- nestjs
- C++
- ๋ฐฑ์ค
- ์ฌ๊ท
- ์์ฝ๋
- ๊ฐ์ฅ๊ฐ๊น์ด๊ณตํต์กฐ์
- ์๊ณ ๋ฆฌ์ฆ
- ์นด์นด์ค ์ฝํ
- DP
- ํ๋ฆฌ์จ๋ณด๋ฉ
- DFS
- ๋ฐฑ์๋ ํ๋ฆฌ์จ๋ณด๋ฉ
- Union-Find
- ๋ค์ต์คํธ๋ผ
- ํธ๋ฆฌ
- ์ํฐ๋
- ์นด์นด์ค2021
- Today
- Total
Hello Ocean! ๐ผ
[C++/ํ๋ก๊ทธ๋๋จธ์ค] ํ๊ดด๋์ง ์์ ๊ฑด๋ฌผ ๋ณธ๋ฌธ
๋ฌธ์
https://programmers.co.kr/learn/courses/30/lessons/92344
๋ฌธ์ ๊ฐ ๊ธธ๋ค..
์์ฝํ๋ฉด,
NxM์ ์ด๊ธฐ borad์์ (r1, c1) ~(r2, c2)์ ์์์ ๊ตฌ๊ฐ?๋ถ๋ถ์ ๊ณต๊ฒฉ(-)ํ๋ค๊ฐ ํ๋ณต(+)ํ๋ค๊ฐ ํ๋ฉด์
์ต์ข ์ ์ผ๋ก ๊ฐ์ด 0๋ณด๋ค ํฐ ์นธ์ ๊ฐฏ์๋ฅผ ์ธ๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค.
ํ์ด
์ง๋์ฃผ ์คํฐ๋์๊ฐ์ ๋ค์๋ IMOS๋ฒ์ ์ด์ฉํด๋ณด์๋ค.
IMOS๋ฒ์ด๋? <- ์ด ๋ธ๋ก๊ทธ์ ์์ฃผ ์ค๋ช ์ด ์ ๋์ด ์๋ค.
N+1 x M+1 ํฌ๊ธฐ์ cache๋ฐฐ์ด์ ๋ง๋ค์ด์ imos๋ฒ์ ์ด์ฉํด ๊ณต๊ฒฉ, ํ๋ณต ๋ก๊ทธ?๋ฅผ ๊ธฐ๋กํ๊ณ
๋งจ ๋ง์ง๋ง์ ๊ฐ๋ก๋ก ํ๋ฒ, ์ธ๋ก๋ก ํ๋ฒ ์ญ ํ์ด ์ต์ข ์ ์ธ cache๋ฐฐ์ด ๊ฐ์ ๊ตฌํ๋ค.
๊ทธ๋ฆฌ๊ณ , cache[r][c] + board[r][c] > 0 ์ธ ์นธ๋ค์ ๊ฐฏ์๋ฅผ ์ธ์ด์ฃผ๋ฉด ๋๋ค.
์ด๋ฐ ๋๋์ (์์ ํ์์ผ๋กํ๋ฉด ์๊ฐ์ด๊ณผ๋ ๊ฑฐ๊ฐ์) ๋ฌธ์ ๋ฅผ ๊ทธ๋์ ๋งค์ฐ ์ด๋ ค์ํ๋๋ฐ, imos๋ฒ์ ์๊ฒ๋์์ผ๋ ํ ์ ์๋ ๋ฌธ์ ๊ฐ ๋์ด๋ ๊ฒ ๊ฐ๋ค.
* imos๋ฅผ ์์ด๋ชจ์ค๊ฐ ์๋๋ผ, ์ด๋ชจ์ค๋ผ๊ณ ์ฝ๋ ๊ฒ ๊ฐ๋ค (์ผ๋ณธ์ด์ธ๋ฏ?)
์ฝ๋
#include <string>
#include <vector>
using namespace std;
vector<vector<int>> cache;
int solution(vector<vector<int>> board, vector<vector<int>> skill) {
int answer = 0;
int N = board.size();
int M = board[0].size();
cache = vector<vector<int>>(N+1, vector<int>(M+1, 0)); // imos์ํด ํ๋์ฉ ํฌ๊ฒ ๋ง๋ค๊ธฐ
for (auto s: skill) {
int degree = s[5];
int r1 = s[1]; int c1 = s[2];
int r2 = s[3]; int c2 = s[4];
if (s[0] == 2) { // ๊ณต๊ฒฉ
cache[r1][c1] += degree;
cache[r1][c2+1] -= degree;
cache[r2+1][c1] -= degree;
cache[r2+1][c2+1] += degree;
} else { // ํ๋ณต
cache[r1][c1] -= degree;
cache[r1][c2+1] += degree;
cache[r2+1][c1] += degree;
cache[r2+1][c2+1] -= degree;
}
}
// ๊ฐ๋ก๋ก ํฉ์ธ๊ธฐ
for (int r=0;r<N;r++) {
int sum = cache[r][0];
for (int c=1;c<M;c++) {
cache[r][c] += sum;
sum = cache[r][c];
}
}
// ์ธ๋ก๋ก ํฉ์ธ๊ธฐ
for (int c=0;c<M;c++) {
int sum = cache[0][c];
for (int r=1;r<N;r++) {
cache[r][c] += sum;
sum = cache[r][c];
}
}
for (int r=0;r<N;r++) {
for (int c=0;c<M;c++) {
if (cache[r][c] + board[r][c] > 0) answer++;
}
}
return answer;
}
๊ฒฐ๊ณผ
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/ํ๋ก๊ทธ๋๋จธ์ค] ์ผ๊ทผ ์ง์ (0) | 2022.04.05 |
---|---|
[C++/ํ๋ก๊ทธ๋๋จธ์ค] ์ซ์ ๊ฒ์ (0) | 2022.03.29 |
[C++/ํ๋ก๊ทธ๋๋จธ์ค] ์ด์ค์ฐ์ ์์ํ (0) | 2022.03.01 |
[go/ํ๋ก๊ทธ๋๋จธ์ค] ์ฌ ์ฐ๊ฒฐํ๊ธฐ (0) | 2022.02.08 |
[C++/ํ๋ก๊ทธ๋๋จธ์ค] ๊ฒฝ์ฃผ๋ก ๊ฑด์ค (2020 ์นด์นด์ค ์ธํด์ญ) (0) | 2022.01.18 |