본문 바로가기
자바 알고리즘/자료구조

동적 배열

by hoshi03 2023. 8. 27.

https://www.codetree.ai/missions/6/problems/process-numeric-commands-5?&utm_source=clipboard&utm_medium=text 

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

ArrayList<T> name = new ArrayList<>();  형태로 동적 배열을 선언

 

add, remove, get, size 등의 인덱스가 있다

 

ArrayList 등 컬렉션에 정의되어 있는 자료구조 순회 - iterator 반복자

ArrayList<Integer> v = new ArrayList<>(); Iterator<Integer> iterator = v.iterator(); 형태로 iterator를 선언하고 

 

iterator.next() <- 다음 원소 출력

 iterator.hasNext(); <- 다음 원소 있는지를 bool로 판단

 while(iterator.hasNext()) {
            Integer num = iterator.next();
            System.out.println(num);          
        }

이렇게 iterator를 이용해서 순회할 수 있다.

 

동적배열 명령어 써보기

 

동적 배열을 이용하여 입력으로 주어지는 명령을 처리하는 프로그램을 작성하여보세요. 명령어 종류는 총 4가지 입니다.

명령어 :

  1. push_back A: 정수 A를 동적 배열의 맨 뒤에 넣는 연산입니다.
  2. pop_back: 맨 뒤에 있는 정수를 하나 삭제합니다.
  3. size: 동적 배열에 들어있는 정수의 개수를 출력합니다.
  4. get k: k번째 숫자를 출력합니다.

입력:

9
push_back 10
push_back 20
get 1
get 2
size
pop_back
size
get 1
size
출력:

10
20
2
1
10
1

 

입력을 받는걸 string 형 arraylist에 nextline으로 받아서 일단 공백기준으로 나누기를 했지만 

정답 풀이처럼 next로 받고 만약 그게 뒤에 push_back 이면 숫자를 입력받는 식으로 하는게 더 좋은 것 같다

 

 

내 코드 

import java.util.*;


public class Main {

    public static void main(String[] args) {
            Main t = new Main();
            Scanner in = new Scanner(System.in);

            ArrayList<String> arr = new ArrayList<>();
            ArrayList<Integer> arr2 = new ArrayList<>();

            int n = in.nextInt();
            for (int i = 0; i <= n; i++){
                String tmp = in.nextLine();
                String[] tmparr = tmp.split(" ");


                if (tmparr[0].equals("push_back")){
                    arr2.add(Integer.parseInt(tmparr[1]));
                }
                else if (tmparr[0].equals("pop_back")) {
                    arr2.remove(arr2.size()-1);
                }
                else if (tmparr[0].equals("size")) System.out.println(arr2.size());

                else if(tmparr[0].equals("get")) System.out.println(arr2.get(Integer.parseInt(tmparr[1])-1));
            }
    }
}

정답 코드

import java.util.Scanner;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        // 변수 선언 및 입력
        int n = sc.nextInt();

        // 동적 배열 선언
        ArrayList<Integer> v = new ArrayList<>(); 
        
        for(int i = 0; i < n; i++) {
            String command = sc.next();

            if(command.equals("push_back")) {
                int num = sc.nextInt();
                v.add(num);
            }
            else if(command.equals("pop_back")) {
                v.remove(v.size() - 1);
            }
            else if(command.equals("size")) {
                System.out.println(v.size());
            }
            else {
                int index = sc.nextInt();
                System.out.println(v.get(index - 1));
            }
        }
    }
}

 

'자바 알고리즘 > 자료구조' 카테고리의 다른 글

ArrayList  (0) 2024.05.18
Single Linked List  (0) 2024.05.18
리스트와 배열의 차이, 리스트 인터페이스  (0) 2024.05.14
iterator, Listiterator  (0) 2023.08.27
LinkedList(이중 연결 리스트)  (0) 2023.08.27