' [C/C++] Cos Pro 1급 모의고사 - 꽃피우기 풀이

Programming/C & C++

[C/C++] Cos Pro 1급 모의고사 - 꽃피우기 풀이

mdisprgm 2022. 1. 28. 21:48
728x90

제출 후 채점해서 통과된 코드이다.

 

주변에 심을 때 "다음 날"의 숫자를 저장하고

 

다음 날 날짜가 동일한 것만 찾아서 주변을 새로 심는 방식이다.

 

// 다음과 같이 include를 사용할 수 있습니다.
#include <iostream>
#include <string>
#include <vector>

using namespace std;

int solution(vector<vector<int>> garden) {
	int Row = garden.size();
	int Column = garden[0].size();

	int days = 1;
	int zeros = 0;
	while (1) {
		int nextDay = days + 1;
		for (int i = 0; i < Row; ++i) {
			for (int j = 0; j < Column; ++j) {
				if (garden[i][j] == 0) ++zeros;
				else if(garden[i][j] == days) {
					if (i != 0) garden[i - 1][j] = nextDay;
					if (i < Row - 1) garden[i + 1][j] = nextDay;

					if (j != 0) garden[i][j - 1] = nextDay;
					if (j < Column - 1) garden[i][j + 1] = nextDay;
				}
			}
		}
		if (zeros) {
			++days;
		}
		else return days - 1;
		zeros = 0;
	}
}

// 아래는 테스트케이스 출력을 해보기 위한 main 함수입니다.
int main() {
	vector<vector<int>> garden1 = { {0, 0, 0}, {0, 1, 0}, {0, 0, 0} };
	int ret1 = solution(garden1);

	// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
	cout << "solution 함수의 반환 값은 " << ret1 << " 입니다." << endl;

	vector<vector<int>> garden2 = { {1, 1}, {1, 1} };
	int ret2 = solution(garden2);

	// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
	cout << "solution 함수의 반환 값은 " << ret2 << " 입니다." << endl;
}
728x90

'