Skip to content

Commit

Permalink
24-03-20 하이퍼 토마토 주석 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
makehard23 committed Mar 20, 2024
1 parent ce055ec commit 6f97543
Showing 1 changed file with 12 additions and 7 deletions.
19 changes: 12 additions & 7 deletions yuyu0830/탐색/17114.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,14 @@ vector<int> len;
vector<int> redTomato[2];
bool curVector = false;

// 연산 범위 체크
bool isin(int a) { return a >= 0 && a < total; }

int main() {
// input
for (int i = 0; i < 11; i++) {
int t; cin >> t;
if (t != 1) {
if (t != 1) { // 차원 추가
len.push_back(t);
total *= t;
dimension++;
Expand All @@ -26,24 +28,26 @@ int main() {
for (int i = 0; i < total; i++) {
cin >> tomato[i];

if (!tomato[i]) greenTomato++;
if (!tomato[i]) greenTomato++; // 안익은 토마토
else if (tomato[i] == 1)
redTomato[curVector].push_back(i);
redTomato[curVector].push_back(i); // 익은 토마토는 벡터에 넣어서 저장
}

int day = 0;
while (greenTomato > 0) {
while (greenTomato > 0) { // 안익은 토마토가 있으면 루프
int lastGreenTomato = greenTomato;

while (!redTomato[curVector].empty()) {
// 이전 순회에서 추가된 토마토만 순회
int curPos = redTomato[curVector].back();
redTomato[curVector].pop_back();

int modular = total;
for (int dim = dimension - 1; dim >= 0; dim--) {
int modular = total; // 각 차원 별 현재 값 연산용
for (int dim = dimension - 1; dim >= 0; dim--) { // 차원 별 순회
for (int v : dir) {
int pos = curPos + (modular / len[dim]* v);
int pos = curPos + (modular / len[dim]* v); // 차원 값 고려해서 배열 상의 현재 위치

// 토마토가 범위 안에 있고, 다른 차원을 넘지 않았고, 안익었으면 벡터에 추가 후 다음 순회에 사용
if (isin(pos) && (curPos / modular == pos / modular) && !tomato[pos]) {
tomato[pos] = 1;
redTomato[!curVector].push_back(pos);
Expand All @@ -55,6 +59,7 @@ int main() {
}
}

// 더 이상 변화가 없으면 -1 출력 후 종료
if (lastGreenTomato == greenTomato) {
printf("-1\n");
return 0;
Expand Down

0 comments on commit 6f97543

Please sign in to comment.