김효수 교수님, 컴파일러 강의 자료 중 일부, GCC가 작동하는 과정
백준 문제 태그 중에 ‘스페셜 저지’가 있습니다.
기존의 문제는 정확히 문제에서 요구하는 출력을 해야 정답으로 인정됩니다.
스페셜 저지는 이런 식으로 정답을 판단할 수 없는 문제에 달리는 태그인데, 문제가 요구하는 “특정 출력”이 아니라 “조건을 만족하는 출력”이기만 하면 모두 정답으로 인정한다는 뜻입니다.
백준 1008번 문제 “A/B”가 그 예시 중 하나입니다.
출력
첫째 줄에 A/B를 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10^(-9) 이하이면 정답이다.
오차가 $10^{-9}$ 이하이기만 하면 모두 정답으로 인정해줍니다. 따라서 예제 입력 1인 1/3의 정답이 0.3333…의 무한 소수이지만 0.333333333 (3이 9개)를 출력해도 원래 정답과의 오차가 문제에서 제시한 오차보다 작으므로 정답으로 인정됩니다.
변수를 출력하고 싶을 때 printf의 서식 문자를 이용하면 된다고 했습니다. 여기에 한가지 변형을 해줄 수 있습니다. 다음 코드는 어느 학생의 3과목의 점수를 출력하는 코드입니다.
int math, science, history;
printf("Enter score of math, science and history : ");
scanf("%d %d %d", &math, &science, &history);
printf("mat sci his\\n");
printf("%d %d %d\\n", math, science, history);
보시면 과목 이름끼리 3칸을 띄워주고, 그 밑에 점수를 적어주는 코드를 만들어주고 싶어하는 것처럼 보입니다.
하지만 입력이 1자릿수, 2자릿수, 3자릿수로 다양해서 출력이 상당히 많이 달라집니다.