문제
두 양의 정수가 주어졌을 때, 첫 번째 수가 두 번째 수보다 큰지 구하는 프로그램을 작성하시오.
입력
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 두 정수가 주어진다. 두 수는 백만보다 작거나 같은 양의 정수이다. 입력의 마지막 줄에는 0이 두 개 주어진다.
출력
각 테스트 케이스마다, 첫 번째 수가 두 번째 수보다 크면 Yes를, 아니면 No를 한 줄에 하나씩 출력한다.
출처
ICPC > Regionals > North America > Southeast USA Regional > 2009 Southeast USA Regional Programming Contest PA번
알고리즘 분류
먼저 런타임 에러 판정이 나온 코드부터 보시겠습니다.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
int a,b;
int cnt = 0 ;
char res[50][4] = {""};
while(1){
scanf("%d %d",&a,&b);
if(a==0 && b==0)
break;
else if(a>b)
strcpy(res[cnt++],"Yes");
else
strcpy(res[cnt++],"No");
}
for(int i = 0 ; i < cnt ; i++){
printf("%s\n",res[i]);
}
}
음.. 이렇게 봐서는 뭐가 문제였는지는 잘 모르겠네요.
이제 정답 코드를 보시겠습니다.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
int a,b;
int cnt = 0 ;
char res[100][4] = {""};
while(1){
scanf("%d %d",&a,&b);
if(a==0 && b==0)
break;
else if(a>b)
strcpy(res[cnt++],"Yes");
else
strcpy(res[cnt++],"No");
}
for(int i = 0 ; i < cnt ; i++){
printf("%s\n",res[i]);
}
}
아... 배열의 수가 조금 부족했던 모양입니다. 배열의 수가 부족하면 런타임에러가 발생하는건가..? 이것도 좀 신기하긴 하네요. 사이즈가 부족한게 런타임 에러로 이어지는지는 잘 모르겠습니다만 주의해야할 내용이긴 하죠. 계산을 했지만 계산 결과를 저장할 공간이 없어 문제가 풀리지 않으면 안 되는 것이니까요.
근데 지금보니까 왜 이렇게 풀었는지는... 알수가 없네요. 그냥 풀면 되는데 굳이 strcpy 함수를 사용해서 답변을 다 저장한 뒤에 결과를 내놓았군요. 5년전의 나 매우 낯설다.
그래서 파이썬으로 새로 풀어보기로 했습니다!
while 1:
a, b = map(int, input().split())
if a == 0 and b == 0:
break
if a > b:
print("Yes")
else:
print("No")
뭐 당연히 정답이겠지만... 메모리가 높아지는게 눈에 뛰네요. 역시 파이썬은 비 효율적인 녀석인가..?
아무튼! 이번 문제 쉬우면서도 낯설게 느껴지는 녀석이었습니다!