개발바닥

BOJ_1790 [ 수 이어 쓰기 2 ] 본문

[ Algorithm ]/ [ BOJ ]

BOJ_1790 [ 수 이어 쓰기 2 ]

라이언 2020. 4. 7. 19:11
반응형

문제

https://www.acmicpc.net/problem/1790

 

 

문제 해결 방법

10^0 총 개수 = 9개

10^1 총 개수 = 90개

10^2 총 개수 = 900개

10^3 총 개수 = 9000개

  ...                ...

 

위 규칙을 이용해서 입력 값 M이 어떤 숫자인지 구하고

나머지 값을 이용해서 해당 자리수에 값을 출력하였습니다.

 

 

소스 코드

https://github.com/jokerKwu/BOJ_Algorithm/blob/master/Math/boj_1790.cpp

#include<iostream>
#include<vector>
#include<algorithm>
#include<math.h>
#include<string>
using namespace std;
int N, K;
typedef long long ll;
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	cin >> N >> K;
	int tmp = K;
	int num = 0;
	for (int i = 0; i < 9; i++) {
		ll tmp_value = (pow(10, i)*9)*(i+1);	//각 자리수마다 총 필요한 자리수를 계산
		if (tmp <= tmp_value) {
			//몇번째 숫자인지 체크
			int value = ceil((double)tmp / (double)(i + 1));
			num += value;
			string str_num = to_string(num);	
			if (num <= N) {
				int index = tmp % (i + 1);
				index +=i;
				cout << str_num[index%(i+1)] << '\n';
				break;
			}
			else {	// 범위보다 숫자가 초과하면 -1을 출력한다.
				cout << -1 << '\n';
				break;
			}
		}
		else {
			tmp -= tmp_value;		  
			num += (pow(10, i) * 9); //각 자리수마다 숫자 개수를 계속 더한다
		}
	}
	return 0;
}

 

반응형

'[ Algorithm ] > [ BOJ ]' 카테고리의 다른 글

BOJ_18808 [ 스티커 붙이기]  (0) 2020.04.08
BOJ_18809 [ Gaaaaaaaaaarden ]  (0) 2020.04.07
BOJ_17608 [ 막대기 ]  (0) 2020.03.17
BOJ_17609 [ 회문 ]  (0) 2020.03.17
BOJ_17610 [ 양팔저울 ]  (0) 2020.03.17
Comments