출처: https://bumcrush.tistory.com/182 [맑음때때로 여름]
https://www.acmicpc.net/problem/1748
1748번: 수 이어 쓰기 1
첫째 줄에 N(1≤N≤100,000,000)이 주어진다.
www.acmicpc.net
#include <iostream>
using namespace std;
int N;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> N;
long long ans = 0;
int i = 1;
while (i <= N)
{
ans += N - i + 1;
i *= 10;
}
cout << ans << "\n";
}
어떻게 풀어야 할지 생각해보다가 생각하기가 너무 싫어서 다른 분의 코드를 봐버렸다...(출처:https://rebas.kr/753) 아마 더 충분한 시간을 가지고 고민했어도 이런 획기적인(?) 생각은 하지 못했을 것이다.
이 코드의 핵심은 자릿수로 나누어서 생각한다는 것이었다.
input이 120인 경우
1의 자리를 가지는 개수 = 252개
10의 자리를 가지는 개수 = 252-9개
100의 자리를 가지는 개수 = 252 -99개
총 252개가 된다.
아이디어 자체가 되게 재밌고 대단한 것 같다. 잘 기억해뒀다가 나중에 써먹는 일이 있었으면 좋겠다.
백준 14502 연구소(dfs) (0) | 2020.07.23 |
---|---|
BFS, DFS (0) | 2020.07.19 |
백준 1966 프린터 큐(brute force) (0) | 2020.07.18 |
백준 7568 덩치(brute force) (0) | 2020.07.16 |
백준 4641 Doubles(brute force) (0) | 2020.07.16 |
댓글 영역