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가지 입니다.
명령어 :
- push_back A: 정수 A를 동적 배열의 맨 뒤에 넣는 연산입니다.
- pop_back: 맨 뒤에 있는 정수를 하나 삭제합니다.
- size: 동적 배열에 들어있는 정수의 개수를 출력합니다.
- 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 |