백준 6051 - 시간 여행(Java)
알고리즘/백준

백준 6051 - 시간 여행(Java)

www.acmicpc.net/problem/6051

 

6051번: 시간 여행

모범생 현수는 코딩하는 시간을 늘리기 위해 타임 머신을 구매 했다. 현수는 정상적으로 문제를 코딩하거나 (타임 머신을 사용하지 않고), 과거의 임의의 지점으로 시간여행 할 수 있다.  미

www.acmicpc.net

1. 유형

구현

 

2. 자료구조

ArrayList

 

3. 기능

- 각 번호에 따른 리스트 만들기

- 명령어 기능 수행

 

4. 풀이

 

- 번호에 따라서 번호를 기록하기 위해 arraylist 배열을 만든다

- 명령어에 따라서 a, t, s를 수행

 

ArrayList배열만 만들줄 알면 문제가 직관적이라 풀이 할게 없다.

 

주의 할점은 리스트를 복사 할때 얕은 복사가 아닌 깊은 복사를 해야한다.

 

즉, list[0] = list[1]을 하면 안되고

list[0].addAll(list[1])을 해야한다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class Main {
	static int N;
	static List<Integer> list[];

	public static void main(String[] args) throws IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(in.readLine());
		N = Integer.valueOf(st.nextToken());
		list = new List[N+1];
		list[0] = new ArrayList<>();
		int res = 0;
		for (int i = 1; i <= N; i++) {
			list[i] = new ArrayList<>();
			st = new StringTokenizer(in.readLine());
			char cmd = st.nextToken().charAt(0);
			if (cmd == 'a') {
				int k = Integer.valueOf(st.nextToken());
				list[i].addAll(list[i - 1]);
				list[i].add(k);
				res = list[i].get(list[i].size() - 1);
			} else if (cmd == 's') {
				List<Integer> tmp = list[i - 1];
				list[i].addAll(tmp);
				res = getLast(tmp, i, 's');
			} else {
				int k = Integer.valueOf(st.nextToken());
				List<Integer> tmp = list[k - 1];
				list[i].addAll(tmp);
				res = getLast(tmp, i, 't');
			}
			System.out.println(res);
		}
	}

	static int getLast(List<Integer> tmp, int i, char type) {
		int res = 0;
		if (type == 's')
			list[i].remove(tmp.size() - 1);
		if(list[i].size()==0)
			res = -1;
		else
			res = list[i].get(list[i].size() - 1);
		return res;
	}
}

 

5. 느낀점

없음. 쉬웠다.

'알고리즘 > 백준' 카테고리의 다른 글

백준 20207 - 달력(Java)  (0) 2021.01.17
백준 16722 - 결! 합!  (0) 2021.01.16
백준 5587 - 카드 캡터 상근(Java)  (0) 2021.01.13
백준 18428 - 감시 피하기(Java)  (0) 2021.01.13
백준 18249 - 근손실(java)  (0) 2021.01.13