https://www.acmicpc.net/problem/1748
수 이어 쓰기 1
시간 제한메모리 제한제출정답맞은 사람정답 비율
1 초 | 128 MB | 8690 | 4668 | 3927 | 55.224% |
문제
1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.
1234567891011121314151617181920212223...
이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N(1≤N≤100,000,000)이 주어진다.
출력
첫째 줄에 새로운 수의 자릿수를 출력한다.
예제 입력 1 복사
120
예제 출력 1 복사
252
출처
- 문제를 만든 사람: author5
알고리즘 분류
처음에는 문제를 이해 못했다. ㅋㅋㅋㅋㅋㅋㅋ
맨날 난독증에 걸린 나년.. (ू˃̣̣̣̣̣̣︿˂̣̣̣̣̣̣ ू)
옆에 친구가 상세하게 나에게 설명해줘서
1 + 2 + 3+ 4 +.... + 11 + 12....
숫자를 문자로 인식해서 붙인다는 걸 알았음.
문제를 이해하는 것도 힘드네.. ( •́ ̯•̀ )
예쁘고 깔끔하게
이렇게 그냥 돌리면 나오는데
'메모리 초과'로 에러가 난다 (ᵒ̌▱ᵒ̌)
이때부터 머리에 쥐 남
일단 끄적여 본다.
끄적끄적..
// 입력하는 숫자수를 판가름해서 배열에 넣는다. 그 자릿수 0만큼.
// 그런데
//---- 일케하면안되고.... 10 -> 2자리 , 100 ->3자리, 10000->4자리..
// 100일 경우 => (1 * 9) : 1~9 + 2 * (99- 9)+ 3 * 1 => 192
// 1000일 경우 => (1*9) + 2 *(99-9) + 3 * (999-99) + 4 * 1 => 2893
// 120인 경우?
// (1 * 9) + 2 * (99- 9)+ 3 *(20+1) => 252
1~9 : 9건 : 1자리 --> 입력값 * 1
10~99 : 90건: 2자리 = 90*2 --> 9 + (입력값-9) * 2 + 2
100~999: 900건: 3자리 = 900*3 --> 9 + 180 + (입력값-99- >90) 결국 그냥 --> 90 + 입력값 * 3 + 3
1000~9999건: 4자리 = 9000*4 --> 9 + 180 + 2700 + (입력값 - 999) * 4 + 4...??
ex1) 120을 넣으면
9 (1자리: 1~9)+ 90*2 (2자리: 10~99) + 20(나머지) * 3 = 9 + 180 + 60 = 9+240= 249 -252 = 3 차이 (자릿수가 바뀔 때마다 1씩 추가? 하니깐 맞네..ㅎㅎㅎㅎ)
ex2) 252을 넣는다
9 (1자리: 1~9) + 180 (2자리: 10~99) + 252-100 * 3 = 9 + 180 + 456 = 645+ 3 = 648
오!? ✧٩(`·ω·´)و✧ 이거구나? 자 이걸 구현해보자
가장 고난스러웠던 부분은 10의 제곱승을 어떻게 만드느냐..?
끙끙거리다
구글 검색.. ๑°⌓°๑
Math.pow(a, b)라는 아름다운 함수를 발견..
한 시간 반 동안의 고민은 1분 만에 해결됨..
그냥 간단히
1의 자리 더하기 + 2의 자리 더하기 + (입력받은 값 - 10의 제곱승(배열의 자릿수-1) * 배열의자릿수) + 배열의 자리수
그냥 규칙 찾은 그대로 적용시켰다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
일단 더러운 코딩이든 뭐든 난 하는 것에 중점을 두겠다.
이후에 클린 코드도 공부하자.. (ง •̀_•́)ง✧
오늘도 뿌듯.. (?)
+ 친구들의 클린코드!
이렇게도 간단해 지는구나 〣(ºΔº)〣
'코딩 공부' 카테고리의 다른 글
백준연동/랭킹확인사이트 (0) | 2020.08.26 |
---|---|
[백준] 1110번 - 더하기 사이클 (Java) (0) | 2020.08.26 |
[백준] 2563번 - 색종이 (Java) (0) | 2020.08.05 |
[백준] 5585번 - 거스름돈 (Java) (0) | 2020.07.30 |
[백준] 2839번 - 설탕배달 (Java) (3) | 2020.07.29 |