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; | |
} | |
} |
'프로그래밍' 카테고리의 다른 글
Mockito를 이용한 테스트 (0) | 2013.08.07 |
---|---|
Serializable 객체직렬화 (2) | 2013.07.30 |
jquery를 이용한 jsonp 처리 방법 (0) | 2013.07.11 |
java 재귀함수 시퀀스 다이어그램 (0) | 2013.07.05 |
java default 접근 제어자 활용 범위? (0) | 2013.06.13 |
정규표현식 (Java) (2) | 2013.05.09 |
스프링 시큐리티 적용하기 (properties 인증 방법) (2) | 2013.04.20 |
스프링 MVC에서 SimpleMappingExceptionResolver 선언 시 주의 사항 (0) | 2013.04.18 |