세 자리수의 자연수 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
'문제풀기' 카테고리의 다른 글
[백준/BOJ] 구현 11399번 문제, ATM C++ 풀이 (0) | 2021.03.21 |
---|---|
[백준/BOJ] 구현 2562번 문제, 최댓값 C++ 풀이 (0) | 2021.03.17 |
[백준/BOJ] 구현 8958번 문제, OX퀴즈 C++ 풀이 (0) | 2021.03.14 |
[백준/BOJ] 구현 1110번 문제, 더하기 사이클 C++ 풀이 (0) | 2021.03.11 |
[백준/BOJ] 구현 2588번 문제, 곱셈 C++ 풀이 (0) | 2021.03.10 |
[백준/BOJ] 구현 2753번 문제, 윤년 C++ 풀이 (0) | 2021.03.10 |