09. Variable Sized Array
[ 난이도: Easy | 분야: Introduction ]
1. 내용 정리
n개의 요소를 가진 배열이 있다고 생각하자. 배열의 인덱스 i는 배열의 ki 정수를 포함하고 있다.
설명 부분의 다이어그램을 참조하라.
2. 과제
과제 설명
주어진 a 에 대해, q 쿼리를 답하라. 각 쿼리는 포맷 i j 에 포함되고, i는 배열 a의 인덱스를 의미한다.
그리고 j 는 a[i]에 위치한 인덱스를 의미한다.
각 쿼리에서 a[i]에 있는 요소 j를 찾아낸 다음 새로운 줄에 출력하라.
입력 형식
첫 줄에는 두 개의 공백으로 분리된 정수를 포함하고 있다. 이 정수는 배열의 크기인 n과 쿼리의 개수인 q를 의미한다.
n subsequent line의 각 줄 i는 공백으로 분리된 시퀀스를 포함하고 있다. 이 시퀀스는 a[i]0 a[i]1 ... a[i]k-1의 k개의 요소를 포함하고 있는 배열 a[i]를 의미한다.
각 q subsequent line은 두 개의 공백으로 분리된 정수를 포함하고 있다. 하나는 a의 인덱스를 나타낸 i를 의미하고, a[i]의 인덱스를 나태는 j를 의미한다.
제약 사항
- n은 1보다 크거나 같고 10^5보다 작거나 같다.
- q는 1보다 크거나 같고 10^5보다 작거나 같다.
- k는 1보다 크거나 같고 3*10^5보다 작거나 같다.
- k의 합은 n보다 크거나 같고 3*10^5보다 작거나 같다.
- i는 0보다 크거나 같고 n보다 작거나 같다.
- j는 0보다 크거나 같고 k보다 작거나 같다.
- 모든 indices는 zero-based이다.
- 모든 주어진 숫자는 음수가 아니고 10^6보다 크지 않다.
출력 형식
각 i와 j 값들에 대해, 각 단일 정수를 출력해라.
a[ i ]의 인덱스 j를 출력해라.
여기에는 총 q개의 출력 줄이 있어야 한다.
입력 예시
2 2
3 1 5 4
5 1 2 8 9 3
0 1
1 3
출력 예시
5
9
설명
아래 다이어그램은 입력 예시의 구조를 보여준다.
q=2 쿼리에 대해:
1) 인덱스 i = 0, a[0] = [1,5,4]. 여기서 j = 1을 출력해야 하고, 그 숫자는 5다.
2) 인덱스 i = 1, a[1] = [1,2,8,9,3]. 여기서 j = 3을 출력해야 하고, 그 숫자는 9다.
문제
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
return 0;
}
정답
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
// save n
int n = 0;
cin >> n;
// save q
int q = 0;
cin >> q;
// save array
cin.ignore();
int myArraySize[n];
vector<vector<int>> myTotalArr;
for(int i=0;i < n; i++) {
cin >> myArraySize[i];
vector<int> myArr;
for (int j=0; j < myArraySize[i]; j++) {
int thisValue;
cin >> thisValue;
myArr.push_back(thisValue);
}
myTotalArr.push_back(myArr);
cin.ignore();
}
// Printing Info.
vector<vector<int>> printInfo;
for (int i=0; i < q; i++) {
vector<int> myIndex;
int index_i = 0;
int index_j = 0;
cin >> index_i >> index_j;
myIndex.push_back(index_i);
myIndex.push_back(index_j);
cin.ignore();
printInfo.push_back(myIndex);
}
// Print out
for (int j = 0; j < q; j++) {
cout << myTotalArr[printInfo[j][0]][printInfo[j][1]] << endl;
}
return 0;
}
ⓒ Hackerrank. All Rights Reserved.
'프로그래밍 언어 > C, C++' 카테고리의 다른 글
[Hackerrank] 11. Strings (0) | 2024.02.08 |
---|---|
[Hackerrank] 10. StringStream (0) | 2024.02.08 |
[Hackerrank] 08. Arrays Introduction (0) | 2024.02.06 |
[Hackerrank] 07. Pointer (0) | 2024.02.05 |
[Hackerrank] 06. Functions (1) | 2024.02.05 |