
처음엔 리스트로 접근했다.
요소를 모두 리스트에 집어넣어서 처음 인덱스부터 탐색하면서 이웃한 숫자가 짝수면 숫자를 빼는 식으로 했더니 시간초과가 났다.
그래서 클로드한테 물어보니까(요즘은 gpt보다 클로드가 코드를 잘 짜주는 느낌...) 스택을 추천해줬다. 어떤 블로그글에선 deque를 썼다고도 하는데 뭘 쓰든 자유지만 일단 뭐든 리스트보단 빠른 것 같다.
모든 요소를 다 add하고 풀이를 시작해서 그런지 시간초과
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class b1_28323 {
public static void main(String[] args) throws Exception{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(br.readLine());
List<Integer> list=new ArrayList<>();
StringTokenizer st=new StringTokenizer(br.readLine());
for(int i=0;i<n;i++){
list.add(Integer.parseInt(st.nextToken()));
}
// System.out.println(list.toString());
int t=1;
while(t<list.size()){
if((list.get(t)+list.get(t-1))%2!=0){
t++;
}else{
list.remove(t+1);
}
}
System.out.println(list.size());
}
}
반면 요소 넣을때마다 확인하고 넣을지 말지 결정하니 맞았다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
import java.util.StringTokenizer;
public class b1_28323_2 {
public static void main(String[] args) throws Exception{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(br.readLine());
Stack<Integer> list=new Stack<>();
StringTokenizer st=new StringTokenizer(br.readLine());
for(int i=0;i<n;i++){
int c=Integer.parseInt(st.nextToken());
if(list.isEmpty()){
list.push(c);
}else{
if((list.peek()+c)%2==1){
list.push(c);
}
}
}
System.out.println(list.size());
}
}
다양한 자료구조를 알아야겠다 생각했다.
알고리즘 안풀다보니 점점 까먹어서...
이제 susc 알고리즘 스터디 시작하니까 열심히 다시 감 잡아봐야지