8μ κ°μ ꡬνκΈ° (1~10μ΅) C++
κ΅¬κΈ μ μ¬λ¬Έμ
κ΅¬κΈ μ
μ¬ λ¬Έμ μ€, 1λΆν° 100000 μ¬μ΄μΈ Nμ΄ μ£Όμ΄μ§κ³ , 1λΆν° N
κΉμ§μ μμμ 8μ΄ λμ€λ νμλ₯Ό μΆλ ₯νλ λ¬Έμ κ° μλ€.
μ¬κΈ°μ 88μ΄λΌλ μ«μκ° μμΌλ©΄, 88μ 8μ΄ λ κ° λ€μ΄κ°λ―λ‘, 2λ‘ μΉ΄μ΄νΈν΄μΌ λλ€.N
μ΄ μ΅λ 10λ§μ΄κΈ° λλ¬Έμ, 10λ§μ μ리μλ 6μ΄λ―λ‘, μ΅μ
μ μκ° λ³΅μ‘λλ‘ μκ°ν΄λ 60λ§μ΄ λλ€.
λ°λΌμ μ¬λ¬ κ°μ§ νμ΄λ€μ΄ μκ² μ§λ§, κ° μ«μλ₯Ό μννλ©΄μ κ° μ«μμ μ리μλ₯Ό νλνλ νμΈν΄λ 1μ΄ μμ μΉ΄μ΄νΈκ° κ°λ₯νλ€.
10μ΅μΌλ‘ νμ₯
Nμ΄ 1λΆν° μ΅λ 10μ΅κΉμ§λΌκ³ μ£Όμ΄μ§λ€λ©΄ λ¬Έμ λ₯Ό μ΄λ»κ² νμ΄μΌ ν κΉ?
9μ΅κΉμ§λΌκ³ λ§ ν΄λ 9μ΅ * 9μ΅μ μ리μμ΄κΈ° λλ¬Έμ λ¨μνκ² μμ νμμ νλ©΄ μκ° μ΄κ³Όκ° λλ€.
μμ νμμ΄ μλ ν¨μ¨μ μΈ λ°©λ²μ μ°ΎμμΌ νλ€.
ν΄κ²° λ°©λ²
νμ₯λ λ¬Έμ λ₯Ό νΈλ λ°©λ²μ, κ° μ리 μλ§λ€ λλ μ 8μ΄ λ±μ₯νλ νμλ₯Ό ꡬν΄μΌ νλ€.
μλ₯Ό λ€μ΄ Nμ΄ 4μ리μ μ λΌλ©΄, κ²½μ°λ₯Ό 4κ°μ§λ‘ λλ λ€ νμλ₯Ό λν΄μ€μΌ νλ€.
μ΄λ νμ리 νμ리λ§λ€ νμΈν λ, κ·Έ ν μλ¦Ώμλ₯Ό μΈ κ°μ§ κ²½μ°λ‘ λλ μΌ νλ€.
8 λ³΄λ€ μμ λ
8 μΌ λ
8 λ³΄λ€ ν΄ λ
μΈ κ°μ§ κ²½μ°λ‘ λλ λ€, ν΄λΉνλ μ리μμ μΌμͺ½ μλ€κ³Ό μ€λ₯Έμͺ½ μ λ€μ νμΈνκ³ μΉ΄μ΄νΈνλ λ°©μμΌλ‘ ν΄κ²°νλ€.
8 λ³΄λ€ μμ λ
52723
μ΄λΌλ μ«μκ° μκ³ , μΈ λ²μ§Έ μ리μμ 8μ΄ λͺ λ² λμ¬ μ μλμ§ νμΈνλ€κ³ νμ.
52xxx μΌ λλ, μΈ λ²μ§Έ μ리μκ° 7μμΌλ‘ 8μ΄ λ±μ₯ν μ μλ€.00
8.., 01
8.., 02
8.., ... 51
8..κΉμ§ μμ μλ₯Ό νμΈνλ©΄ μ΄ 0~51κΉμ§κΉμ§ 52μ κ²½μ°μ μκ° λμ¨λ€.
8λ€μ .. μ 0λΆν° 99κΉμ§ μ΄ 100κ°μ§μ κ²½μ°μ μκ° λμ¨λ€. κ²°κ³Όμ μΌλ‘ 52*100
μ¦, (μμ리 μ) * 10^λ·μ리μ
λ₯Ό λν΄μΌ νλ€.
8 μΌ λ
μμμ 8λ³΄λ€ μμ λμμ 528
..κΉμ§ μΉ΄μ΄νΈκ° λλ―λ‘ 8λ³΄λ€ μμ λμ κ²½μ°μ μμμ,
λ€μ ..μμ λμ¬ μ μλ κ²½μ°μ μμΈ 0~ λ·μ리 μ -> λ·μ리 μ + 1μ κ²½μ°μ μλ₯Ό λν΄μΌ νλ€.
μ¦ (μμ리 μ) * 10^λ·μ리μ + λ·μ리 μ+1
μ λν΄μΌ νλ€.
8 λ³΄λ€ ν΄ λ
8 λ³΄λ€ ν΄ λλ 529.. μμΌλ‘ 528..
λ‘ μμνλ λͺ¨λ μλ₯Ό λν μ μλ€.
μ¦ 0~52κΉμ§μΈ κ²½μ°μ μλ 52+1μ΄λ―λ‘ (μμ리 μ+1) * 10^λ·μ리μ
λ₯Ό λν΄μΌ λλ€.
μμ€μ½λ
#include <iostream>
using namespace std;
long long result;
long long sumResult(int leftNum, int rightNum, int swc, int digit);
int main(void) {
int N;
cin >> N;
int rightNum = 0;
int leftNum = N;
int nowdigit = 1;
while (leftNum) {
int lastNum = leftNum % 10;
leftNum /= 10;
int swc;
if (lastNum < 8) swc = -1;
else if (lastNum == 8) swc = 0;
else swc = 1;
result += sumResult(leftNum, rightNum, swc, nowdigit);
rightNum += lastNum * nowdigit;
nowdigit *= 10;
}
cout << result << '\n';
return 0;
}
long long sumResult(int leftNum, int rightNum, int swc, int digit) {
if (swc == -1) {
return leftNum * digit;
}
else if (swc == 0) {
return leftNum * digit + rightNum + 1;
}
else {
return (leftNum + 1) * digit;
}
}
λͺ¨λ κ²½μ°μ μλ€μ μ½λλ‘ λνλ΄λ©΄ μμ κ°μ΄ ꡬνν μ μλ€.
'Algorithm > μ΄λ‘ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
ν¬ν¬μΈν° μκ³ λ¦¬μ¦ (0) | 2022.03.09 |
---|---|
μ ν, λ²λΈ, μ½μ μ λ ¬ (0) | 2022.03.09 |
Trie(νΈλΌμ΄) μκ³ λ¦¬μ¦ (0) | 2022.03.08 |
μλΌν μ€ν λ€μ€μ 체 (0) | 2022.03.05 |
μ ν΄λ¦¬λ νΈμ λ² (0) | 2022.03.05 |