3-H질문
317
작성한 질문수 134
http://boj.kr/f1f1a8da0bf348f18816f1df97c07baf
어디가 틀린건지 도저히 모르겠습니다....ㅠㅠ 제가 짠 코드에다가 선생님이 MAX로 설정하신 부분 해서 했는데 답은 나오는데 틀렷다고 뜨는데 어디가 문제인지 모르겠습니다.
그리고 n == m일 경우 어떻게 출력해야하나요...? 일단 시간은 0인것은 알겠는데 그다음에 공백을 출력을 해야할지 아니면 n을 출력을 해야할지를 모르겠습니다.
답변 1
1
안녕하세요 stark님ㅎㅎ
일단.. 이 코드요 조금 다듬어 봤는데요. 다음과 같습니다.
로직은 맞는 것 같습니다. 좋은 아이디어네요.
#include <iostream>
#include <string>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#include <algorithm>
using namespace std;
#define endl "\n"
#define MAX 200004
int n, m, ret, visited[MAX], dx[3] = { -1, 1, 2 };
vector<vector<int>> trace(MAX);
bool Cango(int x)
{
if (x < 0 || x >= MAX) return false;
return true;
}
void BFS(int here)
{
visited[here] = 1;
trace[here].push_back(here);
queue<int> q;
q.push(here);
while (!q.empty())
{
int x = q.front(); q.pop();
if (x == m)
{
ret = visited[x];
break;
}
for (int i = 0; i < 3; ++i)
{
int next = 0;
if (i == 0 || i == 1) next = x + dx[i];
else next = x * dx[2];
if (Cango(next) == false) continue;
if (visited[next] == 0)
{
visited[next] = visited[x] + 1;
q.push(next);
// 이렇게 하면 더 간결합니다.
for(int i : trace[x]){
trace[next].push_back(i);
}
trace[next].push_back(next);
}
}
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n >> m;
if (n == m){
// 이렇게 해도 됩니다.
puts("0");
return 0;
}
BFS(n);
ret = visited[m] - 1;
cout << ret << endl;
for(int i : trace[m]) cout << i << " ";
return 0;
}다만, 이렇게 코드를 짜면요. 공간복잡도가 터져서 틀린게 아닐까 생각이 듭니다.
자, 예를 들어
10만에서 0을 찾아가는 최악의 경우를 생각해볼게요.
10만 사이의 최적의 경로는 1개이지만,
stark님의 코드를 보면
99999에는 2개...
99998개에는 3개...
0에는 10만 1개의 원소가 저장되어야 하는 셈이죠.
즉, 10만 1개까지의 등차수열의 합이니까..
5,000,050,000
이정도의 숫자의 공간이 필요하게 됩니다.
즉, 50억 수준의 공간이 필요하게 되서 안되는 것 같습니다.
하지만 발상 자체는 너무나도 좋고, trace를 배우지 않은 상태에서 이런 발상을 생각해내셨다는 것은 정말 칭찬할 만합니다. ㅎㅎ 잘짜셨어요.
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제가 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
5-B
0
16
2
4 - A
0
33
2
코딩살구클럽 입장이 안됩니다
0
82
2
4-F 경우의 수 질문입니다.
0
35
2
코딩살구클럽 가입이 안됩니다.
0
85
2
살구 클럽에 대한 질문있습ㄴ디ㅏ
0
63
1
교안 158페이지 문의드립니다
0
47
2
코딩살구클럽 관련 건의사항
0
119
1
코살에 19942 다이어트 문제에 N의 범위가 빠져있슴니다
0
45
1
진행 방법 질문드립니다!
0
83
2
2-I) 왜 이 문제가 그래프이론 카테고리에 있는지 잘 모르겠습니다.
0
64
2
2주차 개념#12 트리 순회
0
33
2
백준사이트가 종료된다고 합니다.
0
318
2
백준 서비스 종료
9
953
1
sk 하이닉스 코테 대비
0
388
2
3-G 최댓값 질문
0
54
1
모듈러 연산 값이 10이 아닌 경우도 있지 않나요?
0
84
2
3-I 코드 질문드립니다.
0
66
2
3-N 질문 있습니다.
0
68
2
학습방법
0
105
2
4-H 질문 있습니다 (코드 리뷰)
0
69
2
코딩테스트 어디까지 준비해야 하는지 질문이 있습니다.
0
186
2
2-O 반례가 무엇일지 어떤 부분이 틀렸는지 잘 모르겠습니다.
0
74
2
2주차 개념 #4-2. 인접행렬 질문있습니다.
0
66
2





