[BAEKJOON - C++] 2577번 : 숫자의 개수

정다은·2023년 7월 4일
0

BAEKJOON

목록 보기
50/54
C++ 배우기 (101~150) 이 문제집을 참고하여 문제를 풀었습니다.

2023년 1월 ~ 2월에 프로그래밍을 공부하기 위해 풀었던 문제들이다.

🍑문제

세 개의 자연수 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까지의 숫자가 각각 몇 번 쓰였는지 차례로 한 줄에 하나씩 출력한다.

🍑대략적인 틀

  • 세 수를 enter를 기준으로 입력받음
    • 어떻게 입력받아서 연산한 것을 string으로 바꾸겠는가?
    1. string 헤더에 포함된 to_string(변수명) 함수

    2. stringstream 스트링변수명;

    3. 10으로 계속 나누어 나눈 나머지를 통해 한자리씩 분리 →

          while(a != 0){
              cout << a%10 << "\n";
              a /= 10;
          }

      스트링변수명 << 정수

  • 세 수를 곱한 수에 0부터 9까지 총 몇개가 쓰였는지 출력함
    • 한줄씩 차례대로 출력
    • for문을 돌려서 세고 출력하고 다음수로 넘어가고 이런식으로 하면됨

🍑오류 해결

  • to_string()을 쓰면 한글자씩 배열의 한 인덱스를 차지 할 줄 알았는데, 출력해보니 이런 이상한 결과가 나왔다. 숫자를 한글자씩 배열에 저장하는 법은 없는걸까..

    그래서 결국 구글링을 통해 새로운 방법을 찾았다.
    참고한 글 바로가기

  • 또한 % 연산자는 int형 만 계산이 가능하다는 것과 데이터 타입이 양변이 맞아야 순탄하게 돌아간다는 것도 알았다.

🍑 작성한 코드

// 숫자의 개수

#include <iostream>
#include <vector>
using namespace std;

int main() {
	long long a, b, c;
	long long result;
	cin >> a >> b >> c;

	result = (a * b * c);
	vector<long long> store;
	while (result != 0) {
		store.push_back(result % 10);
		result /= 10;
	}

	for (int i = 0; i <= 9; i++) {
		int count = 0;
		for (int j = 0; j < store.size(); j++) {
			if (store[j] == i)
				count++;
		}
		cout << count << '\n';
	}
}
profile
보안 공부하는 대학교 3학년 / 시리즈에서 더욱 편하게 글을 찾아보실 수 있습니다:)

0개의 댓글