-
해당 문제는 가장 오래 걸렸던 문제였는데 처음에는 시간 초과가 났었고, 다시 했을 때는 런타임 에러 그리고 마지막은 문제를 틀리다가 최종적으로 문제를 해결할 수 있게 되었다.
https://www.acmicpc.net/problem/5430
5430번: AC
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
www.acmicpc.net
https://github.com/JUNGSOONIL/JAVA/blob/main/BAEKJOON%205430
GitHub - JUNGSOONIL/JAVA: JAVA 소스 코드
JAVA 소스 코드. Contribute to JUNGSOONIL/JAVA development by creating an account on GitHub.
github.com
처음 시간 초과 부분에서는 배열을 직접 뒤집고 하다 보니 생각보다 많은 경우의 수를 탐색하게 되어 시간 초과라는 결과가 나오게 되었었고, 이후 배열의 앞, 뒤 위치와 카운트를 통해 뒤집기 여부를 판별하여 해결하려 하였는데 이번에는 배열에 데이터를 삽입하는 부분에서 처음에는 substring과 split를 이용해 잘라서 넣다 보니 데이터가 두 자리 이상일 경우에도 한자리로 잘려서 데이터가 들어가다 보니 배열 크기를 넘어서 런타임 에러가 발생하는 걸 확인할 수 있었고 이를 해결하기 위해 알아보던 중 StringTokenizer을 이용하여 해결 가능한걸 확인해서 StringTokenizer을 이용해, 을 기준으로 문자열을 슬라이 싱하여 nextToken() 메서드를 통해 슬라이 상된 데이터를 저장하여 사용하였다.
먼저 배열에 앞(front) 와 뒤(back) 그리고 카운트(count)를 통해 R(뒤집기), D(버리기) 사용 여부를 확인하였는데, 먼저 카운트는 뒤집기가 발생할 경우 1씩 증가시켜 만약 짝수의 경우에는 원상태로 홀수의 경우에는 역순으로 출력 가능하도록 하였으며, 버리기의 경우 먼저 카운트 짝수 홀수를 확인해 짝수의 경우 앞을 증가시키고 홀수의 경우 뒤를 감소시켜 최종 출력에서 앞부터 뒤까지만 출력 가능하도록 하였다.
출력 부분에서도 https://www.acmicpc.net/board/view/25456 해당 ★☆★☆★ [필독] AC FAQ ★☆★☆★ 글을 통해 빈 배열의 경우 []를 출력해 주는 것과 빈 배열에 대해서 뒤집기는 결과가 에러가 아니고 버리기만 결과가 에러인 것을 확인해 해당 경우의 수를 if 문을 통해 걸러주어 문제를 해결할 수 있었다.
728x90'알고리즘 > Baekjoon' 카테고리의 다른 글
Baekjoon 10866 덱 JAVA (0) 2021.11.04 Baekjoon 2579 계단 오르기 JAVA (0) 2021.11.04 Baekjoon 2775 부녀회장이 될테야 JAVA (0) 2021.11.03 Baekjoon 2292 벌집 JAVA (0) 2021.11.03 Baekjoon 4673 셀프넘버 JAVA (0) 2021.11.03 댓글