강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

16wjdekdms님의 프로필 이미지
16wjdekdms

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

3-H

3-h 코드 질문입니다.

해결된 질문

작성

·

29

0

안녕하세요!

강의를 보고 혼자서 풀었는데 조금식 다르기는 하지만 전체적인 흐름은 큰돌님 코드와 똑같다고 생각합니다.
하지만 왜인지 자꾸 틀렸다고 뜨네용..

#include <bits/stdc++.h>
using namespace std;

int n, k;
queue<int> q;
int visited[200004];
int arr[200004];
int t;

int ret;

int main() {
	cin >> n >> k;

	if (n == k) {
		cout << 0 << "\n" << 1;
		return 0;
	}

	q.push(n);
	visited[n] = 1;
	arr[n] = -1;

	while (q.size()) {
		t = q.front();
		q.pop();

		if (t == k) {
			break;
		}

		for (int next : {t - 1, t + 1, t * 2}) {
			if (next < 0 || next > 100000) continue;
			if (visited[next]) continue;
			visited[next] = visited[t] + 1;
			arr[next] = t;
			q.push(next);
		}
	}
	int temp = k;
	vector<int> v;
	while (temp != -1)
	{
		v.push_back(temp);
		temp = arr[temp];
	}

	reverse(v.begin(), v.end());

	cout << visited[k] -1 << "\n";

	for (int a : v) {
		cout << a << " ";
	}
}

답변 2

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 16님 ㅎㅎ

arr

이 배열이요. 처음에 전부다 -1로 초기화해야하는게 아닐까요?

 

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

16wjdekdms님께서 공유해 주신 코드에 대한 오류를 찾는 것은 문제가 주어지지 않은 상태에서 해결하기 어려울 수 있지만, 일반적으로 발생할 수 있는 몇 가지 오류를 짚어 드리겠습니다.

문제점 검토

  1. visited 배열의 범위 문제:
    현재 visited 배열은 200004로 설정되어 있지만, 문제에서는 최대 범위를 100000으로 설정했기 때문에 불필요하게 크다고 볼 수 있습니다. 더 안전하게 둔 것으로 이해할 수 있지만, 코드를 작성하고 디버깅하는 데 혼란을 줄 수 있습니다. 사용되지 않는 부분을 최적화하는 것도 하나의 방법입니다.

  2. while문 내 반복 조건:
    while (q.size()) 안에서 t == k일 때만 반복을 끝내는데, break 이후 추가적인 조건이나 로직을 확인하지 않는다는 점을 유념하여 확인하십시오. 그 근처에 있는 break; 문이 로직 상 적절하게 위치했는지 한번 더 점검해 보십시오. 예를 들어 같은 거리에 존재하는 더 여러 경로가 있을 수 있는데, 현재 구문으로는 첫 번째로 찾은 경로가 곧바로 사용됩니다.

  3. 반례 검사:
    초기 본 코드는 계획된 작동을 확인했지만 테스트 케이스가 안 맞다면 범위 내 극단적인 값이나 조건(nk가 아주 클 때 등) 등 다양한 케이스를 시도해 보고 코드를 조금씩 디버깅하며 조정하는 것이 필요합니다.

  4. 출력형식 및 제출 조건 확인:
    혹시 오류가 난 부분이 코드 로직이 아닌, 출력 형식이나 제출 조건에서 비롯된 것은 아닌지도 다시 한번 확인해보세요.

  5. 코드 흐름 리뷰:
    C++ 코드 특성 상 배열이나, 큐의 자료구조 오류 등이 보일 수 있습니다. 각 함수를 디버깅 도구로 하나하나 추적하며 코드 흐름을 분석해보세요.

유용한 디버깅 참고자료

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

16wjdekdms님의 프로필 이미지
16wjdekdms

작성한 질문수

질문하기