바야흐로 Java 1.0 시절부터 이어져온 Vector 에 대해 알아보자.
Java 1.0 부터 존재하던 Vector는 동적 배열(Dynamic Array)을 구현한 클래스
내부적으로는 배열처럼 동작하지만 크기가 자동으로 조절된다는 장점 존재
import java.util.Vector;
Vector<String> list = new Vector<>();
list.add("apple");
list.add("banana");
근데 난.. 처음 듣는 걸?
주로 C++에서 사용하며 Java에서는 자주 쓰이진 않는다. 왜일까?
| 항목 | Vector | ArrayList |
|---|---|---|
| 동기화 | O (Thread Safety) | X (Non Thread Safety) |
| 성능 | 상대적으로 느림 | 빠름 (싱글 스레드 환경에서 추천) |
| 사용 시기 | 멀티 스레드 환경에서 필요할 때 | 대부분의 일반적인 상황 |
요즘엔 ArrayList를 쓰고, 필요한 경우
Collections.synchronizedList()로 감싸는 걸 더 권장

| 항목 | Vector | LinkedList |
|---|---|---|
| 내부 구조 | 배열 기반 | 노드 기반 |
| 접근 속도 | 빠름 (인덱스 접근 O(1)) | 느림 (인덱스 접근 O(n)) |
| 삽입/삭제 | 느림 (중간 요소 이동 필요) | 빠름 (앞뒤 포인터만 수정) |
| 동기화 | O | X (직접 동기화 필요) |

좌표와 관련된 문제를 풀던 중, Vector 를 사용한 것을 보았고
Vector 에 대해 자세히 알아보는 계기가 되었다.
입력 예시
- 격자 크기: 3 → 즉, 3x3 2차원 배열
- 이동 횟수: 4
- 방향과 거리: 예를 들어 S 2, N 1, E 1, W 1
- 시작 위치: 좌하단 (0, 0)
이동하면서 경유한 좌표값에 +1하고, 범위를 벗어나는 경우 무시할 것
이때 가장 많이 방문된 좌표와 그 횟수를 구하는 문제
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int size = sc.nextInt(); // 격자 크기 (size x size)
int moves = sc.nextInt(); // 이동 횟수
// 2차원 격자 초기화 (모든 칸 0)
Vector<Vector<Integer>> grid = new Vector<>();
for (int i = 0; i < size; i++) {
Vector<Integer> row = new Vector<>();
for (int j = 0; j < size; j++) row.add(0);
grid.add(row);
}
int x = 0, y = 0; // 시작 위치: (0, 0)
grid.get(y).set(x, 1); // 시작 위치 방문 처리
for (int i = 0; i < moves; i++) {
String dir = sc.next(); // 방향: N/S/E/W
int dist = sc.nextInt(); // 이동 거리
for (int d = 0; d < dist; d++) {
int nx = x, ny = y;
// 방향에 따라 다음 위치 계산
switch (dir) {
case "N": ny++; break;
case "S": ny--; break;
case "E": nx++; break;
case "W": nx--; break;
}
// 격자 밖으로 벗어나면 무시
if (nx < 0 || nx >= size || ny < 0 || ny >= size) continue;
// 위치 갱신 및 방문 처리
x = nx; y = ny;
grid.get(y).set(x, grid.get(y).get(x) + 1);
}
}
// 최다 방문 좌표 및 방문 횟수 찾기
int max = 0, maxX = 0, maxY = 0;
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
int val = grid.get(i).get(j);
if (val > max) {
max = val;
maxX = j;
maxY = i;
}
}
}
// 결과 출력: 최다 방문 좌표, 방문 횟수
System.out.println(maxX + ", " + maxY);
System.out.println(max);
}
}