https://www.acmicpc.net/problem/5549
๋ฌธ์
์๊ทผ์ด๋ ์ฐ์ฃผ์ ์ ํ๊ณ ์ธ๊ฐ์ด ๊ฑฐ์ฃผํ ์ ์๋ ํ์ฑ์ ์ฐพ๊ณ ์๋ค. ๋ง์นจ๋ด, ์ ์ธ๊ณ ์ต์ด๋ก ์ธ๊ฐ์ด ๊ฑฐ์ฃผํ ์ ์๋ ํ์ฑ์ ์ฐพ์๋ค. ์ด ํ์ฑ์ ์ ๊ธ, ๋ฐ๋ค, ์ผ์์ด ๋ค์ฝํ ํ์ฑ์ด๋ค. ์๊ทผ์ด๋ ์ด ํ์ฑ์์ ๊ฑฐ์ฃผ ํ ์ ์๋ ๊ตฌ์ญ์ ์ง๋๋ฅผ ๋ง๋ค์ด ์ง๊ตฌ๋ก ๋ณด๋๋ค.
์๊ทผ์ด๊ฐ ๋ณด๋ด์จ ์ง๋๋ ๊ฐ๋ก Ncm, ์ธ๋ก Mcm ์ง์ฌ๊ฐํ ๋ชจ์์ด๋ค. ์ง๋๋ 1cm ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ์ผ๋ก ๋๋์ด์ ธ ์๊ณ , ๊ฐ ๊ตฌ์ญ์ ์งํ์ด ์ํ๋ฒณ์ผ๋ก ํ์๋์ด ์๋ค. ์งํ์ ์ ๊ธ, ๋ฐ๋ค, ์ผ์ ์ค ํ๋์ด๋ฉฐ, ์ ๊ธ์ J, ๋ฐ๋ค๋ O, ์ผ์์ I๋ก ํ์๋์ด ์๋ค.
์ง๊ตฌ์ ์๋ ์ ์ธ์ด๋ ์กฐ์ฌ ๋์ ์์ญ์ K๊ฐ ๋ง๋ค์๋ค. ์ด๋, ๊ฐ ์์ญ์ ์ ๊ธ, ๋ฐ๋ค, ์ผ์์ด ๊ฐ๊ฐ ๋ช ๊ฐ์ฉ ์๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ง๋์ ํฌ๊ธฐ M๊ณผ N์ด ์ฃผ์ด์ง๋ค. (1 ≤ M, N ≤ 1000)
๋์งธ ์ค์ ์ ์ธ์ด๊ฐ ๋ง๋ ์กฐ์ฌ ๋์ ์์ญ์ ๊ฐ์ K๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ K ≤ 100000)
์ ์งธ ์ค๋ถํฐ M๊ฐ ์ค์๋ ์๊ทผ์ด๊ฐ ๋ณด๋ธ ์ง๋์ ๋ด์ฉ์ด ์ฃผ์ด์ง๋ค.
๋ค์ K๊ฐ ์ค์๋ ์กฐ์ฌ ๋์ ์์ญ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. ์ ๋ณด๋ ๋ค ์ ์ a b c d๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๊ตฌ์ญ์ ์ง์ฌ๊ฐํ ๋ชจ์ ์ด๋ฉฐ, ์ผ์ชฝ ์ ๋ชจ์๋ฆฌ์ ์ขํ๊ฐ (a, b) ์ค๋ฅธ์ชฝ ์๋ ๋ชจ์๋ฆฌ์ ์ขํ๊ฐ (c, d)์ด๋ค.
์ถ๋ ฅ
๊ฐ ์กฐ์ฌ ๋์ ์์ญ์ ํฌํจ๋์ด ์๋ ์ ๊ธ, ๋ฐ๋ค, ์ผ์์ ์๋ฅผ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด ํ ์ค์ ํ ์ ๋ณด์ฉ ์ถ๋ ฅํ๋ค.
๊ณจ๋ 5 ๋์ ํฉ ๋ฌธ์
๊ต์ฅํ ๋ ธ๊ฐ๋ค๊ฐ ํ์ํ ๋ฌธ์ ์ด๋ค.
์ ์ฒด ํ์ด ์ฝ๋๋ ๋งจ ์๋์ ์์
ํ๋ค๊ฐ ์ค์๋ฅผ ํ๋ ํ๋ค.
if(map[i][j]=='J') presum[i][j][0]=1;
if(map[i][j]=='O') presum[i][j][1]=1;
if(map[i][j]=='I') presum[i][j][2]=1;
presum[i][j][0] += (presum[i-1][j][0]+presum[i][j-1][0]);
presum[i][j][1] += (presum[i-1][j][1]+presum[i][j-1][1]);
presum[i][j][2] += (presum[i-1][j][2]+presum[i][j-1][2]);
๋์ ํฉ์ ๊ตฌํ ๋
์์ฒ๋ผ [i-1][ ]๊ณผ [ ][j-1] ๋ฅผ ๋ํด์ ๋์ ๊ฐ์ ๊ตฌํด์ฃผ๋๊น presum[ ][ ][0] ์ ์ถ๋ ฅํ์ ๋ ๋น์ ์์ ์ผ๋ก ํฐ ๊ฐ์ด ๋์ค๋ ๊ฒ์ด๋ค.
137? ์ด๋ผ๋ ๋ด๊ฐ ์ํ๊ฑด ์ด๊ฒ ์๋๋ฐ
์๊ณ ๋ฆฌ์ฆ์ ์๋ชป ์งฐ๋ค
์๊ฐํด๋ดค๋๋, ๊ทธ๋ฅ ์ด์ ๊ฐ ๋๊ฐ๋ฅผ ๋ํ๋ฉด ์๋๊ณ
[i-1][ ]๊ณผ [ ][j-1] ๋ฅผ ๋ํด์ค ํ [i-1][j-1] ๊ฐ์ ๋นผ์ค์ผ ๋ด๊ฐ ์ํ๋ ๊ฐ์ด ๋์ด.
๊ทธ๋์ ์๋์ฒ๋ผ ์์ ํ๋๋ ์ฌ๋ฐ๋ฅธ ๊ฐ์ด ๋์๋ค!
if(map[i][j]=='J') presum[i][j][0]=1;
if(map[i][j]=='O') presum[i][j][1]=1;
if(map[i][j]=='I') presum[i][j][2]=1;
presum[i][j][0] += (presum[i-1][j][0]+presum[i][j-1][0]-presum[i-1][j-1][0]);
presum[i][j][1] += (presum[i-1][j][1]+presum[i][j-1][1]-presum[i-1][j-1][1]);
presum[i][j][2] += (presum[i-1][j][2]+presum[i][j-1][2]-presum[i-1][j-1][2]);
์ถ๋ ฅ์๋ ์ฃผ์๊ฐ ํ์ํ๋ค.
์ผ๋จ ๋ ์ธ๋ฑ์ค๋ฅผ 0๋ถํฐ ๊ณ ๋ คํ์ผ๋ฏ๋ก ์ค์ ์
๋ ฅ๋ฐ์ ์ขํ์์ ๊ฐ์ 1์ฉ ๋นผ๊ณ ์ฐ์ฐํ๋ค.
์ข ์ด์ํ๊ฒ.. ์ธ๋ฑ์ค๋ฅผ 0๋ถํฐ ์ค์ ํ๋๊น ํ๋ฆฌ๊ณ 1๋ถํฐ ์ฐ์ฐ๋๋๋ก ์์ ํ๋๊น ๋ง์์. ์์ง?
์ ๋ ฅ๋ฐ๊ณ 1์ฉ ๋นผ๋ ์ฐ์ฐ์ด ์๊ฐ์ด๊ณผ๊ฐ ๋๋.....ํ์
์จ๋ ์๊ฐํ๊ธฐ ๊ท์ฐฎ์ผ๋ ๊ทธ๋ฅ ์ง๋ ์ ๋ ฅ & presum ๊ณ์ฐ ์ ์ธ๋ฑ์ค๋ฅผ 1๋ถํฐ ๊ณ ๋ คํ๋ฉด ๋จ.
์ ๋ ฅ๊ฐ์ด 3, 5, 4, 7 ์ด๋ผ๊ณ ๊ฐ์ ํ ๋ ๋ฒ์๊ฐ ์๋ ํ์ ๋นจ๊ฐ ๋ถ๋ถ๊ณผ ๊ฐ์ผ๋ฏ๋ก
์ ์ฒด ํ์์ (4,4)๊น์ง์ ์์ญ๊ณผ (2,7)๊น์ง์ ์์ญ์ ๋นผ์ค์ผ ํ๋ค.
๋จผ์ (4,4)๋ฅผ ๋นผ๋ฉด ์๋์ ๋ ธ๋ ๋ถ๋ถ์ ์ง์ฐ๋ ์ ์ด๋ค
์ธ๋ฑ์ค | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
1 | (1,1) | (1,2) | (1,3) | (1,4) | (1,5) | (1,6) | (1,7) |
2 | (2,1) | (2,2) | (2,3) | (2,4) | (2,5) | (2,6) | (2,7) |
3 | (3,1) | (3,2) | (3,3) | (3,4) | (3,5) | (3,6) | (3,7) |
4 | (4,1) | (4,2) | (4,3) | (4,4) | (4,5) | (4,6) | (4,7) |
๊ทธ๋ฆฌ๊ณ (2,7)์ ๋นผ๋ฉด ์๋์ ํ๋ ๋ถ๋ถ ์์ญ์ ์ง์ฐ๋ ์ ์ด๋ค.
์ธ๋ฑ์ค | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
1 | (1,1) | (1,2) | (1,3) | (1,4) | (1,5) | (1,6) | (1,7) |
2 | (2,1) | (2,2) | (2,3) | (2,4) | (2,5) | (2,6) | (2,7) |
3 | (3,1) | (3,2) | (3,3) | (3,4) | (3,5) | (3,6) | (3,7) |
4 | (4,1) | (4,2) | (4,3) | (4,4) | (4,5) | (4,6) | (4,7) |
๊ทผ๋ฐ ๊ทธ๋ฌ๋ฉด ์๋์ ์ฐ๋์ ์์ญ์ด 2๋ฒ ๋น ์ง๊ฒ ๋๋ฏ๋ก, ์ด ์์ญ์ ๋ค์ ํ๋ฒ ๋ ๋ํด์ค์ผ ํ๋ค.
์ธ๋ฑ์ค | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
1 | (1,1) | (1,2) | (1,3) | (1,4) | (1,5) | (1,6) | (1,7) |
2 | (2,1) | (2,2) | (2,3) | (2,4) | (2,5) | (2,6) | (2,7) |
3 | (3,1) | (3,2) | (3,3) | (3,4) | (3,5) | (3,6) | (3,7) |
4 | (4,1) | (4,2) | (4,3) | (4,4) | (4,5) | (4,6) | (4,7) |
๊ทธ๋ฌ๋ฉด ์๋์ ๊ฐ์ ์ถ๋ ฅ ์ฐ์ฐ์ ๋์ถํ ์ ์๋ค.
cout << presum[c][d][0] - presum[a - 1][d][0] - presum[c][b - 1][0] + presum[a - 1][b - 1][0] << " ";
cout << presum[c][d][1] - presum[a-1][d][1] - presum[c][b-1][1] + presum[a-1][b-1][1] << " ";
cout << presum[c][d][2] - presum[a-1][d][2] - presum[c][b-1][2] + presum[a-1][b-1][2]<< '\n';
๋์ ํ์ด
#include <iostream>
#include <string>
using namespace std;
string mapinput;
char map[1001][1001];
int ks[4] = {0};
int presum[1001][1001][3]={0};
int m;
int n;
int k;
int main(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int a;
int b;
int c;
int d;
cin >> m >> n >> k;
for (int i = 1; i <= m;++i){
cin >> mapinput;
for (int j = 1; j <= n; ++j){
map[i][j] = mapinput[j-1];
}
}
// ์ ๊ธ์ J, ๋ฐ๋ค๋ O, ์ผ์์ I, ๊ฐฏ์ ๋ฏธ๋ฆฌ ๊ตฌํด๋๊ธฐ
// ์ธ๋ก 1์ด ๋จผ์ ์ฑ์ฐ๊ธฐ
for (int i = 1; i <= m;++i){
if(map[i][1]=='J') presum[i][1][0]=1;
else if(map[i][1]=='O') presum[i][1][1]=1;
else if(map[i][1]=='I') presum[i][1][2]=1;
presum[i][1][0] += presum[i-1][1][0];
presum[i][1][1] += presum[i-1][1][1];
presum[i][1][2] += presum[i-1][1][2];
}
// ๊ฐ๋ก 1์ด ๋จผ์ ์ฑ์ฐ๊ธฐ
for (int i = 2; i <= n;++i){
if(map[1][i]=='J') presum[1][i][0]=1;
else if(map[1][i]=='O') presum[1][i][1]=1;
else if(map[1][i]=='I') presum[1][i][2]=1;
presum[1][i][0] += presum[1][i-1][0];
presum[1][i][1] += presum[1][i-1][1];
presum[1][i][2] += presum[1][i-1][2];
}
// ๋๋จธ์ง ์ฑ์ฐ๊ธฐ
for (int i = 2; i <= m;++i){
for (int j = 2; j <= n;++j){
presum[i][j][0] += (presum[i-1][j][0]+presum[i][j-1][0]-presum[i-1][j-1][0]);
presum[i][j][1] += (presum[i-1][j][1]+presum[i][j-1][1]-presum[i-1][j-1][1]);
presum[i][j][2] += (presum[i-1][j][2]+presum[i][j-1][2]-presum[i-1][j-1][2]);
if(map[i][j]=='J') presum[i][j][0]+=1;
else if(map[i][j]=='O') presum[i][j][1]+=1;
else if(map[i][j]=='I') presum[i][j][2]+=1;
}
}
for (int i = 0; i < k; ++i){
cin >> a >> b >> c >> d;
int jungle = presum[c][d][0] - presum[a - 1][d][0] - presum[c][b - 1][0] + presum[a - 1][b - 1][0];
int ocean = presum[c][d][1] - presum[a - 1][d][1] - presum[c][b - 1][1] + presum[a - 1][b - 1][1];
int ice = presum[c][d][2] - presum[a - 1][d][2] - presum[c][b - 1][2] + presum[a - 1][b - 1][2];
cout << jungle << ' ' << ocean << ' ' << ice << '\n';
}
}
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/BOJ] 17179 : ์ผ์ดํฌ ์๋ฅด๊ธฐ (์ด์งํ์) (0) | 2023.03.29 |
---|---|
[C++/BOJ] 2343 : ๊ธฐํ ๋ ์จ (์ด์งํ์) / ์์ (0) | 2023.03.28 |
[C++/BOJ] 13423 : Three Dots (์ด์งํ์) / ์ฝ์ง ๊ธฐ๋ก (0) | 2023.03.27 |
[C++/BOJ] 17609 : ํ๋ฌธ (ํฌํฌ์ธํฐ) / ํ ์คํธ์ผ์ด์ค / ์ฝ์ง ๊ธฐ๋ก (0) | 2023.03.25 |
[C++/BOJ] 14891 : ํฑ๋๋ฐํด (์๋ฎฌ๋ ์ด์ ) (0) | 2023.03.23 |