이것 저것 생각을 해 보니 여러 가지 방법이 있을 수 있겠다
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) 더 짧은 코드가 분명 있을 것이니 알려줘라 시팔
코드줄이는것보다 한번에 많이넣는게 좋음
왜줄이려는지는 모르겠는데 최대한 적게호출하는게 실행이 빠름
알고리즘 사이트 안해봄? 항상 숏코딩 항목이 있음
acmicpc.net에다 쓰시구요
메인갖고 재귀돌리셈
노력추
난해하더라도 미친듯이 짧게 줄여놓고 보면 왠지 뿌듯할때가 있음.
어차피 리팩토링할때 다 풀지만...
ㅇㅇ 어차피 코드골프 병림픽 외에는 쓸 일 없음