★ dingpong의 조그만 휴식 공간 ★ : 위치로그 : 태그 : 방명록 : 관리자 : 새글쓰기
★ dingpong의 조그만 휴식 공간 ★ 블로그에 오신것을 환영해요^^
dingpong 의 블로그 입니다. 많은 분들의 휴식 공간이 되고자 합니다. 많이 들려주세요.^^
73
286
205114
Candle
믹시

알고리즘 트레이닝 책을 보고 3n+1 문제를 풀어보았습니다.

최적화 된 코드는 아닙니다. 인터넷에서 여러 가지 코드를 찾아 보실 수 있을 것입니다.

[이곳]을 방문하시면 문제와 좀 더 최적화 된 답을 보실 수 있을 것입니다.

여러 가지 방법을 적용해 볼 까 하다가 많은 답이나 코딩 방법이 나오기 때문에

처음 답을 맞췄던 코드로 올립니다. 간단하니 참고하시길 바랍니다.

/*      @JUDGE_ID:      110101  100     C++     */

/* @BEGIN_OF_SOURCE_CODE */

#include <iostream>

using namespace std;

int main()
{
       int oriStart = 0;
       int oriEnd = 0;

       while(cin >> oriEnd >> oriStart != 0) ///< 두개의 값을 입력받는다.
       {
               int start = oriStart;
               int end = oriEnd;

               int maxCount = 0; ///< 최대 사이클 횟수를 저장

               if(end > start) ///< 만약 서로 입력 순서가 바뀌었다면 서로 바꿔준다.
                       swap(end, start);

               for(int i = end; i <= start; ++i)
               {
                       if(i < 1 || i >= 1000000) ///< 예외처리 코드
                               continue;

                       int count = 1;
                       int result = i;

                       while(result != 1)
                       {
                               if(!(result & 1)) ///< 짝수일때  == if(result % 2 == 0)
                               {
                                       result >>= 1;; ///< == result /= 2
                               }
                               else ///< 홀수일때
                               {
                                       result = result * 3 + 1;
                               }
                               ++count;
                       }
                       if(count > maxCount) ///< 현재 수가 최대 사이클을 기록했다면 기록을 갈아치우자
                               maxCount = count;
               }
               cout << oriEnd << " " << oriStart << " " << maxCount << endl;
       }

       return 0;
}

/* END_OF_SOURCE_CODE */
크리에이티브 커먼즈 라이센스
Creative Commons License
http://dingpong.net/tt/trackback/144
From. 작도닷넷 2008/11/20 15:51Delete / Modify
100. The 3n + 1 problem (Solution)
http://acm.uva.es/p/v1/100.html The 3n + 1 problem 맨 첫번째 문제로 무척 유명하다. 원래 C++로 짜면 그냥 풀어도 시간 초과가 안 되는데, Java는 느려서 약간 방법을 써야 한다. http://acm.uva.es/problemset/data/p100.java.html 100 Java "Easy algorithm" ...심지어는 예제로 올려놓은 것도 느려서 안 된다. htt...
From. 만균 2008/02/10 21:11Delete / ModifyReply
나도 이 문제 풀었었음.
dingpong 2008/02/10 21:32Delete / Modify
응 답을 구하는 방법이 워낙 여러 가지니까.. 생각해 볼 만한 문제!
From. GodsGamer 2008/02/12 20:41Delete / ModifyReply
트랙백 타고 굴러들어왔습니다. 잘 둘러보고 갑니다.
dingpong 2008/02/13 14:13Delete / Modify
들려주셔서 감사합니다^-^
좋은 글 감사드려요. 많은 참고가 되었습니다.
From. xacdo 2008/11/20 15:52Delete / ModifyReply
저는 입력값을 단순히 swap()했다가 online judge에서 탈락했었습니다... 이런 사소한 부분에서 ㅠㅠ

http://icpcres.ecs.baylor.edu/onlinejudge
UVa Online Judge
dingpong 2008/11/29 22:40Delete / Modify
트랙백 감사합니다. 참고할께요^-^
[로그인][오픈아이디란?]
«   2009/01   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
2008년도 블로그 결산.... (1)
스티브 잡스의 프레젠....
Head First HTML with....
맞춤검색