인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

Inflearn Community Q&A

gimg61564816's profile image
gimg61564816

asked

10-Week C++ Coding Test | Algorithm Coding Test

4-C and various types of functions

4-C질문있습니다

Written on

·

75

·

Edited

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

#include<iostream>
#include<algorithm>
#include<vector>
#include<utility>

using namespace std;

int n,person[14],ret =987654321,temp,temp1,visited[14],comp[14];
string s;
vector<int> adj[14];

pair<int,int> dfs(int here, int value){//인접구 개수, 인구수 반환
   visited[here] =1;
   pair<int,int> ret = {1,person[here]};
   for(int there:adj[here]){        
      if(comp[there] != value) continue;
      if(visited[there]) continue;
      pair<int,int> temp_ = dfs(there,value);
      ret.first +=temp_.first;
      ret.second += temp_.second;
   }
   return ret;
}


int main()
{
   ios_base::sync_with_stdio(false);
   cin.tie(NULL);
   cout.tie(NULL);
   cin>>n;
   for(int i =1; i<=n;i++){
      cin>>person[i];
   }
   for(int i =1;i<=n;i++){
      cin>>temp;
      for(int j =0; j<temp;j++){
         cin>>temp1;
         adj[i].push_back(temp1);
         adj[temp1].push_back(i);
      }
   }
   for(int i =1;i<(1<<n)-1; i++){
      fill(&comp[0],&comp[0]+14,0);
      fill(&visited[0],&visited[0]+14,0);
      int idx1=-1,idx2 =-1;
      for(int j =0; j<n;j++){
         if(i&(1<<j)){
            comp[j+1]=1;
            idx1 = j+1;
         }
         else idx2 = j+1;
      }
      pair<int,int> comp1 = dfs(idx1,1);
      pair<int,int> comp2 = dfs(idx2,0);
      if(comp1.first+comp2.first == n) ret = min(ret,abs(comp1.second-comp2.second));
   }
   cout<<(ret==987654321 ? -1:ret);
   return 0;
}


저는 이렇게 백준에 제출했을때 맞았다고 나오는데 제 vscode에서는
예제에서 밑에 만큼 입력하면 -1이 출력되어 끝나 버립니다 왜 그런건가요..? 다른 문제 풀때도 정답은 맞지만 제가 실행하면 도중에 입력을 그만 받습니다.. ㅠㅠ

6
5 2 3 4 1 2
2 2 4
4 1 3 6 5
c++코딩-테스트

Answer 3

0

gimg61564816님의 프로필 이미지
gimg61564816
Questioner

아뇨.. 이전에 대학교에서 배울때 하던대로 세팅 되어있습니다. 컴파일 옵션을 교안대로 하고 싶지만 제 노트북은 윈도우이고 vscode는 맥북에서만 설명되어 있길래 시도하다가 실패했습니다...

kundol님의 프로필 이미지
kundol
Instructor

노트북이 윈도우이시면 제 교안에 있는 설명되어있는 DEVC++로 설치해서 진행부탁드립니다. 윈도우의 경우 다른 프로그램 - 컴파일이 이상한 에러가 많이 나서요.. DEVC++이 그나마 안 나더라구요. 이걸로 진행부탁드립니다.

0

kundol님의 프로필 이미지
kundol
Instructor

안녕하세요 ㅎㅎ

음.. 저는 잘 받아집니다.

스크린샷 2025-03-05 오전 8.53.16.png.webp

스샷 공유가능할까요?

어떤 컴파일러인지도 말씀 부탁드립니다.

gimg61564816님의 프로필 이미지
gimg61564816
Questioner

결과값.png.webp

위 사진이 결과값이고

컴파일러.png.webp

이 사진이 제가 설치한 컴파일러입니다..!

 

kundol님의 프로필 이미지
kundol
Instructor

이상하네요... 흠... 혹시 컴파일 옵션 제 교안에 써있는대로 하셨나요?

0

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

gimg6156님, 질문해 주셔서 감사합니다. 코드가 백준에서 맞았지만, 비주얼 스튜디오 코드(VSCode)에서는 입력 도중에 프로그램이 종료되는 문제가 발생한다는 점에 대해 답변드리겠습니다.

문제의 기본 원리

주어진 코드는 n개의 구역에서 인구의 차이를 최소화하면서 두 그룹으로 나누는 문제를 해결하려 하고 있습니다. DFS를 사용하여 각 그룹 내부의 연결성과 인구 수를 계산합니다.

문제 가능성 및 해결책

  1. 입출력 설정 문제:

    • ios_base::sync_with_stdio(false);cin.tie(NULL);는 기본 cincout의 동기화를 해제하여 속도를 높이는 설정입니다. 이는 입력과 출력을 번갈아가며 사용할 때 문제를 일으킬 수 있습니다.
    • VSCode에서 실행할 때 이 설정을 유지하면서 입력이 제대로 이루어지는지 확인해 보세요. 초기에 cin/cout를 빈번히 사용하는 것을 피하고, 많은 데이터를 빠르게 넣을 때는 주의해야 합니다.
  2. 빠진 입력:

    • VSCode에서 입력을 수동으로 넣을 때 모든 입력이 제공되기 전에 프로그램이 종료될 수 있습니다. 이 문제를 피하기 위해 입력을 한 번에 넣는 방법을 고려해 보세요.
    • 파일에서 읽어오는 방식을 사용하거나, 마치 백준에서처럼 미리 입력을 준비해 놓고 사용하는 것도 하나의 방법입니다.
  3. 디버깅:

    • 프로그램이 예상치 못한 위치에서 종료된다면, 디버깅을 통해 어디서 문제가 발생하는지 확인해 보세요. 디버깅할 때는 cout을 사용해 현재 상태나 변수 값을 출력하여 코드의 흐름을 추적해 보면 도움이 될 것입니다.

관련하여 비슷한 질문과 답변이 있는 질문 링크를 참고해 주세요. 이는 다른 학습자들이 비슷한 문제를 겪었을 때 어떻게 해결했는지 알려줄 것입니다.

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

gimg61564816's profile image
gimg61564816

asked

Ask a question