369 게임 알고리즘을 작성해 보았다.
문제는 우리가 아는 게임과 동일하다.
3 이라는 숫자를 부르면 박수 한 번.
6 이라는 숫자를 부르면 박수 한 번.
9 이라는 숫자를 부르면 박수 한 번.
33 이라는 숫자를 부르면 박수 두 번.
369 라는 숫자를 부르면 박수 세 번.
위의 문제에 대한 알고리즘은 무엇일까?
주어진 숫자의 자릿수마다 3, 6, 9라는 값이 포함되어 있는지 확인 후 count를 하면 된다.
String의 indexOf를 이용하여 값의 포함 여부를 확인하려고 했지만 너무 쉬운 것 같아 다르게 문제를 풀어보았다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} |