[백준 BOJ] 14912번 숫자 빈도수 (C++/cpp)

2022. 7. 17. 02:00PS (Program Solving)/BOJ (백준)

문제 설명

https://www.acmicpc.net/problem/14912

 

14912번: 숫자 빈도수

자연수 n (1 ≤ n ≤ 100,000)과 한 자리 숫자 d(0~9)가 첫째 줄에 주어진다.

www.acmicpc.net

백준 BOJ 14912번 숫자 빈도수 문제 사진

 

접근 방법 - 브루트포스 알고리즘을 이용한 문제

백준의 14912번 문제는 브루트포스 알고리즘을 이용한 수학 문제이다.

해당 문제는, 1부터 입력받은 숫자(a)까지 특정 숫자(n)가 몇 개 포함되어있는지를 출력해야 하는 문제이다.

필자의 경우엔 이중 반복문을 이용하여 브루트포스 알고리즘을 수행하였다.

활용한 방법에 대해선 아래로 설명을 기재하였으니 자세한 내용은 아래를 참고해보길 바란다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) a와 n을 차례로 입력받는다.

(문제: 1부터 a까지의 숫자들 중 n의 숫자를 총 몇 개 포함하고 있는가?)

 

2) 문제에 대한 정답을 카운팅할 변수 cnt를 0으로 초기화하여 선언한다.

 

3) 이중 반복문을 사용하여 아래의 연산을 취한다.

- 1부터 a까지 탐색하며 각 자릿수를 추출한다.

- 만일 현재 탐색값의 특정 자릿수에 n의 숫자가 발견될 시, cnt에 1을 더한다.

 

4) 3)에서 모든 연산이 완료되었다면, 최종적으로 저장된 cnt를 출력한 뒤 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#define endl '\n'
using namespace std;

//백준 14912번 코드
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);

	int a, n;
	cin >> a >> n;

	int cnt = 0;
	for (int i = 1; i <= a; i++) {
		for (int j = 1; j <= i; j *= 10) {
			if (i % (j * 10) / j == n) { cnt++; }
		}
	}
	cout << cnt << endl;
}

제출 결과

백준 BOJ 14912번 숫자 빈도수 문제 C++ 제출 결과

(2022.06.03 백준 14912번 문제 제출 결과)

반응형