이것 저것 생각을 해 보니 여러 가지 방법이 있을 수 있겠다



1. 그냥 a,b,c...z 다 만들어서 다 쳐넣는 방법


1개 : main(a){scanf("%d",&a);} (24 bytes)

2개 : main(a,b){scanf("%d%d",&a,&b);} (31 bytes)

3개 : main(a,b,c){scanf("%d%d%d",&a,&b,&c);} (24 + 7 * (n - 1) = 38 bytes)
4개 : main(a,b,c,d){scanf("%d%d%d%d",&a,&b,&c,&d);} (45 bytes)
5개 : main(a,b,c,d,e){scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);} (52 bytes)



2. 배열 한개 만들어서 다 쳐넣는 방법


1개 받을 때는 의미가 없다


2개 : a[2];main(){scanf("%d%d",a,a+1);} (33 bytes)
3개 : a[3];main(){scanf("%d%d%d",a,a+1,a+2);} (39 bytes)
4개 : a[4];main(){scanf("%d%d%d%d",a,a+1,a+2,a+3);} (33 + 6 * (n - 1) = 45 bytes)
5개 : a[5];main(){scanf("%d%d%d%d%d",a,a+1,a+2,a+3,a+4);} (51 bytes)


포인터를 이용하는 방법도 있다

대신 스택의 특성 상 거꾸로 들어간다


2개 : a[2],*p=a;main(){scanf("%d%d",p++,p++);} (40 bytes)

3개 : a[3],*p=a;main(){scanf("%d%d%d",p++,p++,p++);} (46 bytes)

4개 : a[4],*p=a;main(){scanf("%d%d%d%d",p++,p++,p++,p++);} (40 + 6 * (n - 1) = 52 bytes)

5개 : a[5],*p=a;main(){scanf("%d%d%d%d%d",p++,p++,p++,p++,p++);} (58 bytes)


그냥 쳐넣을 때 보다 길고 증가율도 같기 때문에 소용 없다 쓰레기행

reverse 할 경우가 있으면 쓸 일이 있을 수도 있겠다



3. 배열을 만들어 반복문을 통해 쳐넣는 방법


역시 1개일 때는 의미가 없으며

당연하게도 배열이 아니면 이름이 다른 각 변수에 쳐넣을 방법이 없다

이 경우에는 개수에 상관 없이 길이가 동일하다


2개 : i,a[2];main(){for(i=0;scanf("%d",a+i++)>0;);} (45 bytes)

3개 : i,a[3];main(){for(i=0;scanf("%d",a+i++)>0;);} (45 bytes)

...

5개 : i,a[5];main(){for(i=0;scanf("%d",a+i++)>0;);} (45 bytes)



4. 개수별 비교


 1) 1개


main(a){scanf("%d",&a);} (24 bytes)


이건 그냥 저게 제일 짧다


 2) 2개, 3개


main(a,b){scanf("%d%d",&a,&b);} (31 bytes)

a[2];main(){scanf("%d%d",a,a+1);} (33 bytes)

i,a[2];main(){for(i=0;scanf("%d",a+i++)>0;);} (45 bytes)


main(a,b,c){scanf("%d%d%d",&a,&b,&c);} (38 bytes)

a[3];main(){scanf("%d%d%d",a,a+1,a+2);} (39 bytes)

i,a[3];main(){for(i=0;scanf("%d",a+i++)>0;);} (45 bytes)


받을 변수가 2개나 3개일 때에는 그냥 a, b, c에 받는게 더 짧다


 3) 4개


main(a,b,c,d){scanf("%d%d%d%d",&a,&b,&c,&d);} (45 bytes)

a[4];main(){scanf("%d%d%d%d",a,a+1,a+2,a+3);} (45 bytes)

i,a[4];main(){for(i=0;scanf("%d",a+i++)>0;);} (45 bytes)


놀랍게도 4개일 때에는 길이가 모두 똑같다

이 경우에는 상황에 맞게 바꿔 쓰면 되겠다 물론 어느 경우든 상황에 맞게 써야하지만


 5) 5개


main(a,b,c,d,e){scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);} (52 bytes)

a[5];main(){scanf("%d%d%d%d%d",a,a+1,a+2,a+3,a+4);} (51 bytes)

i,a[5];main(){for(i=0;scanf("%d",a+i++)>0;);} (45 bytes)


이 때부터는 반복문 없이 걍 쳐넣을 때 일정하게 길이가 증가하므로

반복문을 사용하는 것이 절대적으로 짧다


그리고 한편 5개부터가 배열을 사용하는 것이 abc에 쳐넣는 것보다 좀 더 짧아지는 순간이다



5. 결론


 1) 4개 이하일 때에는 그냥 a, b, c, d에 쳐넣는 것이 더 짧다

 2) 5개 이상일 때에는 배열에 반복문 돌려서 쳐넣는 것이 더 짧다

 3) 어차피 배열을 쓰든 여러 변수를 쓰든 상황에 맞게 써야하는게 맞다

 4) 더 짧은 코드가 분명 있을 것이니 알려줘라 시팔