문제
이 문제를 푸는데 12번 Attempt할 정도로 많은 시간을 쓴것 같다 .
첫번째 문제를 보았을 때 Queue를 사용하여 그것을 Stack에 쌓으면 뒤집어 지는 형태라고 생각하고 문제를 풀었다.
(안될꺼 알았지만 그냥 함..) 당연히 안들어 갔다.
좀 더 생각해보니 Queue를 굳이 뒤집어야 할 필요가 있나라는 생각을 했고 이를 토대로 index를 지정하여 사용하려고 하였다. 생각을 해보니 Queue는 FIFO성질을 가지고 있어서 한방향에서 밖에 추가하고 빼는것이 가능했다.
이를 해결하기 위해 Deque를 사용하여 양쪽에서 삽입, 삭제가 가능하게 하였다.
이후 계속 시간초과 발생... (이유가 너무 궁금하여 스터디를 같이 하는 먼저푼 분한테 물어봤는데 찾지 못하였음)
Sort를 사용하는 부분에서 시간초과가 발생하는지 알고 직접 다 구현하였지만 여전히 시간초과..
나와같은 문제를 가지고 있는 사람들이 질문한것을 보았더니 BufferedReader을 안써서 시간초과가 발생한거였다..
이후 몇가지 수정사항을 고치고 제출하였다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main{
public static boolean check=false;
public static boolean flag=false;
// public static Deque<String> queue;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int number=Integer.parseInt(br.readLine());
for(int i=0;i<number;i++)
{
String temp=br.readLine();
int len=Integer.parseInt(br.readLine());
String al=br.readLine();
String [] str = al.substring(1, al.length()-1).split(",");
Deque <String>queue = new ArrayDeque<String>();//dequeue생성
for(int j=0;j<str.length;j++)//dequeue에 넣어준다
{
if(str[j].equals(""))
{
continue;
}
queue.add(str[j]);
}
for(int j=0;j<temp.length();j++)
{
if(temp.charAt(j)=='R')
{
check=!check; //유동적으로 바뀌여야 되니깐 true --> false, false -->true
}
else
{
if(queue.isEmpty())
{
flag=true;
break;
}
if(check==false)
{
queue.pollFirst();
}
else
{
queue.pollLast();
}
}
}
if(flag==true)
{
System.out.println("error");
flag=false;
check=false;
continue;
}
else
{
System.out.print("[");
for(int j=0;j<size;j++)
{
if(check==false)
{
{
System.out.print(queue.peekFirst());
queue.pollFirst();
}
else
{
System.out.print(queue.peekFirst()+",");
queue.pollFirst();
}
}
else
{
{
System.out.print(queue.peekLast());
queue.pollLast();
}
else
{
System.out.print(queue.peekLast()+",");
queue.pollLast();
}
}
}
System.out.println("]");
check=false;
flag=false;
}
}
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
https://www.acmicpc.net/problem/5430
5430번: AC
문제 선영이는 주말에 할 일이 없어서 새로운 언어 AC를 만들었다. AC는 정수 배열에 연산을 하기 위해 만든 언어이다. 이 언어에는 두 가지 함수 R(뒤집기)과 D(버리기)가 있다. 함수 R은 배열에 있는 숫자의 순서를 뒤집는 함수이고, D는 첫 번째 숫자를 버리는 함수이다. 배열이 비어있는데 D를 사용한 경우에는 에러가 발생한다. 함수는 조합해서 한 번에 사용할 수 있다. 예를 들어, "AB"는 A를 수행한 다음에 바로 이어서 B를 수행하는 함수이다.
www.acmicpc.net