cleverdevk   4년 전

무엇이 문제인지 잘 모르겠어요 ㅠㅠ 고수님들 알려주시면 감사하겠습니다..

sanha93   3년 전

map 2와 map 1을 같이 쓰시는 이유를 잘 모르겠습니다..

이런식으로 코딩을 하시면, 디버깅이 힘들수밖에 없습니다. 

계산 과정이 더해지더라도, map2 로 분산값을 저장해서 

map 으로 합치시고, 


한번은 분산만 하고, 

한번은 분산 하지 말고 계속 돌려만 가면서 

어디서 잘못된지 찾으셔야 할 거 같습니다..

코딩 하실떄 왠만하면, 함수로 나누어서 해야 좋은 이유가, 


이렇게 디버깅 할때 더 편하기 때문이죠.. 


지금 코드로는 솔직히 너무 난해해요...


cleverdevk   3년 전

한달동안 공부좀 하고 다시 풀어보니 맞았네요. 조언해주신 대로 함수로 나눠서 풀이하는 습관을 들이고 있습니다. ㅎㅎ

지금의 제가 봐도 코드가 무슨 소리인지 모를정도로 난해하네요...ㅋㅋㅋㅋㅋㅋㅋ

다시 풀은 코드도 아래 첨부하겠습니당. 늦었지만 조언 감사드려요!

#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
#include <string>

using namespace std;

int dr[] = { -1,0,1,0 };
int dc[] = { 0,1,0,-1 };

int r, c, t;
int a[50][50] = { 0, };
vector<int> purifier;
int p1, p2;

void move()
{
	//upper purifier right
	int right = a[p1][c-1];
	for (int i = c-1; i > 0; i--) {
		a[p1][i] = a[p1][i - 1];
	}
	a[p1][1] = 0;
	//upper purifier up
	int up = a[0][c-1];
	for (int i = 0; i < p1 - 1; i++) {
		a[i][c-1] = a[i + 1][c-1];
	}
	a[p1-1][c-1] = right;
	//upper purifier left
	int left = a[0][0];
	for (int i = 0; i < c - 1; i++) {
		a[0][i] = a[0][i + 1];
	}
	a[0][c - 2] = up;
	//upper purifier down
	for (int i = p1 - 1; i > 0; i--) {
		a[i][0] = a[i - 1][0];
	}
	a[1][0] = left;


	//lower purifier right
	right = a[p2][c-1];
	for (int i = c-1; i > 1; i--) {
		a[p2][i] = a[p2][i - 1];
	}
	a[p2][1] = 0;
	//lower purifier down
	int down = a[r - 1][c - 1];
	for (int i = r; i > p2; i--) {
		a[i][c-1] = a[i - 1][c-1];
	}
	a[p2+1][c-1] = right;
	//lower purifier left
	left = a[r - 1][0];
	for (int i = 0; i < c-1; i++) {
		a[r - 1][i] = a[r - 1][i + 1];
	}
	a[r - 1][c - 2] = down;
	//lower purifier up
	for (int i = p2 + 1; i < r - 1; i++) {
		a[i][0] = a[i + 1][0];
	}
	a[r - 2][0] = left;
}

void expand()
{
	int na[50][50] = { 0, };

	for (int i = 0; i < r; i++) {
		for (int j = 0; j < c; j++) {
			if (a[i][j] != -1 && a[i][j] != 0) {
				int count = 0;
				for (int k = 0; k < 4; k++) {
					int nr = i + dr[k];
					int nc = j + dc[k];

					if (nr >= 0 && nc >= 0 && nr < r && nc < c && a[nr][nc] != -1) {
						na[nr][nc] += a[i][j] / 5;
						count++;
					}
				}
				na[i][j] += a[i][j] - (a[i][j] / 5) * count;
			}
		}
	}
	na[p1][0] = -1;
	na[p2][0] = -1;

	for (int i = 0; i < r; i++) {
		for (int j = 0; j < c; j++) {
			a[i][j] = na[i][j];
		}
	}
}

void printmap()
{
	cout << endl;
	for (int i = 0; i < r; i++) {
		for (int j = 0; j < c; j++) {
			cout << a[i][j] << ' ';
		}
		cout << endl;
	}
	cout << endl;
}

int amount()
{
	int sum = 0;
	for (int i = 0; i < r; i++) {
		for (int j = 0; j < c; j++) {
			sum += a[i][j];
		}
	}
	return sum + 2;
}

int main()
{
	cin >> r >> c >> t;
	
	for (int i = 0;i < r;i++) {
		for (int j = 0;j < c;j++) {
			cin >> a[i][j];
			if (a[i][j] == -1) {
				purifier.push_back(i);
			}
		}
	}
	p1 = purifier[0];
	p2 = purifier[1];

	for (int i = 0; i < t; i++) {
		expand();
		//printmap();
		move();
		//printmap();
	}

	cout << amount() << endl;

	return 0;

}

댓글을 작성하려면 로그인해야 합니다.