1부터 10,000까지 8이라는 숫자가 총 몇번 나오는가?
8이 포함되어 있는 숫자의 갯수를 카운팅 하는 것이 아니라 8이라는 숫자를 모두 카운팅 해야 한다.
(※ 예를들어 8808은 3, 8888은 4로 카운팅 해야 함)
일단 기본적인 틀만 만들었다.
1. 클래스 생성
2. 문제를 적고, 이해한다.
3. 필요한 메서드를 만든다.
4. 객체를 생성한다.
여기까지가 내가 생각하는 기본적인 큰 틀이다.
이제 가장 중요한 문제풀이에 대한 코딩을 해야한다.
이 부분이 중요하면서도 가장 어렵다... 생각을 가장 많이 하게 되는 부분이기 때문이다.
어떤 숫자에 8이 포함할 때 마다 카운팅을 하는 문제이다.
제일 먼저 떠오른 생각은..
"각 자릿수의 숫자를 분리하여 String형으로 파싱한 다음 equals 메서드를 사용해보면 어떨까?"
하지만 이 방법으론 안될 것 같다..
8 _ _ 8 _
8 _ _ _ 8
8 _ 8 _ 8
_ _ _ 8 _
_ 8 _ 8 _
등등..
이처럼 모든 경우를 생각해서 if문 안에 equals 를 사용하는 것은 프로그래밍적 사고 방식이 아닌것 같다.
그럼!
"
두가지 경우로 나눈다.
1. 10으로 나누기로 한 다음 나머짓값이 8인 경우 카운팅하고,
2. 10보다 큰 숫자의 경우엔 10으로 나눈 몫으로 카운팅한다.
"
public class CountingEight {
public static void main(String[] args) {
for (int i = 0; i <= 10000; i++) {
searchEight(i);
}
System.out.println("1에서 10,000 사이에 존재하는 8의 개수는? " + count);
}
private static int count = 0;
public static void searchEight(int num) {
if (num % 10 == 8)
count++;
if (num > 10)
searchEight(num / 10);
}
}
'날이 좋지 않아서 > 코딩 테스트' 카테고리의 다른 글
[넥슨] 1 이상이고 5000 보다 작은 모든 셀프 넘버들의 합을 구하라. (0) | 2019.07.17 |
---|---|
3,5의 배수의 총합을 구하라 (0) | 2019.07.06 |