문제 설명
주현이 엄마는 주현이를 영재로 키우기 위해 매일 혹독한 기억력 테스트를 하고 있다.
N개의 숫자를 먼저 말해주고, M개의 질문을 하면서 그 숫자가 있었는지 없었는지 테스트한다.
만약 있었다면 1을 출력하고, 없었다면 0을 출력한다.
이번에는 주현이가 좋아하는 3단 합체 변신로봇 '또봇 트라이탄'이 선물로 걸려있다.
주현이를 도와 줄수 있는 프로그램을 만드시오.
입력
첫째줄에 N이 입력된다. (1 <= N <= 10,000,000)
둘째 줄에 N개의 숫자가 공백으로 구분되어 차례대로 입력된다. ( 데이터값의 범위 : 1 ~ 10,000,000)
셋째줄에 질문의 수 M이 입력된다. ( 1 <= M <= 100,000)
넷째 줄에 M개의 질문이 입력된다.
출력
M개의 각각의 질문에 대해 그 숫자가 있었으면 1을 출력, 없었으면 0을 하나씩 차례대로 출력한다.
입력 예시
5
2 52 23 55 100
4
5 2 55 99
출력 예시
0 1 1 0
#include <iostream>
using namespace std;
int arr[10000000] = { 0 };
int main() {
int n, m;
cin >> n;
for (int i = 0; i < n; i++) {
int temp;
scanf("%d",&temp);
arr[temp] = 1;
}
cin >> m;
for (int i = 0; i < m; i++) {
int temp;
scanf("%d",&temp);
printf("%d ",arr[temp]);
}
}
가끔 이런 비슷한 유형의 문제가 보인다.
배열에 입력받는 값을 넣는게아니라, 입력받는 값을 배열의 인덱스로 생각하고, 그 인덱스에 대해 값을 조작하는 문제다.
따라서 만약 3개의 수 1,4,5를 입력 받았을시 arr[1], arr[4], arr[5]의 값을 1로 바꾸는것이다.
그리고 그 다음에 2개의 수 1,5,7을 입력 받았을시 arr[1], arr[5], arr[7]을 출력하면 1 1 0 이 출력된다.
여기서 중요한것은, 배열을 전역변수로 해야한다.
main에서 오버플로가 나는 것 같다.
'PS > CodeUp' 카테고리의 다른 글
CodeUp / 1차원 배열 / 1440번 / 비교 / C++ (0) | 2020.10.03 |
---|---|
CodeUp / 1차원 배열 / 1425번 / 자리 배치 / C++ (0) | 2020.10.03 |
CodeUp / 1차원 배열(?) / 1420번 / 3등 찾기 / C++ (0) | 2020.10.03 |
CodeUp / 1차원 배열 / 1416번 / 2진수 변환 / C++ (0) | 2020.10.03 |