레야몬
[C++] 1019번 책 페이지 - 수학 본문
#include <stdio.h>
#include <math.h>
#include <string.h>
typedef long long int ll;
char N[15]; //자연수 N
ll num[10];
int main()
{
int n=-1;
scanf("%s", N);
for(int i=0; N[i]; i++) n++; //자릿수 세기
//앞에 있는 숫자
num[0]+=(n-1)*(ll)pow(10, n-1) - ((ll)pow(10, n-1)-1)/9 - n*(ll)pow(10, n-1);
for(int i=0; i<=9; i++) num[i]+=n*(ll)pow(10, n-1)*(N[0]-'0');
for(int i=1; i<N[0]-'0'; i++) num[i]+=(ll)pow(10, n);
num[N[0]-'0']+=atoll(N+1)+1;
n--;
for(int i=1; N[i]; i++) {
for(int j=0; j<=9; j++) num[j]+=(ll)n*(ll)pow(10, n-1)*(N[i]-'0');
for(int j=0; j<N[i]-'0'; j++) num[j]+=(ll)pow(10, n);
num[N[i]-'0']+=atoll(N+i+1)+1;
n--;
}
for(int i=0; i<=9; i++)
printf("%lld ", num[i]);
return 0;
}
<알고리즘>
- 제일 앞에 있는 숫자는 0은 처음에는 (n-1)*10^(n-1)-(10^(n-1)-1)/9에 그 뒤로 0포함 다른 숫자들은 n*10^(n-1)*N[0]에 0은 N[0]-1이다.
- 남은 숫자들 만큼 제일 앞 숫자가 계속 나타나므로 atoll(N+1)+1만큼 해준다.
- 뒤 숫자들도 비슷한 방법으로 한다.
정말 멍멍이 같은 문제였다. 알고리즘을 다 짜고 나니 뭐 없기는 한데 열받는다.
<atoll()>
https://notepad96.tistory.com/67
C++ String to int, int to String - 문자열 숫자 형변환
1. 문자열 숫자 간 형변환 문자열(string)을 숫자(int)로 형변환하기 위해서 stoi 함수를 사용할 수 있다. stoi 이는 string to integer이 축약된 단어이며 마찬가지로 double형으로 변환하고 싶다면 stod를, lon
notepad96.tistory.com
※현재 고등학교 등교중인 학생입니다. 이제 알고리즘을 본격적으로 공부하기 시작해서 아직 초보입니다. 혹시 제가 잘못 알고있는 점이나 더 좋은 풀이 방법이 있어 댓글에 남겨주시면 감사히 하나하나 열심히 읽어보겠습니다. 좋아요, 단순한 댓글 한마디라도 저에겐 큰 힘이 됩니다! 감사합니다.
'알고리즘 > 백준' 카테고리의 다른 글
[C++] 1708번 볼록 껍질 - 기하학, 볼록 껍질 (0) | 2022.10.03 |
---|---|
[C++] 1533번 길의 개수 - 수학, 분할 정복 (0) | 2022.10.03 |
[C++] 17387번 선분 교차 2 - 기하학, 많은 조건 분기, 선분 교차 판정 (0) | 2022.10.01 |
[C++] 14003번 가장 긴 증가하는 부분 수열 5 - 이분 탐색, 가장 긴 증가하는 부분 수열 (0) | 2022.09.30 |
[C++] 13460번 구슬 탈출 2 - 구현, 시뮬레이션 (0) | 2022.09.29 |
Comments