23.01.20 16:57 작성
·
494
0
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
고민하다가 이렇게 하면 될 거 같아서 해봤는데, 런타임 에러가 발생합니다. 논리만 보면, 강사님이랑 비슷한 거 같은데, 완전 잘못간것일까요??
http://boj.kr/34380871ba87499d9065179a1e49a024
답변 2
0
2023. 01. 21. 05:56
안녕하세요 kim님 정말 잘 짜셨네요 ㅎㅎ
kim님 코드 중에 이것만 수정해서 제출해보실까요?
vector<int>visit_ok[10001];
다음과 같이 맞았다고 뜰껍니다.
http://boj.kr/91d4b35ef96a47b384598b5c8cc4ab3f
이 문제의 범위를 보면 10000번이 나타날 수 있기 때문에 배열의 범위를 10001 이상으로 잡으셔야 합니다.
N은 10,000보다 작거나 같은 자연수
컴퓨터는 1번부터 N번까지 번호가 하나씩 매겨져 있다.
이게 사실 자주 실수하는 부분인데 이 부분에 관한 내용은 교안에도 있는데요.
배열의 범위는 항상 +1, +4정도 좀 더 넓게 잡으시는게 맞왜틀에서 빠져나올 수 있어요. (교안 다시 참고 부탁드려요)
나머지 코드는 완벽합니다.
설 잘보내세요 ㅎㅎ
감사합니다.
0
2023. 01. 20. 18:45
음.. 이 문제를 왜 visited 없이 풀 수 있다고 생각하시나요?
시간초과 말구요. visited없이 하면 무한루프 발생할텐데요.
제가 디버깅코드를 좀 작성해봤거든요. 참고부탁드립니다.
#include <bits/stdc++.h>
using namespace std;
int n, m, a, b;
vector<int>visit_ok[10000];
int cnt;
//map<int, int>mm;
vector<pair<int, int>> v;
void dfs(int here)
{
cout << "HERE : " << here << '\n';
for (int i : visit_ok[here])
{
if (i >= 1)
{
dfs(i); cnt++;
}
}
}
bool cmp(pair<int, int>a, pair<int, int>b) // 정렬공부 다시해야함. 필수!
{
if (a.second == b.second) return a.first < b.first;
// < 면, 오름차순 || > 면, 내림차순
return a.second > b.second;
}
int main(void)
{
cin >> n >> m;
for (int i = 0; i < m; i++)
{
cin >> a >> b;
visit_ok[b].push_back(a);
// 이러면 b의 것이 갈 수 있는 곳들이 뜨겠지.
}
for (int i = 1; i <= n; i++)
{
cnt = 0;
dfs(i);
v.push_back({ i,cnt });
}
sort(v.begin(), v.end(), cmp);
int _max = -1;
for (int i = 1; i <= n; i++)
{
_max = max(_max, v[i].second);
}
//for (int i = 0; i < v.size(); i++)
//{
// cout << v[i].first << ' ';
//}
for(int i = 0 ; i < v.size() ; i++)
{
if (_max == v[i].second)
{
cout << v[i].first << ' ';
}
else break;
}
}
TC는 다음과 같습니다.
5 2
3 1
1 3
감사합니다.
2023. 01. 21. 02:59
http://boj.kr/b85b560b22f84a49afb83d72cb2269c9
이렇게 했는데, 왜 런타임 에러가 발생할까요..??