mooonπŸŒ™
STUDY
mooonπŸŒ™
전체 방문자
였늘
μ–΄μ œ
  • λΆ„λ₯˜ 전체보기 (170)
    • μ½”λ”© ν…ŒμŠ€νŠΈ (147)
      • λ°±μ€€ μ•Œκ³ λ¦¬μ¦˜ (53)
      • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] Lv1 (13)
      • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] μ½”λ”© ν…ŒμŠ€νŠΈ μž…λ¬Έ (54)
      • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] SQL 고득점 Kit (27)
    • BACK (4)
      • Spring (3)
      • PHP (0)
    • FRONT (5)
    • DevOps (8)
      • Jenkins (8)
    • GitHub🌱 (2)
    • λ°μ΄ν„°λ² μ΄μŠ€ (1)
      • SQL (1)
    • Error πŸ’₯ (0)
      • php (2)
    • πŸ˜‹ (1)

λΈ”λ‘œκ·Έ 메뉴

  • ⭐ κΉƒν—ˆλΈŒ
  • πŸ’• λ°©λͺ…둝
  • πŸ’₯ νƒœκ·Έ

인기 κΈ€

νƒœκ·Έ

  • μ½”λ”©ν…ŒμŠ€νŠΈ μž…λ¬Έ
  • λ°±μ€€
  • SQL 고득점 Kit
  • SQL
  • μ•Œκ³ λ¦¬μ¦˜
  • Python
  • DevOps
  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€
  • λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°
  • c++

졜근 κΈ€

250x250
hELLO Β· Designed By μ •μƒμš°.
mooonπŸŒ™

STUDY

λ°±μ€€ 9421 _ μ†Œμˆ˜μƒκ·Όμˆ˜
μ½”λ”© ν…ŒμŠ€νŠΈ/λ°±μ€€ μ•Œκ³ λ¦¬μ¦˜

λ°±μ€€ 9421 _ μ†Œμˆ˜μƒκ·Όμˆ˜

2020. 8. 3. 16:47
728x90

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

 

9421번: μ†Œμˆ˜μƒκ·Όμˆ˜

문제 μ–‘μ˜ μ •μˆ˜ n의 각 자리수의 제곱의 합을 κ³„μ‚°ν•œλ‹€. κ·Έλ ‡κ²Œ ν•΄μ„œ λ‚˜μ˜¨ 합도 각 자리수의 제곱의 합을 κ³„μ‚°ν•œλ‹€. μ΄λ ‡κ²Œ λ°˜λ³΅ν•΄μ„œ 1이 λ‚˜μ˜¨λ‹€λ©΄, n을 μƒκ·Όμˆ˜λΌκ³  ν•œλ‹€. 700은 μƒκ·Όμˆ˜μ΄λ‹€. 72 + 02

www.acmicpc.net


✨ λ‚΄ μ†ŒμŠ€ μ½”λ“œ

#include<iostream>
#include <vector>
using namespace std;
int dp[1000001] = { 1, };
//0->ν•œλ²ˆ λ°©λ¬Έ, -1->μ•„λ‹˜,1->맞음

int func(int n) {
    int sum = 0;

    while (n != 0) {
        sum += (n % 10) * (n % 10);
        n /= 10;
    }
    if (dp[sum]==-1) {
        return dp[sum];
    }
    if (sum == 1) {
        return 1;
    }
    if (dp[sum] == 0) {
        return -1;
    }
    dp[sum] = 0;
    dp[sum] = func(sum);
    return dp[sum];
}

int main(void) {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    int N;
    vector<int> vec;
    cin >> N;
    fill_n(dp, 1000001, 1);
    for (int i = 0; i <= N; i++) {
        vec.push_back(i);
    }

    //μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체
    for (int i = 2; i <= N; i++) {
        if (vec[i] == 0) {
            continue;
        }
        for (int j = 2; j*vec[i] <= N; j++) {
            vec[j*vec[i]] = 0;
        }
    }

    //μƒκ·Όμˆ˜ 탐색
    for (int i = 2; i <= N; i++) {
        if (vec[i] != 0) {
            if (func(vec[i])==1) {
                cout << vec[i] << '\n';
            }
        }
    }

    return 0;
}

 

πŸ™ 문제 풀이

μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체λ₯Ό μ΄μš©ν•΄ 일단 μ†Œμˆ˜λ₯Ό κ±ΈλŸ¬λ‚΄κ³ , μ†Œμˆ˜λ“€ μ€‘μ—μ„œ μƒκ·Όμˆ˜μΈ 것을 탐색

 

ν•œ 번 κ±°μ³κ°€κ²Œ 되면 무쑰건 0으둜 μ €μž₯, μ˜ˆμ‹œλŠ” μ•„λž˜μ™€ κ°™λ‹€

  • 2^2= 4 -> dp[4] = 0
  • 4^2= 16 0 -> dp[16] = 0
  • 1^2+ 6^2= 37 -> dp[37] = 0
  • 3^2+ 7^2= 58 -> dp[58] = 0
  • 5^2+ 8^2= 89 -> dp[89] = 0
  • 8^2+ 9^2= 145 -> dp[145] = 0
  • 1^2+ 4^2+ 5^2= 42 -> dp[42] = 0
  • 4^2+ 2^2= 20 -> dp[20] = 0
  • 2^2+ 0^2= 4 -> dp[4]λŠ” 이미 0이기 λ•Œλ¬Έμ— -1 λ°˜ν™˜

μœ„μ˜ dp[4] = dp[16] = dp[37] = dp[58] = dp[89] = dp[145] = dp[42] = dp[20] = -1이 됨

 

κ·Έ ν›„ μ–΄λ–€ 수의 계산을 ν•˜λ“  쀑간에 4, 16, 37, 58, 89, 145, 42, 20, 쀑에 ν•˜λ‚˜κ°€ λ‚˜μ˜€λ©΄ μœ„μ™€ λ™μΌν•˜κ²Œ 계산이 μ§„ν–‰λ˜μ–΄ λ¬΄ν•œλ£¨ν”„μ— λΉ μ§€κΈ° λ•Œλ¬Έμ—, μœ„μ˜ 숫자 쀑 ν•˜λ‚˜κ°€ λ‚˜μ˜€λ©΄ 무쑰건 μƒκ·Όμˆ˜κ°€ μ•„λ‹˜

 

if (dp[sum]==-1) { return dp[sum];} : κ³„μ‚°ν•œ μˆ˜κ°€ 이미 μƒκ·Όμˆ˜κ°€ μ•„λ‹ˆλΌκ³  판λͺ…이 λ‚˜μžˆμœΌλ©΄, μ΄ν›„λŠ” λΆˆν•„μš”ν•œ 계산이기 λ•Œλ¬Έμ— -1 값을 λ°˜ν™˜

 

μƒκ·Όμˆ˜μΈ κ²½μš°λŠ” sum이 1일 λ•Œμ΄λ‹€. μƒκ·Όμˆ˜κ°€ 맞으면 1을 λ°˜ν™˜ν•˜μ—¬ μƒκ·Όμˆ˜κ°€ 아닐 κ²½μš°μ™€ λ™μΌν•˜κ²Œ λ§žλŠ” 경우의 μˆ«μžλ“€μ— 1의 값을 λ„£μ–΄μ€€λ‹€

 

 

⭐ 문제 풀이 κ²°κ³Ό

728x90
μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€ (μƒˆμ°½μ—΄λ¦Ό)
    'μ½”λ”© ν…ŒμŠ€νŠΈ/λ°±μ€€ μ•Œκ³ λ¦¬μ¦˜' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • λ°±μ€€ 11399 _ ATM
    • λ°±μ€€ 16637 _ κ΄„ν˜Έ μΆ”κ°€ν•˜κΈ°
    • λ°±μ€€ 4811 _ μ•Œμ•½
    • λ°±μ€€ 1074 _ Z
    mooonπŸŒ™
    mooonπŸŒ™
    개발 곡뢀 기둝

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”