본문 바로가기
Baekjoon/[Code.plus] 알고리즘 기초 2/2

[BOJ/백준] 1748 수 이어 쓰기 1

by 해적거북 2021. 9. 2.
728x90

● [문제번호 1748] 수 이어 쓰기 1

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

 

1748번: 수 이어 쓰기 1

첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다.

www.acmicpc.net

 

● 알아야 할 것

: 브루트 포스 (Brute Force)

: 숫자 → 문자 변환 방법

: {math헤더 - pow(a, b)} a의 b제곱

 

● 풀이 과정

: string 문자열을 이용하여 간단하게 구현하면 '메모리 초과' 결과가 나온다.

조금 더 고민하니 약간의 규칙이 있어서 수학적 계산만 하면 된다.

 

: 입력된 숫자의 자릿수가 len이라고 할 때

len - 1까지 (9 * i * 10^i) 로 구할 수 있다.

(단, i < len)

 

그 다음 len 자릿수들의 길이만큼 더하면 된다.

N과 동일한 자릿수들을 주의해서 구하기

 

● 주의 할 것

: N과 동일한 자릿수들을 주의해서 구한다.

 

● 참고 할 것

: NULL

 

● 풀이 코드

#include <bits/stdc++.h>

using namespace std;

// digit : 구하고자하는 자릿수
int digit;
int N;

// 매개변수의 자릿수 구하기
int numlen(int num)
{
    int len = 0;
    while(num > 0)
    {
        len++;
        num /= 10;
    }
    return len;
}


int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    cin >> N;
    
    // N의 자릿수
    int len = numlen(N);
    
    // N의 자릿수보다 작은 수들의 자릿수 구하기
    for(int i = 1; i < len; i++)
        digit += (9 * i * pow(10, i - 1));
    
    // N보다 작거나 같고
    // N의 자릿수과 같은 수들의 자릿수 구하기
    digit += (N - pow(10, len - 1) + 1) * len;
    
    cout << digit;

    return 0;
}

 

 

● [백준] - [알고리즘 기초 2/2] - [500 - 브루트 포스] 문제집

번호 문제 번호 문제 이름 풀이 링크
1 2309 일곱 난쟁이 https://pirateturtle.tistory.com/228
2 3085 사탕 게임 https://pirateturtle.tistory.com/229
3 1476 날짜 계산 https://pirateturtle.tistory.com/230
4 1107 리모컨 https://pirateturtle.tistory.com/231
5 14500 테트로미노 https://pirateturtle.tistory.com/232
6 6064 카잉 달력 https://pirateturtle.tistory.com/233
7 1748 수 이어 쓰기 1 https://pirateturtle.tistory.com/234
8 9095 1, 2, 3 더하기 https://pirateturtle.tistory.com/235

 

728x90

댓글