3-H질문
324
작성한 질문수 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점은 제가 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
코딩 살구 클럽 컴파일 에러
0
4
1
추천 문제
0
7
1
코딩살구클럽 승인
0
9
1
코살구 1주차 1940번 문제 조건과 프라이빗 테스트 불일치 문의
0
21
2
문제를 고민하는 시간 관련
0
26
2
코딩살구클럽
0
38
2
코딩살구클럽 문의
0
37
2
코딩살구클럽 승인
0
35
2
DP 경우의 수 설명이 이해가 되지 않습니다.
0
33
2
3-F 채점 관련 질문
0
31
1
BFS, DFS 활용이 되는 상황에서의 방향성
0
33
2
코딩살구클럽 승인
0
45
2
코딩살구클럽승인
0
39
3
코딩살구클럽 승인
0
54
2
3-D 관련 질문
0
35
2
코살구 회원가입 문의
0
45
2
코살구 로그인 문제
0
65
2
3-A 문제 풀이 관련 질문
0
56
3
2-O 질문 있습니다
0
38
2
2-T 문제에 관한 질문
0
40
2
코딩 살구 클럽 접속 및 사용방법 문의
0
63
2
안녕하세요~. 현재 코살코딩클럽 사이트가 접속이 안됩니다~
0
67
2
코딩살구클럽 로그인문제
0
85
3
코딩 살구 클럽 로그인 문제
0
86
2





