반응형

 

세 자리수의 자연수 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

 

반응형
반응형

백준 더하기 사이클 문제 풀이

 

 

 

입력한 값 n을 이용해서 x,y를 만들고 (x=n/10, y=n%10)

새롭게 만들어진 값 (임시 저장 값) tmp = (y + (x+y+의 10으로 나눈 나머지 값))을 입력값 n과 같아질 때까지 반복

 

26을 예로 들면

26 (x=2, y=6)

-> 2+6 = 8

-> (x+y)

tmp = 68

-> (10*y + (x+y)%10)

= 6*10 + (8)%10 과 같다

 

이 과정을  4번 반복하면 기존 입력한 값인 26이 나옴

 

 

구현은

이러한 루틴을 통해서 입력받은 값 26과 중간 과정 값이 일치할 때까지 while문 조건에 넣어서 반복시켰다

 

예제 값인 26을 입력했을때, 처음에 횟수를 출력할 cnt가 3이 나와서 뭐지했는데

이미 앞에서 tmp를 더한걸 추가해주지않아서 1보다 작은값이 나옴 ㅎ

 

 

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

int main() {
	int n = 0;
	int cnt = 0;    
	cin >> n;
    
	int x = n/10;
	int y = n%10;
    
	int tmp = y*10+(x+y)%10;
    
	cnt++;
    
	while(tmp!= n){
		x = tmp/10;
		y = tmp%10;
		tmp = y*10+(x+y)%10;
		cnt++;
	}
	
    cout<<cnt;
	
    return 0;
}

 

 

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

 

1110번: 더하기 사이클

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,

www.acmicpc.net

 

반응형

+ Recent posts