https://www.acmicpc.net/problem/5430
5430번: AC
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
www.acmicpc.net
이름처럼 에이씨(ㅂ..)를 하고싶었던 문제였다. (솔직히 정답률 19퍼 인거보고 쫄았음)
나름 "단순해보이는" 문제였다.
이유는 다음과 같다.
1. 명령어를 입력받는다.
2. 주어진 명령어는 단순하다. (R : 뒤집기, D : 첫번째 요소 지우기)
3. 주어진 명령어대로 수행한 이후, 출력한다.
당장 봐도 쉬운 수준이지만...이건 골드5 문제이다.
당연히 그대로 수행하면 바로 시간초과로 혼나버린다.
그래서, 뒤집을때도 첫번째 요소, 안뒤집을때도 첫번째 요소가 지울 수 있도록 자료구조 덱(deque)를 사용하였다.
분명 시간복잡도 O(n)이 나오면 "어, 너 아웃" 할게 뻔했기 때문이다.
더불어, reverse하라고했다고 정말 reverse하면 안되는 문제이다.(했다가 16%에서 시간초과로 혼나버림)
대신, reverse_count를 R이 나올때마다 더해주는 식으로 하였다.
그러면, reverse_count % 2 == 0 일때는 다시 원상복귀된 리스트 일것이고, 그 외에는 뒤집어진 리스트가 된다.
이후, q.popleft()와 q.pop()을 적절한 조건하에 넣어주어서 명령어 수행을 시간효율적이게 해주었다.
데이터를 받아오고 parsing을 할때 []가 Input으로 들어오면 길이가 0이어야하지만, 파싱을 잘못해서(?) 길이가 1로 되길래 num=="[]"조건문을 통해 예외처리를 해주었다.
flag는 []일때 D 명령어가 들어오면 error를 출력하고 나머지는 출력하지 않게 해준다.
마지막 출력은 "무조건" 지켜야하는 조건이 있기에 좀 비효율적이게 코드를 짜게 되었다.
파싱 문제가 해결되니깐 바로 성공!
1일 1백준 21일째...
'백준에 대가리 깨지는중' 카테고리의 다른 글
[백준] 실버1 쿼드트리 (0) | 2023.05.30 |
---|---|
[백준] 골드4 이중 우선순위 큐 (2) | 2023.05.30 |
[백준] 실버2 최소 힙, 최대 힙 (0) | 2023.05.29 |
[백준] 골드5 10026 적록색약 (0) | 2023.05.27 |
[백준] 실버3 9375 패션왕 신해빈 (0) | 2023.05.27 |