2-S
644
작성한 질문수 23
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
고민하다가 이렇게 하면 될 거 같아서 해봤는데, 런타임 에러가 발생합니다. 논리만 보면, 강사님이랑 비슷한 거 같은데, 완전 잘못간것일까요??
http://boj.kr/34380871ba87499d9065179a1e49a024
답변 2
0
아래 댓글 달았습니다. :) 확인하시구 수정하셔서 다시 질문주세요. ㅎㅎ
0
안녕하세요 kim님 정말 잘 짜셨네요 ㅎㅎ
kim님 코드 중에 이것만 수정해서 제출해보실까요?
vector<int>visit_ok[10001];다음과 같이 맞았다고 뜰껍니다.
http://boj.kr/91d4b35ef96a47b384598b5c8cc4ab3f
이 문제의 범위를 보면 10000번이 나타날 수 있기 때문에 배열의 범위를 10001 이상으로 잡으셔야 합니다.
N은 10,000보다 작거나 같은 자연수
컴퓨터는 1번부터 N번까지 번호가 하나씩 매겨져 있다.
이게 사실 자주 실수하는 부분인데 이 부분에 관한 내용은 교안에도 있는데요.
배열의 범위는 항상 +1, +4정도 좀 더 넓게 잡으시는게 맞왜틀에서 빠져나올 수 있어요. (교안 다시 참고 부탁드려요)
나머지 코드는 완벽합니다.
설 잘보내세요 ㅎㅎ
감사합니다.
0
vistied는 안 해도 무관할 것이라 생각했는데, 해보니 시간초과 때문에 반드시 필요함을 확인했습니다. 다만 제가 짠 코드가 완전 잘못 생각한 것인지와 런타임 에러가 cmp부분에서 어떠한 오류 때문에 발생한 것인지, 그 이외에 다른 이유가 있는지 알고싶습니다!
0
음.. 이 문제를 왜 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
감사합니다.
0
visited 없이 해결할 수 있다 생각한 이유는..
3이 1을 신뢰하고, 4가 3을 신뢰하는 경우, dfs(1)을 할 때, 1 -> 3 -> 4 로 가고, cnt++로 해줘서 갯수를 파악할 수 있다고 생각해서였습니다. 여러 개가 있는 경우, 그 모든 걸 어차피 방문해야하는데 라는 생각이 들어서 visited를 사용하지 않은 것 같습니다. 이렇게 상호 신뢰 관계는 생각지 못한 것 같네요. 명쾌한 답변 감사합니다! 좀 더 고민해보겠습니다~
코딩 살구클럽 가입 문의
0
49
2
코딩살구클럽 가입문의
0
57
2
3-K private case 질문
0
56
2
안녕하세요. 코딩살구클럽 문의드립니다!
0
72
2
7:41 듣다가 질문합니다
0
66
2
코드 리뷰 요청드립니다!
0
71
2
코딩살구클럽 계정 문의
0
72
2
SK하이닉스 대비 강의수강
0
206
3
코딩살구클럽 등록부탁드립니다.
0
70
2
7-F 재귀로 풀시 런타임애러
0
67
1
1-N 문제 질문입니다. (+ 채점오류)
0
77
2
코딩살구클럽 가입 확인 부탁드립니다.
0
82
2
직장인 코테 합격 공부방법 문의
0
113
2
코딩살구클럽 가입 방법
0
90
2
6-H 체점 관련 질문
0
72
1
채점서버 연결 관련 질문입니다
0
99
2
삼성 s직군
0
87
1
삼성 코테 없어짐
0
205
1
코딩살구클럽 가입부탁드립니다
0
86
2
코딩살구클럽 가입 요청 확인부탁드립니다
0
66
2
5-S 테스트 케이스 질문
0
72
2
코살 문제풀이 환경
0
84
2
2 - T 오큰수 문제가 있는 것 같습니다.
0
75
1
추천 추가문제들
0
70
2





