C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[20918] 사이냅소프트 입사문제
Lyn [tohnokanna] 4981 읽음    2012-01-18 10:16


void wmain()
{
	int Current = 2, Before = 1;
	int Sum = 2;
	
	while(true)
	{
		int Calc;
		Calc = Current + Before;
		if (Calc > 4000000)
		{
			break;
		}

		if ((Calc % 2) == 0)
		{
			Sum = Sum + Calc;
		}
		Before = Current;
		Current = Calc;
	}
	printf("%d\n", Sum);
}


이번건 너무 쉬워서 모에하지 않음 ...


=========================================================================

실제 컴파일된 바이너리입니다 당연하게도(?) % 2연산을 and 연산으로 바꿔줍니다.

최신 컴파일러는 바보가 아니랍니다 : )
장성호 [nasilso]   2012-01-18 12:05 X
아래에
ProjectEuler@ kr 도 사이냅소프트에서 만든것이군요

ProjectEuler.net에 문제를 예전에 다푼 Lyn군에게는 입사시험문제는 문제도 아니것같다는...

근데 저번엔 어렵게 내더니..
이번엔 쉽게?

이 문제는 서류전형 시험이라는 생각이드네요.
서류전형통과되면 입사시험(코딩테스트)는 따로 있을듯 합니다.

어떤 문제가 나올지 기대가 됩니다.
012 [mbyes]   2012-01-18 16:26 X
나누기 보다 and 연산 하면 나을까요?  (Calc & 0x00000001) = 0x00
장성호 [nasilso]   2012-01-18 21:44 X
012님 테스트 해보니 별로 안빠르네요


다음과 같이 하면 속도가 조금 빠르게 나옵니다.

int Current = 2, Before = 1;
    int Sum = 0;
    while(Current<MAX_LIMIT)
    {
        Sum = Sum + Current;
        int Calc = Current + Before;
        Before = Current + Calc;
        Current = Before + Calc;
    }

피보나치 수열에서 짝수는 3번에 한번씩 나타나죠~!
홀,짝,홀,홀,짝,홀,홀,짝.....  이런순으로...

위 원리를 이용하면
비교문을 두번더 줄일수 있습니다.
아루스 [tinydew4]   2012-01-31 13:35 X
main(a,c,b,s){for(b=2,s=0;b<4000001;b=(a=b+(c=b+a))+c)s+=b;printf("%d",s);}
뒤늦게 숏코딩 놀이 'ㅁ'

+ -

관련 글 리스트
20918 사이냅소프트 입사문제 Lyn 4981 2012/01/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.