๋ฌธ์ ๋งํฌ
https://school.programmers.co.kr/learn/courses/30/lessons/60061
์ต๋ 1000๊ฐ์ ๊ฑด์ค ๋ช ๋ น์ ์ฒ๋ฆฌํ ํ ์ต์ข ์ ์ผ๋ก ๋จ์์๋ ๊ธฐ๋ฅ๊ณผ ๋ณด์ ์์น๋ฅผ ๋ฆฌํดํ์.
ํ์ด
๋ช ๋ น ํ์์ {x์ขํ, y์ขํ, ๊ธฐ๋ฅ or ๋ณด, ์ญ์ or ์ค์น}๋ก ๊ตฌ์ฑ๋ ๋ฒกํฐ ํ์์ด๋ค.
์ด๋ ๊ธฐ๋ฅ๊ณผ ๋ณด๊ฐ ์ค์น๋ ์ ์๋ ์กฐ๊ฑด์ด ์๋ค.
โ ๊ธฐ๋ฅ์ ๋ฐ๋ฅ ์์ ์๊ฑฐ๋ ๋ณด์ ํ์ชฝ ๋ ๋ถ๋ถ ์์ ์๊ฑฐ๋, ๋๋ ๋ค๋ฅธ ๊ธฐ๋ฅ ์์ ์์ด์ผ ํฉ๋๋ค.
โ ๋ณด๋ ํ์ชฝ ๋ ๋ถ๋ถ์ด ๊ธฐ๋ฅ ์์ ์๊ฑฐ๋, ๋๋ ์์ชฝ ๋ ๋ถ๋ถ์ด ๋ค๋ฅธ ๋ณด์ ๋์์ ์ฐ๊ฒฐ๋์ด ์์ด์ผ ํฉ๋๋ค.
์์ ๋ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ๋ชปํ๋ฉด, ์ญ์ ํน์ ์ค์น๋ฅผ ํ ์ ์๋ค.
์์ ์กฐ๊ฑด์ ์ด๊ธฐ๋ ๋ช ๋ น์ด ๋ค์ด์ฌ ๊ฒฝ์ฐ๋ ๋ช ๋ น์ ๋ฌด์ํ๋ค.
์ฒ์์ ๋๋ ์์ฒญ๋ ๊ฒฝ์ฐ์ ์์ธ๋ค์ ์ฒ๋ฆฌํด์ผ ํ๋ ๋จ์ ๊ตฌํ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ๋ค. ์ค์น ๋๋ ์ ๊ฑฐ ๋ช ๋ น์ด ๋ค์ด์์ ๋ ๋ฐ์ํ ์ ์๋ ์์ธ ์ํฉ์ ํ๋ ํ๋ ์์ํ๋ฉด์ ์ต๋ํ ๊ตฌํ์ ํ๋ค.
์์ ๋ฌธ์ ๋ ๋ค ๋งํ์ง๋ง, ์ฒ๋ฆฌ๋ฅผ ๋ชปํ ์์ธ๊ฐ ์์๋ ์ง ์ ํ์ฑ ํ ์คํธ ๋๋ถ๋ถ์์ ์คํจ๊ฐ ๋์๋ค.
์ฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์ฝ๊ฒ ์๊ฐํ ์ ์๋ ๋ฐฉ๋ฒ ์ค ํ๋๋ ์ค์น ๋๋ ์ญ์ ๋ฅผ ํ ํ์ ๋ชจ๋ ๊ธฐ๋ฅ์ด๋ ๋ณด๊ฐ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ง ํ์ธํ๋ ๋ฐฉ๋ฒ์ด๋ค.
ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ ์ฒ์์ ์๋ํ์ง ์์๋ ์ด์ ๋ ์๊ฐ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ฆด ๊ฒ ๊ฐ์์ ์๋์กฐ์ฐจ ํ์ง ์์๋ค.
๊ทธ๋ฐ๋ฐ ๋ช ๋ น์ ์ต๋ 1000๊ฐ๋ก ์ ๋ ฅ์ด ๊ทธ๋ ๊ฒ ๋ง์ง ์๋ค. ๊ณ์ํด์ ๊ฑด๋ฌผ์ ์ค์นํ๋ ๋ช ๋ น๋ง ๋ค์ด์จ๋ค๊ณ ํด๋ ๊ทธ๋ฆฌ ๋ง์ ํ์์ด ํ์ํ์ง ์์์ ์ง์ํ ์ ์๋ค.
์ค์น๋ ๊ฑด๋ฌผ์ ์ ๋ณด๋ building์ด๋ผ๋ ๋ฒกํฐ ์งํฉ์ ์ ์ฅํด๋์๋ค. set<vector<int>> building
๋ฒกํฐ๊ฐ ์๋ set์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ์ด์ ๋ ํ์๊ณผ ์ญ์ ๊ฐ ๊ฐ๋จํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ํ ์ ๋ต๋ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํด์ ๋ฆฌํดํด์ผ ํ๋๋ฐ, set์ ์์์ ์ ๋ ฌ์ ์์ผ์ฃผ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์ ๋ ฌํด ์ค ํ์๊ฐ ์๋ค.
1. ๊ธฐ๋ฅ์ด ์์์ ์ ์๋ ์กฐ๊ฑด
๊ธฐ๋ฅ์ด x, y์ ์ค์น๋์ด์๋ค๊ณ ํ์.
์ ์๋ ์กฐ๊ฑด์ ์ํด y == 0 ์ด๊ฑฐ๋, (x, y-1)์ ์ค์น๋ ๊ธฐ๋ฅ์ด ์กด์ฌํ๊ฑฐ๋, (x, y-1) ๋๋ (x-1, y-1)์ ๋ณด๊ฐ ์กด์ฌํ๋ฉด ๋๋ค.
=> ๋ฐ๋ฅ์ด๊ฑฐ๋, ์๋์ ๊ธฐ๋ฅ ๋๋ ๋ณด๊ฐ ์กด์ฌํ๋ฉด ๋๋ค.
์์ 4๊ฐ์ง ์กฐ๊ฑด ์ค ํ๋๋ผ๋ ๋ง์กฑํ๋ฉด ํด๋น ๊ธฐ๋ฅ์ ์กฐ๊ฑด์ ๋ง์กฑ์ํจ๋ค.
๋ฐ๋๋ก 4๊ฐ์ง ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํ์ง ๋ชปํ๋ค๋ฉด ํด๋น ๊ธฐ๋ฅ์ ์ค์น๋ ์ ์๋ค.
2. ๋ณด๊ฐ ์ค์น๋ ์ ์๋ ์กฐ๊ฑด
๋ณด๊ฐ x, y์ ์ค์น๋์ด์๋ค๊ณ ํ์.
์ ์๋ ์กฐ๊ฑด์ ์ํด (x, y - 1) ๋๋ (x+1, y - 1)์ ๊ธฐ๋ฅ์ด ์กด์ฌํ๊ฑฐ๋, (x-1, y)์ (x+1, y) ๋ชจ๋์ ๋ณด๊ฐ ์กด์ฌํ๋ฉด ๋๋ค.
=> ์๋์ ๊ธฐ๋ฅ์ด ํ๋๋ผ๋ ์กด์ฌํ๊ฑฐ๋, ์์ชฝ์ ๋ณด๊ฐ ์ค์น๋์ด ์์ผ๋ฉด ๋๋ค.
์์ 3๊ฐ์ง ์กฐ๊ฑด ์ค ํ๋๋ผ๋ ๋ง์กฑํ๋ฉด ํด๋น ๋ณด๋ ์กฐ๊ฑด์ ๋ง์กฑ์ํจ๋ค.
๋ฐ๋๋ก 3๊ฐ์ง ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํ์ง ๋ชปํ๋ฉด ํด๋น ๋ณด๋ ์ค์น๋ ์ ์๋ค.
๋ช ๋ น์ ์ผ๋จ ์ํํ ํ ์์ ๊ณผ์ ์ ํตํด ๋ชจ๋ ๊ธฐ๋ฅ๊ณผ ๋ณด๊ฐ ์กฐ๊ฑด์ ๋ง์กฑ์ํค๋ ์ง ํ์ธํ๋ค.
ํ๋๋ผ๋ ๋ง์กฑํ์ง ์๋ ๊ธฐ๋ฅ ๋๋ ๋ณด๊ฐ ์๋ค๋ฉด ํด๋น ๋ช ๋ น์ ์ฒ ํํ๋ค.
์ฝ๋ ์์ฑ
|
#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 100 + 5;
set<vector<int>> building;
bool is_ok(){
for(auto build : building){
if(!build[2]){//๊ธฐ๋ฅ
int x = build[0];
int y = build[1];
if(y == 0)
continue;
vector<int> necessary[3] = {{x,y-1, 0}, {x-1,y,1}, {x,y,1}};
bool chk = false;
for(int i = 0; i< 3; i++){
if(building.find(necessary[i]) != building.end()){
chk = true;
break;
}
}
if(chk)
continue;
return false;
}
else if(build[2]){//๋ณด
int x = build[0];
int y = build[1];
vector<int> necessary[4] = {{x,y-1, 0}, {x+1, y-1, 0}, {x-1, y ,1} , {x+1,y,1}};
if(building.find(necessary[0]) != building.end())
continue;
else if(building.find(necessary[1]) != building.end())
continue;
else if(building.find(necessary[2]) != building.end()
&& building.find(necessary[3]) != building.end())
continue;
return false;
}
}
return true;
}
vector<vector<int>> solution(int n, vector<vector<int>> build_frame) {
vector<vector<int>> answer;
for(auto build : build_frame){
vector<int> v = {build[0], build[1], build[2]};
int how = build[3];
if(!how){ //์ญ์
building.erase(v);
if(is_ok()) continue;
else building.insert(v);
}
else if(how){ //์ค์น
building.insert(v);
if(is_ok()) continue;
else building.erase(v);
}
}
for(auto v : building)
answer.push_back(v);
return answer;
}
|
cs |
'ํ๋ก๊ทธ๋๋จธ์ค > 3๋จ๊ณ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค Lv3] : ์นด๋ ์ง ๋ง์ถ๊ธฐ (0) | 2022.07.25 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค Lv3] : ์ง๊ฒ๋ค๋ฆฌ ๊ฑด๋๊ธฐ (0) | 2022.07.20 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv3] : ๊ฒฝ์ฃผ๋ก ๊ฑด์ค (0) | 2022.07.14 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv3] : ํฉ์น ํ์ ์๊ธ (0) | 2022.07.13 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv3] : ๊ธ๊ณผ ์ ์ด๋ฐํ๊ธฐ (0) | 2022.07.11 |