https://www.acmicpc.net/problem/29729
문제
가별 배열 : 고정된 크기로 배열 선언한 후, 선언한 배열의 크기가 부족할 경우 배열의 크기를 자동으로 늘려준다.
가변 배열의 작동 원리
- 초기 크기를 원하는 만큼 지정하여 가변 배열을 생성한다. (초기는 비어있는 상태)
- 원소를 저장해야 하는데 가변 배열이 꽉 차 있는 경우, 현재 가변 배열의 크기를 2배에 해당하는 새로운 가변 배열을 선언.
- 새로 생성한 2배 크기의 가변 배열의 맨 앞에 기존 가변 배열에 있는 원소를 모두 복사한 후, 기존 가변 배열을 지우고 새로운 가변 배열로 대체한다. 이후 2번에서 저장하려고 했던 원소를 그 뒤에 저장한다.
다음은 그림으로 이걸 설명한 자료입니다!

이 설명을 참고하여 가변 배열의 초기 크기와, 일련의 원소 저장/삭제 명령이 주어졌을 때,
명령들을 모두 수행한 후 가변 배열의 현재 크기를 출력해주세요.
정답 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] s = br.readLine().split(" ");
int initialSize = Integer.parseInt(s[0]);
int N = Integer.parseInt(s[1]); // 저장 명령 개수
N += Integer.parseInt(s[2]); // 삭제 명령 개수
int size = initialSize;
int curSize = 0;
while(N-- >0) {
int command = Integer.parseInt(br.readLine());
if(command == 1) { // 저장
if(curSize+1>size){
size *= 2;
}
curSize++;
} else { // 삭제
curSize--;
}
}
System.out.println(size);
}
}
풀이 설명
가변 배열에 대한 이해만 확실하다면 주어진 명령 순서대로 크기를 늘려주기만 하면 됩니다.
현재 가변 배열의 크기를 size라고 두고, 채워진 칸 수를 curSize로 선언합니다.
현재 배열이 다 채워진 상태(size==curSize)일 때, 수를 추가하려고 하면, 가변 배열의 크기를 2배로(size x 2) 늘립니다.
'Algorithms(CT) > Baekjoon' 카테고리의 다른 글
| [백준][Java] 1015. 수열 정렬 (0) | 2025.01.09 |
|---|---|
| [백준] 14719. 빗물 (자바) (1) | 2023.09.27 |
| [백준] 1541. 잃어버린 괄호 (Java) (0) | 2023.08.03 |
| [백준] 2457. 공주님의 정원 (Java) (0) | 2023.08.01 |
| [백준] 2606. 바이러스 (java) (0) | 2023.07.18 |