본문 바로가기

알고리즘 · 코딩

[SWEA 1861] 정사각형 방

문제 링크

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LtJYKDzsDFAXc

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


C++풀이

#include <string>
#include <iostream>
#include <vector>
using namespace std;

vector<vector<int>> rooms;
vector<vector<bool>> visited; //방들의 방문 여부 기록

int visitRoomN(int i, int j, int currentVisitN) {
	int maxVisitN = currentVisitN;
	int n;

	visited[i][j] = true; //현재 방문한 방에 대한 방문표시

	if ((i > 0) && (rooms[i-1][j] == rooms[i][j] + 1)){ //상 방문
		n = visitRoomN(i - 1, j, currentVisitN + 1);
		if (n > maxVisitN)
			maxVisitN = n;
	}

	if ((i < rooms.size() - 1) && (rooms[i + 1][j] == rooms[i][j] + 1)) { //하 방문
		n = visitRoomN(i + 1, j, currentVisitN + 1);
		if (n > maxVisitN)
			maxVisitN = n;
	}

	if ((j > 0) && (rooms[i][j - 1] == rooms[i][j] + 1)) { //좌 방문
		n = visitRoomN(i, j - 1, currentVisitN + 1);
		if (n > maxVisitN)
			maxVisitN = n;
	}

	if ((j < rooms.size() - 1) && (rooms[i][j+1] == rooms[i][j] + 1)) { //우 방문 
		n = visitRoomN(i, j + 1, currentVisitN + 1);
		if (n > maxVisitN)
			maxVisitN = n;
	}

	return maxVisitN;
}

int main() {
	int maxVisitN, maxRoomN;
	string answer = "";
	int T, N, visitN, roomN;
	cin >> T;

	for (int i = 1; i <= T; i++) {
		maxVisitN = 0; maxRoomN = 0;
		cin >> N;
		rooms.resize(N);
		visited.resize(N);
		for (int j = 0; j < N; j++) {
			rooms[j].resize(N);
			visited[j].assign(N, false);
			for (int k = 0; k < N; k++)
				cin >> rooms[j][k];
		}
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N; j++) {
				if (!visited[i][j]) { //이전에 방문하지 않은 방인 경우에만 방문
					roomN = rooms[i][j];
					visitN = visitRoomN(i, j, 1);
					if ((visitN > maxVisitN) || ((visitN == maxVisitN) && (roomN < maxRoomN))) {
						maxVisitN = visitN;
						maxRoomN = roomN;
					}
				}
			}
		}
		answer += "#" + to_string(i) + " "  + to_string(maxRoomN) + " " + to_string(maxVisitN) + "\n";
	}
	cout << answer;
	return 0;
}

 

 

 

반응형

'알고리즘 · 코딩' 카테고리의 다른 글

[SWEA 8658] Summation  (0) 2020.06.03
[SWEA 8821] 적고 지우기  (0) 2020.06.02
[SWEA 7829] 보물왕 태혁  (0) 2020.05.26
[SWEA 4406] 모음이 보이지 않는 사람  (0) 2020.05.26
[프로그래머스] 모의고사  (0) 2020.05.25