본문 바로가기
algorithm/SW Expert Academy

[모의 SW 역량테스트] 등산로 조성 - 1949

by 에어컨조아 2019. 12. 23.

문제 : https://swexpertacademy.com/main/code/problem/problemDetail.do

 

SW Expert Academy

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

swexpertacademy.com

 

코드 : 

#include <iostream>
#include <vector>

using namespace std;

int N, K = 0;
int num[8][8] = { 0 };
vector<std::pair<int, int>> temp;
bool check[8][8] = { false };
int maxCount = 0;
bool indexCheck = true;
int arr[4][2] = {
	{-1,0},
	{0, -1},
	{0, 1},
	{1,0}
};

// count =방문길이 , i= 행 , j = 가로 , rev = 이전값
void solution(int count, int i, int j, int rev)
{
	check[i][j] = true;
	//성공조건
	if (maxCount < count)
	{
		maxCount = count;
	}
	//상하좌우 탐색
	for (int c = 0; c < 4; c++)
	{
		int row = i + arr[c][0];
		int col = j + arr[c][1];

		if ((row >= 0 && row < N) && (col >= 0 && col < N))
		{
			if (check[row][col] == false)
			{
				if (rev > num[row][col])
				{
					solution(count + 1, row, col, num[row][col]);
					check[row][col] = false;
				}
					
				if (indexCheck)
				{
					for (int k = 1; k <= K; k++)
					{
						if (rev > num[row][col] - k)
						{
							indexCheck = false;
							solution(count + 1, row, col, num[row][col] - k);
							indexCheck = true;
							check[row][col] = false;
							break;
						}
					}
					
				}
			}
		}
	}
}

int main()
{
	int count = 0;
	cin >> count;
	int c = 1;

	while (c <= count)
	{
		cin >> N >> K;
		maxCount = 0;
		int max = 0;
		for (int i = 0; i < N; i++)
		{
			for (int j = 0; j < N; j++)
			{
				cin >> num[i][j];
				if (max < num[i][j])
				{
					temp.clear();
					max = num[i][j];
				}
				if (max == num[i][j])
				{// 최대값에 속한 인덱스만 저장
					temp.push_back(std::pair<int, int>(i, j));
				}
			}
		}
		for (auto v : temp)
		{
			solution(1, v.first, v.second, num[v.first][v.second]);
			check[v.first][v.second] = false;
		}
		cout << "#" << c << " " << maxCount << endl;
		c++;
	}

	return 0;
}

 전체적으로 문제를 이해하고 설계 및 코딩까지 완료하는데 걸리는 시간은 1시간 정도?

하지만 정확도가 없었다. 테스트케이스 50개중 48개만 통과한 상황이였다.

이번에도 문제를 잘못 이해한 상황이였다.

최대 K깊이만큼 깎을 수 있다 => K깊이만큼 깎아야 한다.로 이해해 버린것..ㅠ

이런 실수들을 모아서 내용을 정리좀 해야될 것 같다. 그럼 나중에 시험볼때 조금이라도 도움되지 않을까..?

P.S 문제를 다 풀고 테스트케이스에서 막히면 진짜 답답하다.. 물론 주어진 테스트케이스라면 몰라도 보이지않는 테스트케이스에서는 진짜.. 너무 힘들다.. ㅠㅠ 

댓글