728x90
● [문제번호 1748] 수 이어 쓰기 1
https://www.acmicpc.net/problem/1748
● 알아야 할 것
: 브루트 포스 (Brute Force)
: 숫자 → 문자 변환 방법
: {math헤더 - pow(a, b)} a의 b제곱
● 풀이 과정
: string 문자열을 이용하여 간단하게 구현하면 '메모리 초과' 결과가 나온다.
조금 더 고민하니 약간의 규칙이 있어서 수학적 계산만 하면 된다.
: 입력된 숫자의 자릿수가 len이라고 할 때
len - 1까지 (9 * i * 10^i) 로 구할 수 있다.
(단, i < len)
그 다음 len 자릿수들의 길이만큼 더하면 된다.
● 주의 할 것
: N과 동일한 자릿수들을 주의해서 구한다.
● 참고 할 것
: NULL
● 풀이 코드
#include <bits/stdc++.h>
using namespace std;
// digit : 구하고자하는 자릿수
int digit;
int N;
// 매개변수의 자릿수 구하기
int numlen(int num)
{
int len = 0;
while(num > 0)
{
len++;
num /= 10;
}
return len;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> N;
// N의 자릿수
int len = numlen(N);
// N의 자릿수보다 작은 수들의 자릿수 구하기
for(int i = 1; i < len; i++)
digit += (9 * i * pow(10, i - 1));
// N보다 작거나 같고
// N의 자릿수과 같은 수들의 자릿수 구하기
digit += (N - pow(10, len - 1) + 1) * len;
cout << digit;
return 0;
}
● [백준] - [알고리즘 기초 2/2] - [500 - 브루트 포스] 문제집
번호 | 문제 번호 | 문제 이름 | 풀이 링크 |
1 | 2309 | 일곱 난쟁이 | https://pirateturtle.tistory.com/228 |
2 | 3085 | 사탕 게임 | https://pirateturtle.tistory.com/229 |
3 | 1476 | 날짜 계산 | https://pirateturtle.tistory.com/230 |
4 | 1107 | 리모컨 | https://pirateturtle.tistory.com/231 |
5 | 14500 | 테트로미노 | https://pirateturtle.tistory.com/232 |
6 | 6064 | 카잉 달력 | https://pirateturtle.tistory.com/233 |
7 | 1748 | 수 이어 쓰기 1 | https://pirateturtle.tistory.com/234 |
8 | 9095 | 1, 2, 3 더하기 | https://pirateturtle.tistory.com/235 |
728x90
'Baekjoon > [Code.plus] 알고리즘 기초 2/2' 카테고리의 다른 글
[BOJ/백준] 10973 이전 순열 (0) | 2021.09.02 |
---|---|
[BOJ/백준] 10972 다음 순열 (0) | 2021.09.02 |
[BOJ/백준] 9095 1, 2, 3 더하기 (0) | 2021.09.02 |
[BOJ/백준] 6064 카잉 달력 (0) | 2021.09.02 |
[BOJ/백준] 14500 테트로미노 (0) | 2021.09.02 |
[BOJ/백준] 1107 리모컨 (0) | 2021.09.02 |
[BOJ/백준] 1476 날짜 계산 (0) | 2021.09.02 |
댓글