programming notes

View on GitHub
27 October 2010

3n+1 문제

by

프로그래밍 공부/연습 할라고 혼자서 보드게임을 만들다가 야근이나 개인사 때문에 호흡이 자꾸 깨져서 잠시 접어두고, 토막시간에 할 수 있는
것을 찾다가 알고리즘 해결능력도 길러볼 겸 해서 Programming Challenges라는 책을
샀다. (알고리즘 트레이닝 북이란다)

첫번째 문제인 3n+1 문제를 풀었다.

문제를 해결하기 위해 총 34번의 제출을 하였다 -_-

알고리즘은 맞았는데 입력 값의 유지와 반복입력처리를 안 해줘서 계속 Wrong answer이 결과로 나왔다 ㅠㅠ

입력 값 유지는 두 정수를 입력 받고 결과와 함께 두 정수를 같이 출력을 해야 하는데,

입력 받은 두 정수 중 첫 번째 것이 더 크면 swap을 해주고 처리했더니 문제였다.

코드로 보면..

오답:

cin » a » b;
if (a > b)
swap(a,b);
// 계산
cout « a « b « result «;

정답:

cin » a » b;
int aOrig = a, bOrig = b;
if (a > b)
swap(a,b);
// 계산
cout « aOrig « bOrig « result «;

이건 오답인 이유를 이해 하겠는데.. 입력을 반복해서 받으라는 처리는 문제 없었잖아 ㅠㅠ

그리고 내 코드는 실행시간이 0.744인데 best는 0.008인 이유는 뭐냐!! 슈퍼컴으로 채점한 거냐!

아니면 내가 그렇게 못 짠 건가 ㅠㅠ

어쨌든 이 문제를 풀면서 얻은 것.

홀짝 판별은 n % 2 보다는 n & 1 로. (레알임. 테스트 해봤음)
시험은 싫다.

이 문제를 풀면서 다른 것 하나도 더 느낀 게 있는데 머리 속으로 정리도 안되고 특수한 경우에만 적용되는 것 같아서 안 적었다.

시간 날 때마다 하나씩 풀어보자~

tags: