369 게임 알고리즘

369 게임 알고리즘을 작성해 보았다.


문제는 우리가 아는 게임과 동일하다.

3 이라는 숫자를 부르면 박수 한 번.

6 이라는 숫자를 부르면 박수 한 번.

9 이라는 숫자를 부르면 박수 한 번.

33 이라는 숫자를 부르면 박수 두 번.

369 라는 숫자를 부르면 박수 세 번.

위의 문제에 대한 알고리즘은 무엇일까?

주어진 숫자의 자릿수마다 3, 6, 9라는 값이 포함되어 있는지 확인 후 count를 하면 된다.

String의 indexOf를 이용하여 값의 포함 여부를 확인하려고 했지만 너무 쉬운 것 같아 다르게 문제를 풀어보았다.

package algorithm;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
import org.junit.Test;
/**
* @FileName : Problem369.java
* @Project : test_project
* @Date : 2013. 6. 26.
* @작성자 : 이남규
* @프로그램설명 :
*/
public class Problem369 {
@Test
public void test() {
assertThat(1, is(catch369NumCnt(3)));
assertThat(2, is(catch369NumCnt(36)));
assertThat(3, is(catch369NumCnt(369)));
assertThat(4, is(catch369NumCnt(3333)));
assertThat(4, is(catch369NumCnt(3133687)));
}
/**
* <pre>
* catch369NumCnt
*
* <pre>
* @param num
* @return
*/
public static int catch369NumCnt(int num) {
int[] checkArr = {3, 6, 9};
int catchCnt = 0;
do {
// 마지막 자리 정수 값 추출
int lastIdxNum = num % 10;
// 3, 6, 9 숫자에 걸리는 값이 있는지 체크
for (int i = 0; i < checkArr.length; i++) {
if (lastIdxNum == checkArr[i]) {
catchCnt++;
break;
}
}
// 마지막 자리 정수 값을 자르기 위해서 10으로 나눈 몫을 저장한다.
num = num / 10;
} while (num > 0);
return catchCnt;
}
}