본문 바로가기

프로그래밍 언어/C, C++

[Hackerrank] 09. Variable Sized Array

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