페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#3345
인터랙티브

거기있니? (Is there?) 2s 128MB

문제

 

1 ~ N까지의 정수 중에서 K개를 중복되지 않게 골라내어 임의의 순서로 나열한 수열 entry[]가 있다.

( 1000 <= N <= 100,000,  N/2 <= K <= N)

이 수열에는 과연 어떤 수들이 포함되어 있을까?

 

사용자는 consistOf(int N, int K)함수에서  main.cpp에 선언된 countSameNumber(guess[]) 함수를 이용하여 entry​[]배열에 대한 힌트를 얻을 수 있다.

countSameNumber(int guess[]) 함수​는 guess[]에서 entry​[]에 포함된 수가 몇번 등장하였는지 등장한 경우의 수를 반환한다. 

자세한 것은 main.cpp 소스를 분석하여 알 수 있다.

 

예를 들어 N=7이고 K=5 라고 하자. 

그리고 entry​[] = {5, 1, 2, 7, 6}라고 하고 guess[] = {2, 2, 3, 1, 4}라고 하자.

이경우 countSameNumber(guess[]) 함수​는 3을 반환한다.

또, guess[] = {7, 7, 7, 7, 7}이라고 하면 countSameNumber(guess[]) 함수​는 5를 반환한다.​

 

이제 main.cpp의 run()함수는 user.cpp의 isEntryNumber( int num )을 호출하여 num이 entry에 포함되어 있는지 질문한다.

isEntryNumber( int num )​함수는 num이 entry에 대하며 포함되어 있다면 1을 그렇지 않다면 0을 반환한다.

 

[해야 할 일]

1. 하나의 프로젝트에 user.cpp파일과 main.cpp 두 개의 파일을 만들어 코딩하도록 한다.

2. user.cpp파일에는 필요하다면 추가적인 변수와 함수을 만들어 사용할 수 있으나 헤더파일을 포함할 수 없다.

3. user.cpp파일에 consistOf(int N, int K)​와 isEntryNumber(int num)​를 정의하여야 한다.

​4. isEntryNumber(int num)는 최대 N번 호출될 수 있다.

5. 소스코드 제출시에는 user.cpp의 내용만 제출한다.​ 

 

 

// main.cpp
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif

#include <stdio.h>

extern void consistOf(int N, int K);
extern int isEntryNumber(int num);

const int MAX = 100000;
static int N, K, entry[MAX + 5];
static int appear[MAX + 5];
static int tCnt;

int countSameNumber(int guess[]) {
	int cnt = 0;
	for (int i = 0; i < K; ++i) {
		if (guess[i] < 0 || guess[i] > MAX) return MAX;
		cnt += appear[guess[i]];
	}
	return cnt;
}

static void input() {
	scanf("%d %d", &N, &K);
	for (int i = 0; i < K; ++i) {
		scanf("%d", entry + i);
		appear[entry[i]] ++;
	}
}

static void run() {
	consistOf(N, K); // 한번 호출
	scanf("%d", &tCnt);
	int num, response;
	for (int i = 0; i < tCnt; ++i) {
		scanf("%d", &num);
		response = isEntryNumber(num);
		printf("%d ", response);
	}
	puts("");
}

int main() {
	freopen("input.txt", "r", stdin);

	input();
	run();
	return 0;
}



// user.cpp
extern int countSameNumber(int guess[]);

void consistOf(int N, int K) {

}

int isEntryNumber(int num) {

	return 0;
}


예제

7 5

5 1 2 7 6
7
7 4 2 5 3 1 6
1 0 1 1 0 1 1

출처

comkiwer

로그인해야 코드를 작성할 수 있어요.