💻STUDY/BOJ

[BOJ] 2577. 숫자의 개수 (C, Python3)

coldNoodlePigeon 2022. 1. 14.
  • 코딩 초보. 구현을 목표로 해서 코드가 비효율적일 수 있습니다. 

2577. 숫자의 개수 

 

세 개의 자연수 A, B, C가 주어질 때 A × B × C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.

예를 들어 A = 150, B = 266, C = 427 이라면 A × B × C = 150 × 266 × 427 = 17037300 이 되고, 계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다.

 

첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다.

 

첫째 줄에는 A × B × C의 결과에 0 이 몇 번 쓰였는지 출력한다. 마찬가지로 둘째 줄부터 열 번째 줄까지 A × B × C의 결과에 1부터 9까지의 숫자가 각각 몇 번 쓰였는지 차례로 한 줄에 하나씩 출력한다.

 


1. C99

 

#include <stdio.h>

main() {
	int a, b, c,d;
	int n[10] = { 0, };
	char s[10]; 

	scanf("%d\n%d\n%d", &a, &b, &c);
	d = a * b * c; 

	sprintf(s, "%d", d); 
	
	for (int i = 0;i<10; i++) {
		for (int j = 0;s[j]!='\0'; j++) {
			if ((s[j] - '0') == i) n[i] += 1; 
		}
		printf("%d\n", n[i]); 
	}
	
}

간단하다. n[10] 이라는 int형 배열을 만들어서 모두 0으로 초기화 시켜준다. 이는 각 자리 0~9 를 센 값들을 저장하는 기능을 할 배열이다. scanf()를 통해 a,b,c를 입력받은 후 모두 곱한 값을 sprintf() 함수를 사용하여 문자열로 변환시킨다. 

 

그리고 0부터 9까지 차례차례 s에 저장된 문자들을 문자열 끝까지 검토하여 같은 문자가 있으면 n배열에 해당하는 인덱스에서 값을 증가시키도록 한다. (이때, 문자열은 int형이 아니므로, '0'을 뺀 값을 비교해야 한다.)

 


(C) 코드를 구현하며 새롭게 알게 된 것, 헷갈렸던 것 

 

sprintf(배열, "%d", 해당 정수); 를 통해 정수를 문자열로 변환시켜 배열에 저장할 수 있다. 

sprintf(배열, "%x", 해당 정수); 를 통해서 정수를 문자열로 변환시키는데, 16진수로 변환하여 문자열로 변환시켜 배열에 저장할 수 있다. (참고: https://dojang.io/mod/page/view.php?id=388

 


  2.Python

 

a=int(input())
b=int(input())
c=int(input())
d=list(str(a*b*c)) #str()를 통해 정수를 문자열로 변환하여 리스트로.
num=[0,0,0,0,0,0,0,0,0,0]

for i in range(10):
    for j in range(len(d)):
        if (int(d[j])==i):
            num[i]+=1
    print("%d" %(num[i]))

c언어와 비슷한 방향으로 코드를 구현하면 된다. 

 


(Python) 코드를 구현하여 헷갈렸던 것 

 

list() 에 정수들을 저장하기 위해선 str()를 통해 정수를 문자열로 변환 후 저장해야한다. 다시 int처럼 쓰고 싶을 때에는 int()를 통해 접근하면 된다. 

 


 

'💻STUDY > BOJ' 카테고리의 다른 글

[BOJ] 3052. 나머지 (C,Python3)  (0) 2022.01.15
[BOJ] 2908. 상수 (C,Python3)  (0) 2022.01.15
[BOJ] 1546. 평균 (C, Python3)  (0) 2022.01.14
[BOJ] 1157. 단어 공부 (C)  (0) 2022.01.14
[BOJ] Bronze IV 부수기: 열일곱번째 날  (0) 2022.01.12

댓글