사소한 차이가 정답과 오답을 가른다, 2004

@codemaru · October 21, 2011 · 2 min read

요즘 acm icpc 문제 풀이에 재미를 붙여 하루에 한두개씩 풀곤하는데 오늘 어이없는 것으로 한 20여 차례의 wrong answer를 만나야 했다. 문제는 너무나 간단해서 정답이 아닐리가 없고… 다 확인을 해 보았는데두 계속 wrong answer만 나오는 것이었다. 그 정답과 오답의 차이는 아래 루프에 있었다. 참고로 아래와 같은 루프는 주로 출력할것의 갯수를 잘라서 출력하는데 많이 사용되는 구조이다.

// 루프1
for(i=0; i<n; ++i)
{
    printf("%3d", i);
    if((i+1) % 15 == 0)
        putchar('\n');
}
// 루프2
for(i=0; i<n; ++i)
{
    if((i+1) % 16 == 0)
        putchar('\n'); 

    printf("%3d", i);
}

원 문제의 요구는 15개씩 끊어서 출력하는 것이었다. 내가 작성한 루프는 1번구조였고 2번 구조가 정답의 루프 구조이다. 둘간의 차이를 금방 알수 있는 분은 충분히 코드를 머릿속으로 그릴수 있는 사람들이다. 나 또한 둘간의 차이를 구분하지 못해서 수십번의 오류를 가진 답을 제출해야 했다. 눈에 들어오지않는 사람들은 한번 쯤 곰곰히 생각해 보길 바란다. 둘간의 차이가 무엇일까??

15개씩 끊어주는 건 둘 다 같은데…

한 가지 다르다면 15n-1의 경우 첫번째는 리턴값이 포함된다는 것 정도?

by 인터넷 논객

@codemaru
돌아보니 좋은 날도 있었고, 나쁜 날도 있었다. 그런 나의 모든 소소한 일상과 배움을 기록한다. 여기에 기록된 모든 내용은 한 개인의 관점이고 의견이다. 내가 속한 조직과는 1도 상관이 없다.
(C) 2001 YoungJin Shin, 0일째 운영 중