본문 바로가기

Algorithm

1238. [S/W 문제해결 기본] 10일차 - Contact

반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15B1cKAKwCFAYD&categoryId=AV15B1cKAKwCFAYD&categoryType=CODE&&&

 

SW Expert Academy

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

swexpertacademy.com

끝 점에서 우선순위로 카운트랑 넘버를 넣어서 카운트 기준으로 1차정렬 넘버 기준으로 2차 정렬 해서 가장 큰 카운트의 가장 큰 넘버를 출력.

 

 

/////////////////////////////////////////////////////////////////////////////////////////////
// 기본 제공코드는 임의 수정해도 관계 없습니다. 단, 입출력 포맷 주의
// 아래 표준 입출력 예제 필요시 참고하세요.
// 표준 입력 예제
// int a;
// float b, c;
// double d, e, f;
// char g;
// char var[256];
// long long AB;
// cin >> a;                            // int 변수 1개 입력받는 예제
// cin >> b >> c;                       // float 변수 2개 입력받는 예제 
// cin >> d >> e >> f;                  // double 변수 3개 입력받는 예제
// cin >> g;                            // char 변수 1개 입력받는 예제
// cin >> var;                          // 문자열 1개 입력받는 예제
// cin >> AB;                           // long long 변수 1개 입력받는 예제
/////////////////////////////////////////////////////////////////////////////////////////////
// 표준 출력 예제
// int a = 0;                            
// float b = 1.0, c = 2.0;               
// double d = 3.0, e = 0.0; f = 1.0;
// char g = 'b';
// char var[256] = "ABCDEFG";
// long long AB = 12345678901234567L;
// cout << a;                           // int 변수 1개 출력하는 예제
// cout << b << " " << c;               // float 변수 2개 출력하는 예제
// cout << d << " " << e << " " << f;   // double 변수 3개 출력하는 예제
// cout << g;                           // char 변수 1개 출력하는 예제
// cout << var;                         // 문자열 1개 출력하는 예제
// cout << AB;                          // long long 변수 1개 출력하는 예제
/////////////////////////////////////////////////////////////////////////////////////////////

#include<iostream>
#include<vector>
#include<queue>
#include<string.h>
using namespace std;

int N,start;
vector<int> vec[101];
bool visit[101];
int datax[10001];


struct Node {

	int cur;
	int next;
	int count;
};

int main(int argc, char** argv)
{
	int test_case;
	
	for (test_case = 1; test_case <= 10; ++test_case)
	{
		cin >> N >> start;
		memset(visit, 0, sizeof(visit));
		for (int i = 1; i <= N; i++)
		{
			vec[i].clear();
		}

		for (int i = 1; i <= N; i++)
		{
			cin >> datax[i];
		}
		
		for (int i = 1; i <= N; i++)
		{
			if (i % 2 == 0)
			{
				bool flag = false;
				for (int j = 0; j < vec[datax[i-1]].size(); j++)
				{
					if (vec[datax[i-1]][j] == datax[i])
					{
						flag = true;
						break;
					}
				}

				if (!flag)
				{
					vec[datax[i-1]].push_back(datax[i]);
				}
			}
		}

		priority_queue<pair<int, int> > pr;
		queue<Node> que;
		

		visit[start] = true;
		for (int i = 0; i < vec[start].size(); i++)
		{
			visit[vec[start][i]] = true;
			que.push({ start,vec[start][i],0 });
		}

		while (!que.empty())
		{
			int cur = que.front().cur;
			int next = que.front().next;
			int count = que.front().count;

			

			que.pop();


			bool flag = false;

			for (int i = 0; i < vec[next].size(); i++)
			{
				if (!visit[vec[next][i]])
				{
					flag = true;
					visit[vec[next][i]] = true;
					que.push({ next,vec[next][i],count + 1 });
				}
				
			}

			if (!flag)
			{
				pr.push({ count,next });
			}
			

		}

		cout << "#" << test_case << " " << pr.top().second << endl;
		
	}
	return 0;//정상종료시 반드시 0을 리턴해야합니다.
}
반응형