21 Oct
2011
Posted in: 코드
By    4 Comments

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


사소한 차이가 정답과 오답을 가른다, 2004
by 신영진(YoungJin Shin), codewiz at gmail.com, @codemaru, http://www.jiniya.net

요즘 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 인터넷 논객

Browser does not supports flash movie

  • 트랙백 주소: http://www.jiniya.net/wp/archives/5019/trackback

관련 글

  • http://www.sysnet.pe.kr kevin

    ‘리턴값’ 이라고 해야 할까요? ‘개행 문자’가 맞을 것 같군요. ^^

  • codewiz

    kevin // 네 ‘개행 문자’가 알맞은 표현입니다. 아마도 인터넷 논객님께서는 캐리지 리턴이란 말에서 ‘리턴’이란 부분을 따와서 리턴값이라고 표현한 것 같습니당.

  • http://oosoom.org exedra

    15번째 뒤에 개행문자를 넣느냐, 16번째 앞에 개행문자를 넣느냐의 차이네요.
    15번째 뒤에 넣으면 다음 문자가 없음에도 개행문자가 뒤에 붙어 나오게 되죠.
    맞나요?

  • codewiz

    exedra // 넵 맞습니다.