본문 바로가기

Java

[Java] 1부터 10000까지의 자연수에서 8의 개수를 세는 연습문제.

문제:

1부터 10,000까지 8이라는 숫자가 총 몇번 나오는가?

8이 포함되어 있는 숫자의 갯수를 카운팅 하는 것이 아니라 8이라는 숫자를 모두 카운팅 해야 한다.
(※ 예를들어 8808은 3, 8888은 4로 카운팅 해야 함)

출처: codingdojang.com/scode/393#answer-filter-area

 

Idea: 

이건 너무 쉬운 문제라 코드로 작성하기 민망하다.

다만, 구글의 입사문제였기 때문에 창의력을 발휘하는 지의 여부를 확인하는 문제였을 듯하다.

따라서, 코드로 형식적으로 푼 답의 아래에 있지만, 경우의 수를 이용해서 풀이할 수도 있을 것 같다.

10000은 8이 없으므로 1부터 9999까지의 수, 즉 모든 4자리 자연수 중에서 8의 개수를 센다.

한 자리에 8이 들어가고, 나머지 3자리에 어떤 수든 들어갈 수 있다.

따라서, 한 자리에 8이 들어가는 경우의 수는 10의 3제곱, 1000이다. 

총 4자리가 있기 때문에 1000*4=4000의 경우의 수로 계산할 수 있다.

 

Code:

// count the number of 8s in natural numbers from 1 to 10000

public class Count_NumberOf_8s {

	public static void main(String[] args) {
		int count = 0;
		int limit = 10000;
		for(int i = 1; i < limit; i++) {
			int num = i;
			while(num != 0) {
				if(num%10 == 8)
					count++;
				num /= 10;
			}
		}
		System.out.println("1부터 "+limit+"까지의 8의 개수는 "+count+"이다.");
	}
}