코테 회고
SSAFY 를 준비하며 첫 코딩테스트를 쳐본 결과, 전략적인 코딩테스트 준비의 필요성을 느꼈다..
무턱대고 문제만 풀어보는 것이 중요한게 아닌, 코드 자체의 효율성을 고려해야 할듯 하다. 우선 시간의 제약을 너무 고려하지 않은 것 같다.
기존의 풀이 방식이었던 아래 방법은 풀이가 틀렸을 때, 너무 비효율적이다. 특히, 시간 초과가 발생한다면 아예 새로 작성해야 하는 상황ㅇ 이 발생했다.
(1) 문제 확인 -> (2) 풀이 고안 & 작성 -> (3) 제출 -> (실패) -> (back to (2) -> (3)) 반복
-> (통과) -> 완료
그리하여, 이제는 시간 복잡도를 고려하여 조금 더 효율적인 문제 풀이로 모든 문제를 접근하려 한다.
(1) 문제 확인 -> (2) 풀이 고안 -> (3) 효율성 검증 -> (통과) -> (4) 풀이 작성 -> (5) 제출 -> (통과) -> 완료
-> (실패) -> (back to (2)) -> (실패) -> (back to (2))
위 효율성 검증 부분에서, 시간 복잡도를 고려하여 풀이를 우선 고안하고, 문제를 효율적으로 풀어야겠다.
공부 했던 내용이지만, 까먹은거 같아서 다시 떠올리려 한다.
문제의 조건에서 정답의 평균적인 작업은 1억이다.
예를 들어, N이 1만이라고 가정한다면, 시간 복잡도 O(n^2) 을 갖는 코드는 작업 횟수가 1억이 되므로 시간 초과가 날 가능성이 있다. 따라서, 내 코드의 시간 복잡도에 문제의 제한 사항에 표기된 가장 큰 입력을 대입하여 계산했을 때, 아무리 커도 1억을 넘기면 안된다.
또한 모든 코테에서 강조되었던 문제 풀이 흐름에 맞춰 코드를 작성하는 연습을 계속해서 길러야 하겠다. 예를 들어, 아래와 같은 문제 풀이 흐름을 세우고 코드를 작성한다.
<문제 풀이 흐름>
1. 모든 직선 쌍에 대해 반복
A. 교점 좌표 구하기
B. 정수 좌표만 저장
2. 저장된 정수들에 대해 x, y 좌표의 최댓값, 최솟값 구하기
3. 구한 최댓값, 최솟값을 이용하여 2차원 배열의 크기 결정
4. 2차원 배열에 별 표시
5. 문자열 배열로 변환 후 반환
자바로 코테를 준비하는 이상, 클래스와 메서드를 기능 별로 나누어서 작성하는 것이 효율적인 문제 풀이에도 도움되는 것을 다시 리마인드 해야겠다.