후기
SSAFY에서는 SW 역량시험 A형을 이미 통과한 사람들을 대상으로 B형 검정을 볼 수 있는 기회를 제공한다. 몇 번이나 시험을 보게 해 주는 지는 모르겠지만 3월 4일 토요일에 첫 번째 시험을 보고 와서 간단한 후기를 남겨보려고 한다.
시험 시간은 4시간이었는데, 대기하는 시간 등을 포함하면 대략 5시간 가까이 있었던 것 같다. 물 이외의 음료는 반입이 불가했으며 시험실 입장 시 휴대폰과 스마트 워치 등의 전원을 전부 끄고 한 곳에 모아 두었다. 개인적으로 시험 도중 목이 너무 말라서 생수 한 병은 챙겨 들어가는 게 좋은 것 같다.
문제에 대한 구체적인 내용은 언급할 수 없지만, 생각해 내기에는 쉬운데 구현하기가 까다로운 문제가 나왔다. SWEA에서 여러 문제를 풀어보면서 느낀 점은, 보통의 구현 난이도와 보통의 알고리즘적 설계를 지향한다라는 것이었다. 하지만 이번에는 문제 내용과 제한조건을 보고 단순 구현문제에 가깝다는 생각을 했다. 물론 실제 구현은 엄청 복잡하고 길었다.
처음에 최적화된 코드를 작성하기 위해 특정 자료구조를 선언하고 코드를 짜기 시작했는데, 시험 시간이 지나고 예외사항 등을 처리하기 위한 코드가 길어지다보니 스파게티 코드가 되었다. 마지막에는 ‘그래 이렇게 최적화 하려고 처음 설계를 했는데’라고 슬퍼하며 사용하지 않은 코드들을 지워내고 제출했다. 최종 코드의 길이는 227줄이었다.
최적화 단계를 거치지는 않았지만 주어진 테스트 케이스로는 제한 시간과 메모리 내에 실행이 되었다. 일주일 내로 실제 프로그램 검증 후 결과를 알려준다고 하니, 결과가 나오길 기다려 봐야겠다.
2023 3월 10일 추가
담당자님으로부터 합격 메일이 왔다.
개인적으로 합격을 예측할 수 있는 팁 아닌 팁을 공유해보려고 한다. 해당 팁은 효율성 테스트 통과에 대한 예측으로 사용할 수 있을 것 같다. 아래 제시된 수치는 시험마다 다를 수 있다.
시험에서 주어진 테스트 케이스와 평가를 위한 케이스는 다르다. 예를 들어,
문제 조건
•
50개 테스트 케이스 모두에 대해 2초 이내에 실행
•
총 함수 실행 횟수가 케이스당 1만회 이하
주어진 조건
•
10개의 테스트케이스
이런 경우 10개의 테스트 케이스에 대해 실행해보고 실행 시간(메모리도 마찬가지)을 파악할 수 있다. 만약 10개의 테스트케이스를 여러번 돌려본 결과 0.3초 이내에는 실행됨을 확인했다고 하자.
‘그럼 10개에 0.3초니, 50개면 초로 2초 안에 실행 되겠다’
라고 생각하면 막상 결과를 받았을 때 테스트를 통과하지 못할 가능성이 높다. 내가 사용한 방법은 다음과 같다.
그럼 어떻게?
1.
주어진 샘플 테스트 케이스 파일을 메모장으로 열람한다. (보통 input.txt라는 이름으로 주어진다)
2.
메모장 우측 한단에 몇 줄인지 파악한다. (예를 들어 5만줄이라고 해보자)
3.
해당 파일이 최악의 경우 몇 개의 테스트 케이스인지 파악한다.
이는 (줄 수) / (최대 함수 호출 횟수) 로 계산한다. 위의 경우 (5만) / (1만) = 5
4.
해당 기준으로 제한 조건인 50개의 테스트케이스 2초라는 조건에 대입해본다.
‘그럼 10개 5개에 0.3초니, 50개면 초로 2초 안에 실행 되겠다 되지 않겠다’
라고 판단해야한다.
이유는 테스트 케이스는 말 그대로 디버깅을 위한 용도이기 때문에 굉장히 간단한 경우도 주어져서 이런 경우를 전부 제외하고 극악의 케이스로만 50개를 구성해도 통과하도록 해야한다. 나같은 경우는 최악의 경우 50개를 돌렸을 때 제한조건의 절반인 1초정도에 실행되어 효율성을 통과할 것이라 생각했다.