문제 1 : a가 3이면 "a == 3"을 출력하고, a가 3이 아니면 "a != 3"을 출력하라.
방법 1: 줄수를 줄이기
방법 2: printf()함수 호출 줄이기
일반적( 50점 ) :
if( a == 3 ) printf( "a == 3" );
else printf( "a != 3" );
줄 수 줄이기( 75점 ) :
( ( a == 3 ) ? printf( "a == 3" ) : printf( "a != 3" ) ); /* 3항 연산자 사용 */
함수 호출 줄이기( 100점 ) :
printf( ( ( a == 3 ) ? "a == 3" : "a != 3" ) ); /* printf()함수를 한 번만 사용 */
문제 2 : a가 짝수이면, "a는 짝수"을 출력하고, a가 홀수이면, "a는 홀수"를 출력하라. ( 단 printf함수는 한 번만 호출하며 되도록 3항연산자와 %s는 쓰지 말 것. if문 맘껏 쓰십시오. )
점수:
3항 연산자 사용 50점
%s 이용 75점
3항 연산자와 %s안 쓰면 100점
짝수 비교 최적화 +10점
나머지 이용(100점)
char *dd[] = { "짝", "홀" };
printf(dd[a%2], a);
최적화 이용(110점)
char *dd[] = {"짝","홀"};
printf(dd[a&1], a);
최적화 했을때 어셈 코드 수 비교
a%2로 했을때
movl %edx, %eax
sarl $31, %eax
shrl $31, %eax
leal (%eax,%edx), %eax
sarl %eax
addl %eax, %eax
subl %eax, %edx
movl %edx, %eax
a&1로 바꿨을때는
andl $1, %eax
참고로 최적화 이용 코드는 퀘이크 제작자가 풀었다고 하는데… 존카멕인가? 게임 엔진 제작에 천재로 불리는 사람, 그가 만든게 언리얼 엔진이고… 정말 gee(ㅎㄷㄷ) 하다. ^^
하여간 별나라 사람의 이야기고 나에겐 %, &의 쓰임새를 새롭게 보게 됬다.
댓글 없음:
댓글 쓰기