프로그래밍/알고리즘 PS
[C++] BOJ 1748번: 수 이어 쓰기 1
코딩 제이티
2024. 3. 28. 14:07
학교에서 진행하는 수업에서 같이 듣는 팀원이 공유한 알고리즘 문제를 풀어보았다. 문제의 난이도는 실버 4이다.
문제 링크
https://www.acmicpc.net/problem/1748
문제 분석
해당 문제는 1부터 n까지의 숫자를 이어 붙여 만들어낸 새로운 수의 자리수를 구하는 문제이다.
문제 풀이
새로운 수의 자릿수를 구하려 하다 보면 1 ~ 9는 1, 10 ~ 99는 2, 100 ~ 999는 3... 이렇게 자릿수가 늘어날 때마다 1씩 증가한 수를 더해주는 것을 알 수 있다. 이를 토대로 아래와 같은 순서를 지키며 코드를 구현할 수 있다.
- 자릿수의 값을 초기에는 0으로 지정한다
- 숫자가 10 이하일 경우 자릿수의 값에 1을 더한다
- 숫자가 10 이상이고 100보다 작으면 자릿수의 값에 2를 더한다
- 숫자가 100 이상이고 1000보다 작으면 자릿수의 3을 더한다.
...
1부터 N까지 위의 과정을 반복한다.
전체 코드
위의 작업을 종합해 작성한 전체 코드는 다음과 같다.
#include <iostream>
using namespace std;
int N;
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int current_count = 1;
int current_max = 10;
int result = 0;
cin >> N;
for (int i = 1; i <= N; i++)
{
if (i >= current_max)
{
current_count++;
current_max *= 10;
}
result += current_count;
}
cout << result << '\n';
return 0;
}
결과
