해결된 질문
작성
·
55
답변 2
1
안녕하세요 마영님 ㅎㅎ
코드 각각 주석 달았습니다. 참고해보시겠어요?
#include <bits/stdc++.h>
using namespace std;
bool visited[10000];
vector<int> v[100000];
vector<pair<int, int>> vRet;
int n, m, a, b, cnt;
// vertex 매개변수는 불필요합니다.
void DFS(vector<int> vertex, int visitedIndex)
{
visited[visitedIndex] = true;
++cnt;
for (int i = 0; i < vertex.size(); ++i)
{
if(!visited[vertex[i]])
{
DFS(v[vertex[i]], vertex[i]);
}
}
}
int main()
{
cin >> n >> m;
if (m == 0)
{
for (int i = 1; i <= n; ++i)
{
std::cout << i << " ";
}
//이거 하고 return 0을 해야 합니다.
}
for (int i = 0; i < m; ++i)
{
// a가 b를 신뢰한다.
cin >> a >> b;
v[b].push_back(a);
}
for (int i = 0; i < n; ++i)
{
cnt = 0;
memset(visited, 0, sizeof(visited));
// 방문하지 않았다면 해당 부분 다시 방문해야 합니다. v[i].size가 있더라도
// 예를들어 a <-> b 양방향 간선이 있다 했을 때 a에서 b -> .. 이렇게 탐색해서 b 사이즈가 있더라도 b -> a
// 로가는 부분 탐색 필요
if (v[i].size() && visited[i] == 0)
{
DFS(v[i], i);
vRet.push_back({ i, cnt });
}
}
sort(vRet.begin(), vRet.end(), [](pair<int, int>& left, pair<int, int>& right) -> bool
{
if (left.second == right.second)
{
return left.first < right.first;
}
return left.second > right.second;
});
// 어차피 sort 하면 [0]부분만 돌리면 될 것 같습니다.
for (int i = 0; i < vRet.size(); ++i)
{
if (vRet[0].second == vRet[i].second)
{
std::cout << vRet[i].first << " ";
}
}
return 0;
}
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. mayong0707님.
“맞왜틀” 상황은 코딩 테스트에서 자주 발생하는 문제 중 하나입니다. 작성하신 코드를 기반으로 한 문제의 원인과 해결책을 찾기 위해 유사한 사례를 참고할 수 있는 몇 가지 게시물을 추천드립니다.
각 링크들에서는 유사한 문제에 대한 다양한 해결 방법과 참고할 만한 조건들을 소개하고 있습니다. 특히 런타임 에러와 맞왜틀 상황은 함수 호출 시의 잘못된 조건 처리나 배열의 부적절한 크기 설정에서 주로 발생하므로, 이러한 요소들을 다시 한번 점검해 보는 것도 도움이 될 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.