반응형

 

세 자리수의 자연수 3개의 곱셈의 결과에 포함된 0~9까지의 숫자를 한줄 한줄 차례대로 출력하는 문제

 

처음에는 숫자를 문자열로 바꿔가지고 하나씩 잘라서 출력해야되나 했는데

최근에 특정 숫자로로 나눈 나머지를 사용하는 방법이 많았어서

 

크기가 10인 0~9까지의 정수형 배열을 만든다음, 값을 0으로 초기화 시키고

3개의 수를 곱한 결과를 10으로 나눈 나머지의 위치에 ++; 증감연산자를 사용해서 해당 하는 숫자를 1씩 증가시킨 뒤

반복문으로 0~9까지의 배열을 돌아가며 값을 모두 출력해주기로 했다

 

10으로 나눌때 몫이 1이상일때까지 반복하도록 while 문을 사용했음

따라서 10보다 작은 수인 0~9까지의 값이 나온다면 

미리 만들어준 배열의 값을 1씩 증가시킴

 

 

 

 

#include <bits/stdc++.h>
using namespace std;

//BOJ 2577

int main() {
	int a,b,c;
	cin >> a>> b >> c;
    
	int n = a*b*c;
	int arr[10]={0};
	int tmp=0;
    
	while(n/10>0){
		tmp = n%10;
		n/=10;
		arr[tmp]++;
	}
    
	arr[n]++;
    
	for(int i=0; i<10; i++){
		cout << arr[i] << "\n";
	}
    
	return 0;
}

 

위의 코드를 좀더 줄여봄

2가지 정도를 단순화했음

1. n을 10으로 나눈 나머지(n%10)의 값을 배열의 인덱스에 바로 쓸수있었다

2. while문의 조건을 변경해봄 (마지막에 n의 값을 반복문 바깥에서 저장해줬어야했는데 반복문 내에서 모두 처리하도록 함)

 

1 -> tmp 변수를 따로 선언해서 사용했는데 바로 인덱스로 사용가능하길래 줄임

 

2-> while문을 사용할 때 n(세 자연수의 곱셈 값)의 값을 10으로 나눈 몫이 0보다 클때까지 반복시켰는데

이런식으로 하면 while문이 종료되고 마지막에 따로 n의 값을 한번 더 저장해줘야돼서

 

반복문 하나로 다 처리하고싶어서 while 의 조건을 n/10 >0이 아니라 n>10으로 수정했다

 

 

 

 

#include <bits/stdc++.h>
using namespace std;

int main() {
	int a,b,c;
	cin >> a>> b >> c;
    
	int n = a*b*c;
	int arr[10]={0};
	
	while(n>0){
		arr[n%10]++;
		n/=10;
	}
	for(int i=0; i<10; i++){
		cout << arr[i] << "\n";
	}
	return 0;
}

 

 

출처 : www.acmicpc.net/problem/2577

 

2577번: 숫자의 개수

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

www.acmicpc.net

 

반응형

+ Recent posts