강의

멘토링

커뮤니티

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

JaeYoung Jo님의 프로필 이미지
JaeYoung Jo

작성한 질문수

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

2-S

풀이 코드 질문

작성

·

16

0

안녕하세요

1325번 문제 풀이 중 제 코드에서 잘못된 부분을 찾고 싶어 질문드립니다.

 

http://boj.kr/98142efdf609498d86b6cffc1947dee5

 

testcase.ac 및 몇 개의 반례도 넣어봤는데 못찾겠습니다.

 

어디가 왜 틀렸는지 궁금합니다.

 

항상 강의 잘 보고 있습니다. 감사합니다.

답변 2

0

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

안녕하세요 ㅎㅎ

		if (a == b) {
			v[b].push_back(n + 1);
		}

혹시 이거 왜 이렇게 하셨는지 부연 설명 가능하실까요?

저기 n + 1을 넣으면 결국

	if (visited[root]) return ;

여기서 오버플로 발생되지 않을까요?

 

감사합니다.

JaeYoung Jo님의 프로필 이미지
JaeYoung Jo
질문자

문제의 값 범위부터 확인했어야 하는데.. 다시 알려주셔서 감사합니다.


자기 자신을 신뢰하는 경우에 n + 1을 자식 노드로 달고 n보다 큰 노드를 순회하지 않도록 하려 했는데 질문드린 코드에 로직이 빠져있었고 나중에 visited에서 루프가 방어되어 불필요하다고 생각해 수정했습니다.

 

코드 상 문제가 2가지 있었습니다.

  1. 말씀해주신 오버플로우

  2. comp 함수 로직

  1. 오버플로우


    같은 경우는 백준 내부 TC에서 a ==b (동일 컴퓨터 신뢰)를 안하는지, 10001을 참조했는데 운좋게 Undefined Behavior가 도와준건지 벡터 사이즈 10001에 n + 1 기존 로직 그대로 넣어도 통과했습니다.
    http://boj.kr/c9f5a23e43a8437faf01e8ab22ade613

  2. comp 함수 문제


    컴퓨터 3, 5, 2가 모두 10대를 해킹할 수 있다면


    정렬 후 순서가 {3, 10}, {2, 10}, {5, 10} 이렇게 되어서 코드 수정했습니다.

     

빠른 답변 감사합니다 선생님

0

안녕하세요, 인프런 AI 인턴입니다. JaeYoung Jo님께서 질문주신 내용을 잘 읽어보았습니다.

1325번 문제와 관련된 코드를 작성하셨는데, 코드의 어느 부분에서 문제가 생겼는지 확인이 필요하신 것 같습니다. 일반적으로 이러한 문제는 다음의 요소들을 통해 확인할 수 있습니다:

  1. DFS/BFS 로직: 문제 유형이 그래프 탐색일 경우, DFS나 BFS 구현에서 잘못된 동작이 있을 수 있습니다. 예를 들어, 방문한 노드를 잘못 체크하거나 스택/큐 사용에 오류가 있을 수 있습니다.

  2. 경계 조건: 탐색하는 과정에서 배열의 인덱스가 잘못되는 경우가 있습니다. 이는 주로 경계를 초과하는 경우나 방문 체크 로직에서 발생할 수 있습니다.

  3. 초기화 문제: 글로벌 변수를 여러 차례 사용할 경우, 매번 초기화되지 않으면 이전 단계의 값이 남아 있을 수 있습니다.

  4. 데이터 입력 문제: 입력 데이터가 예상과 다르게 처리될 경우, 입력 받는 방식을 다시 검토해 보는 것도 좋습니다.

문제에 대한 보다 구체적인 도움이 필요하시다면, 다음 자료들을 같이 참고해 보시는 걸 추천드립니다:

위의 링크를 참조하면 구체적인 코딩 컨셉이나 일반적인 문제 패턴에 대한 이해를 돕는데 유용할 것입니다. 추가로, 코드를 더 많이 테스트 케이스로 실행해본다면 더 다양한 반례와 문제점을 발견할 수 있을 것입니다.

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

JaeYoung Jo님의 프로필 이미지
JaeYoung Jo

작성한 질문수

질문하기