참고
- 함수의 매개변수와 배열의 register 속도 비교
- 삼성 B형 디버깅 Tip
- Visual Studio LNK1168: 쓰기용으로 열 수 없습니다 해결방법
1) tc N번까지 통과하는데, N+1번 부터 실패하는 경우.
tc N번까지 지우고 N+1번부터 통과하는지 확인해본다.
N+1번 부터 통과한다면 거의 100% 초기화를 제대로 안해준 경우다.
사용하는 배열이나 index를 모두 init에서 제대로 초기화 하는지 확인해보자.
2) 비주얼 스튜디오 디버거를 사용하지 말자.
가끔 알고리즘 문제를 풀 때, 메모리에 값이 어떻게 들어가는지 확인하기 위해 디버거를 사용한다.
하지만 tc가 매우 크면 잘못된 부분을 찾는 것은 매우 힘들다.
그런데, tc가 매우 크기 때문에 printf 를 사용하면 콘솔 창으로 디버깅 하기도 어렵다.
이럴 경우, printf 결과를 모두 output.txt에 저장해두는 방법을 사용하자.
방법은 링크를 클릭.
3) exit를 활용하자.
구현이 복잡하면 디버깅을 위해 강제로 프로그램을 멈추고 싶을 때가 있다.
함수를 return해도 다음 함수가 있다면 멈추기 애매하다.
이럴 때, 프로그램 자체를 종료시키는 exit를 사용하자.
exit를 사용하려면 #include <stdlib.h>를 선언해야 한다.
B형에서 라이브러리를 사용할 수 없지만, 당연히 디버깅할 때 사용하는 것은 자유다.
#include <stdlib.h>를 선언해서 의심되는 코드를 exit로 강제 종료 시키자.
#include <stdio.h>
#include <stdlib.h> /* exit 사용 시 필요 */
void function()
{
int a;
/* 디버깅을 위해 종료 하고 싶은 위치 */
exit(0);
...
}
int main(void)
{
function();
return 0;
}
4) tc를 새로 만들어서 최종 성능을 확인하자.
보통 B형에서는 tc가 5개 주어진다.
tc 1~2는 매우 작은 tc, 3부터 점점 커진다.
그래서 5개 tc로 나온 실행 시간은 아주 짧다.
따라서 tc를 직접 복잡하게 만들자.
보통 아래와 같이 주어진다.
5 /* 총 tc 갯수 */
1 /* 작은 tc */
as
2
asasdfasd
3
asdfasdfasdfad
4
asdfasdfasdfasdfasdfasdf
5 /* 꽤 복잡한 tc */
asdkjfalksdjf;lakdfja;lksdjfalsdkfjalskdfjasdf
위의 tc를 마지막 tc로만 50개 만들자.
50 /* 총 tc 갯수를 50개 정도로 증가 */
5 /* 꽤 복잡한 tc */
asdkjfalksdjf;lakdfja;lksdjfalsdkfjalskdfjasdf
5
asdkjfalksdjf;lakdfja;lksdjfalsdkfjalskdfjasdf
5
asdkjfalksdjf;lakdfja;lksdjfalsdkfjalskdfjasdf
...
5
asdkjfalksdjf;lakdfja;lksdjfalsdkfjalskdfjasdf
이렇게 만들고 나서 time out이 나오면, 성능을 더 개선해야 한다.
(물론 상대 평가이기 때문에 pass할 수도 있다.)
주어지는 tc로는 자신의 코드의 성능을 확인하는 데 한계가 있기 때문에, 꼭 해보도록 하자.
'알고리즘 > [PRO] 삼성 SW 역량 테스트 B형' 카테고리의 다른 글
BOJ 1620 : 나는야 포켓몬 마스터 이다솜 (Hash Table) (9) | 2021.02.16 |
---|---|
BOJ 2606 : 바이러스 (Linked List Tail ver) (1) | 2021.02.16 |
메모리 풀 vs malloc 속도 비교 (2) | 2021.02.15 |
BOJ 1707 : 이분 그래프 (0) | 2021.02.15 |
메모리 풀 (Memory Pool) (4) | 2021.02.15 |
댓글