이 글은 학회 회원 랑이집사님의 허락을 받아 에브리타임 게시글을 그대로 가져왔습니다.
프로그래밍 입문 수업때 질문을 받다보니 아래 두가지 질문만 들어오는걸 보고 이건 답을 알려줘도 실력 향상에 별 도움이 안되겠다 싶어서 글 남깁니다.
1. 답이 안나와요.
2. 답은 나오는데 만점이 안나와요.
1학년만 그런게 아니고 코딩테스트 준비하시는 취준생 분들 가르쳐 드릴때도 똑같았어요.
코딩을 해서 답이 안나오는 경우 아래 세가지는 먼저 생각해보고 정리해서 질문하는게 좋습니다.
1. 어떤 의도로 코드를 작성했는지.(이 부분까지 실행할 때 어떤 결과를 기대했는지)
2. 현재 어떤 결과가 나오는지.
3. 예상되는 원인이 무엇인지(디버깅에 어떤 노력을 했는지)
예를들어 http://boj.kr/1871 문제를 보겠습니다.
코드는 다음처럼 작성할 수 있어요.
int main()
{
int n;
char arr[100];
int i;
int x, y;
scanf("%d", &n);
for(i = 0; i < n; i++)
{
scanf("%s", arr);
//x = 알파벳 부분 가치
//여기를 1번 위치라고 하겠습니다.
//y = 숫자 부분 가치
//여기를 2번 위치라고 하겠습니다.
if(x > y && x - y <= 100)
{
printf("nice\n");
}
else ir(x < y && y - x <= 100)
{
printf("nice\n");
}
else
{
printf("not nice\n");
}
}
}
숫자 가치는 잘 구하는데, 알파벳 가치 구하는 부분에 문제가 있다고 해보겠습니다.
문제 예시인 2 ABC-0123 AAA-9999 를 입력했는데 둘 다 not nice가 출력된다면 어떻게 해야할까요?
우선 위 코드의 2번 위치에 printf를 넣어서 x, y를 출력해봐야 합니다. 그럼 x가 잘못 나온다는 사실을 알 수 있겠죠.
그럼 왜 잘못 나왔는지는 잘못 나온 케이스를 대입해서 어떤식으로 계산되는지 손으로 따라가보면 알 수 있습니다.
그 후 고쳐보려는 노력을 최대한 해본 뒤 안되면 이렇게 질문하는겁니다.
1. 답이 제대로 안나오는데, 출력을 해보니 알파벳 계산 결과가 ...이 나와야 하는데 ,,,이 나옵니다.
2. 테스트케이스를 이용해 따라가보니 .....부분이 잘못된 것 같습니다.
3. 잘못된 부분을 고쳐보려고 ,,,,,를 해봤지만 잘 되지 않았습니다. 어떻게 하면 좋을까요?
조금 더 구체적으로 해볼게요.
int get_alpha_score(char arr[])
{
int score = 0;
int i;
for(i=0;i<3;i++)
{
score *= 26;
score += arr[i];
//score += arr[i] - 'A';
//여기가 3번
}
return score;
}
주석 처리한 부분이 정답 코드, 주석이 없는 부분이 실제 제가 작성한 코드라고 하겠습니다.
각 자리마다 -'A'를 해줘야 하는데 안해줬으니 정답이 나올리가 없겠죠. main에서 알파벳 점수가 안나온다는걸 파악했습니다. 그럼 이제 왜 안되는지 살펴봐야 하는데, 아마 score가 과하게 크게 나왔을거에요.
그럼 우선 3번 자리에서 score를 출력해서 각 자리마다 어떻게 계산되고 있는지 파악합니다. 그럼 각 자리 연산이 모두 크게 나온다는걸 파악할 수 있습니다.
해결방법은 못찾았을거고 여기서 질문을 한다면 아래처럼 하는겁니다.
"알파벳 계산이 잘못 나옵니다. ABC를 입력하면 28이 나와야 하는데 .....이 나옵니다. 그래서 체크해보니 첫자리부터 숫자가 예상보다 너무 크게 나옵니다. 원인을 모르겠습니다."
코딩테스트 준비하는 학원에서 약 2년간 코칭하면서 느낀건데 재능, 공부시간, 문제 풀이 습관, 막혔을 때 질문 방법. 이 네가지는 정말 중요합니다.
재능, 공부시간은 어쩔 수 없지만 문제 풀이 습관과 질문 방법은 1학년때 미리 잡아두시는게 좋습니다.
원하시면 얼마든지 도와드릴테니 질문하기 전에 꼭 위 내용들 한번씩 생각해보고 질문해주시면 좋겠습니다.
'정보 게시판' 카테고리의 다른 글
간단한 알고리즘 - 정수론 (0) | 2020.12.27 |
---|---|
배열을 이용한 코딩 스킬(중요) (0) | 2020.12.27 |
알고리즘 기초 - 완전탐색 (0) | 2020.12.27 |
삼성 코딩테스트를 볼 때 조심할 점들 (1) | 2020.12.27 |
xor 연산을 이용한 간단한 코딩 스킬들 (0) | 2020.12.27 |