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 |