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

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

최정은님의 프로필 이미지
최정은

작성한 질문수

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

40. 교집합 (투포인터 알고리즘 : MS인터뷰 제한시간 1초)

질문있습니다.

해결된 질문

작성

·

313

0

시간초과와 상관없이 다음과 같은 코드를 만들어보았는데 제대로 작동이 안됩니다. 어디가 잘못된 것인가요?

#include<stdio.h>

#include<vector>

using namespace std;

int main(){

   freopen("input.txt", "rt", stdin);

   int n, m, i, k, cnt=0, tmp;

   scanf("%d", &n);

   vector<int> a(n);

   for(i=0; i<n; i++){

      scanf("%d", &a[i]);

   }

   scanf("%d", &m);

   vector<int> b(m);

   for(i=0; i<m; i++){

      scanf("%d", &b[i]);

   }

   vector<int> c(n+m);

   for(i=0; i<n; i++){

      for(k=0; k<m; k++){

         if(a[i]==b[k]){

            c[i]=a[i];

            cnt++;

         }

      }

   }

   for(i=0; i<cnt-1; i++){

      for(k=i+1; i<cnt; i++){

         if(c[i]>c[k]){

            int tmp;

            tmp=c[i];

            c[i]=c[k];

            c[k]=tmp;

         }

      }

   }

   for(i=0; i<cnt; i++){

      printf("%d ", c[i]);

   }

   

   return 0;

}

답변 1

1

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^ 아래 첨삭해놓았습니다.

#include<stdio.h>

#include<vector>

using namespace std;

int main(){

   freopen("input.txt", "rt", stdin);

   int n, m, i, k, cnt=0, tmp;

   scanf("%d", &n);

   vector<int> a(n);

   for(i=0; i<n; i++){

      scanf("%d", &a[i]);

   }

   scanf("%d", &m);

   vector<int> b(m);

   for(i=0; i<m; i++){

      scanf("%d", &b[i]);

   }

   vector<int> c(n+m);

   for(i=0; i<n; i++){

      for(k=0; k<m; k++){

         if(a[i]==b[k]){

            c[i]=a[i];  //c[cnt]=a[i]로 해야 c배열에 0번부터 차례대로 교집합 원소가 저장됩니다.

            cnt++;

         }

      }

   }

   for(i=0; i<cnt-1; i++){

      for(k=i+1; i<cnt; i++){ // k로 해야하는데 i로 오타를 했습니다.

         if(c[i]>c[k]){

            int tmp;

            tmp=c[i];

            c[i]=c[k];

            c[k]=tmp;

         }

      }

   }

   for(i=0; i<cnt; i++){

      printf("%d ", c[i]);

   }

   

   return 0;

}

최정은님의 프로필 이미지
최정은

작성한 질문수

질문하기