250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 백준#boj#16932#모양만들기
- 백준#boj#12755
- 백준#BOJ#12865#평범한배낭
- 백준#BOJ#14501#퇴사#브루트포스
- 백준#BOJ#2615#오목
- 백준#BOJ#1939#중량제한
- 백준#BOJ#8012#한동이는영업사원
Archives
- Today
- Total
순간을 성실히, 화려함보단 꾸준함을
[boj : 12755] 수면 장애 본문
https://www.acmicpc.net/problem/12755
개인적으로 너무 힘들게 풀었던 문제입니다.
이걸 대체 어떻게 푸나,,,,싶었는데 풀었네요.
1. 입력된 input(=n) 값을 가지고 증가하는 수의 자릿수를 매번 빼준다면 결국에는 1억번의 연산 밑이 될거라는 생각으로 문제를 접근하였습니다.
2. 수를 1씩 증가시켜 주면서 이 수가 몇자리수(ret) 인지 계산을 해줍니다.
3. n 값에서 ret 값을 매번 빼줍니다.
4. n 이 0이 거나 0보다 작아지면 루프문을 빠져나옵니다.
5. n<=0 인걸 가지고 해당되는 값을 도출해 냅니다.
===>
ex) 만약 15번째 숫자를 알고 싶다면, n은 결국 0 이 됩니다. (12345678910111213)
이 '0'이 의미하는 바는 마지막을 빼준 값(cnt)에서 가장 낮은 자릿수에서 '|0|+1'번째 숫자라는 뜻입니다. (즉,맨 오른쪽 숫자부터 시작해서 0번 왼쪽으로 점프 한 값이라는 뜻)
다른 예제로 16이라면 n은 -1 이 되죠.(1234567891011213)
그럼 가장 낮은 자릿수에서 |-1| + 1 번째 숫자가 해당됩니다.(맨 오른쪽 숫자부터 시작해서 1번 왼쪽으로 점프한 값)
설명을 개떡같이 한 것 같은데 잘 이해가 안가시면 댓글로 남겨주세염
#include<bits/stdc++.h>
using namespace std;
int main()
{
int input,n,cnt=0;
cin >> input;
n = input;
int t;
while (n > 0) {
int ret = 0;
cnt++;
t = cnt;
while (t > 0)
ret++, t /= 10;
n -= ret;
}
int x = abs(n),ans;
for (int i = 0; i <= x; i++)
ans=cnt%10,cnt /= 10;
cout << ans;
return 0;
}
'알고리즘,SQL > 백준,BOJ' 카테고리의 다른 글
[boj : 2651]자동차경주대회 (0) | 2020.11.17 |
---|---|
[boj : 2020] 부분 염기서열 (2) | 2020.11.05 |
[boj : 8012]한동이는 영업사원! (0) | 2019.07.20 |
[ boj : 1939]중량제한 (0) | 2019.07.07 |
[boj : 16434] 드래곤 앤 던전 (0) | 2019.07.02 |