> 개발-IT-인터넷/> JAVA

[해커랭크(HackerRank) JAVA 풀이] - Java Arraylist

jini:) 2023. 9. 27. 22:50
728x90
반응형
해커랭크 - https://www.hackerrank.com/
Prepare > Java > Data Structures > Java Arraylist
 

HackerRank

HackerRank is the market-leading technical assessment and remote interview solution for hiring developers. Learn how to hire technical talent from anywhere!

www.hackerrank.com

 

때로는 동적 크기 배열을 사용하는 것이 더 좋습니다. Java의 Arraylist는 이 기능을 제공할 수 있습니다. Arraylist를 사용하여 이 문제를 해결해 보십시오.

n 줄이 주어집니다. 각 줄에는 0개 이상의 정수가 있습니다. x번째 줄의 y번째 위치에 있는 숫자를 알려야 하는 몇 가지 질문에 답해야 합니다.

System.in에서 입력하십시오.

 

Input Format

첫 번째 줄에는 정수 n이 있습니다. 다음 n 줄 각각에는 해당 줄의 정수 수를 나타내는 정수 d가 있고 공백으로 구분된 정수 d가 있습니다. 다음 줄에는 쿼리 수를 나타내는 정수 q가 있습니다. 각 쿼리는 두 개의 정수 x와 y로 구성됩니다.

 

Constraints

  • 1 <= n <= 20000
  • 0 <= d <= 50000
  • 1 <= q <= 1000
  • 1 <= x <= n

각 숫자는 부호 있는 정수에 맞습니다.
n 줄에 있는 정수의 총개수는 10⁵를 넘지 않습니다.

 

Output Format

각 줄에서 x번째 줄의 y번째 위치에 있는 숫자를 출력합니다. 그러한 위치가 없으면 "ERROR!"를 출력하세요.

 

 

Sample Input

5
5 41 77 74 22 44
1 12
4 37 34 36 52
0
3 20 22 33
5
1 3
3 4
3 1
4 3
5 5

 

Sample Output

74
52
37
ERROR!
ERROR!

 

Explanation

아래 다이어그램은 쿼리를 설명합니다.

[출처] https://www.hackerrank.com/challenges/java-arraylist/problem

 

 

Code

import java.io.*;
import java.util.*;

public class Solution {

    public static void main(String[] args) {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
        Scanner scn = new Scanner(System.in);
        
        int n = scn.nextInt();
        
        ArrayList<ArrayList> lines = new ArrayList<ArrayList>();
        
        for(int i=0; i<n; i++) {
            int d = scn.nextInt();
            ArrayList<Integer> line = new ArrayList<Integer>();
            for(int j=0; j<d; j++) line.add(scn.nextInt());
            lines.add(line);            
        }
        
        int q = scn.nextInt();
        
        for(int i=0; i<q; i++) {
            int x = scn.nextInt();
            int y = scn.nextInt();
            try {
                System.out.println( lines.get(x-1).get(y-1) );
            }
            catch(IndexOutOfBoundsException e) {
                System.out.println("ERROR!");
            }
        }
    }
}

 

 

ArrayList 특징
1. 크기 가변성 (Dynamic Sizing) : 배열과 유사하지만 크기가 가변적. 필요에 따라 요소를 추가하거나 제거할 수 있음. 크기 조절은 자동으로 처리.
2. 제네릭 타입 (Generics) : 제네릭 클래스로 구현되어 있어, 다양한 데이터 유형을 저장. 예를 들어, ArrayList<Integer>는 정수를 저장하는 리스트. ArrayList<String>은 문자열을 저장하는 리스트.
3. 빠른 임의 접근 (Fast Random Access) : 배열로 구현되어 있으므로 임의의 요소에 빠르게 접근 가능. 인덱스를 사용하여 요소를 검색하거나 수정하는 데 효율적.
4. 요소 순회 (Element Iteration) : 반복문을 사용하여 모든 요소를 순회하는 데 적합. 루프를 활용하여 요소에 접근하고 처리 가능.
5. 자동 박싱/언박싱 (Autoboxing/Unboxing) : 기본 데이터 유형을 사용할 수 있지만 내부적으로 객체를 다루기 때문에 자동 박싱 및 언박싱이 발생할 수 있음. 기본 데이터 유형과 객체 간의 변환을 자동으로 처리.
6. 동기화 지원 (Synchronization Support) : 멀티 스레드 환경에서 사용할 때 동기화가 필요. Collections.synchronizedList() 메서드를 사용하여 동기화된 ArrayList를 생성.
7. Null 요소 허용 (Allows Null Elements) : null 값을 요소로 허용. 따라서 null 값 저장 가능.

 

 

개인 공부를 위한 포스팅입니다.
모든 번역, 코드는 완벽하지 않을 수 있습니다.

 

 

 

728x90
반응형