HelloMinchan
처음처럼
HelloMinchan
LinkedIn
전체 방문자
오늘
어제
  • 분류 전체보기 (306)
    • Backend (4)
      • NestJS (1)
      • Express (1)
      • Spring (2)
    • Infrastructure (1)
      • AWS (1)
    • Frontend (1)
      • Next.js (1)
    • Language & Runtime (4)
      • Java (2)
      • Node.js (2)
    • Computer Science (8)
      • Computer Networks (3)
      • Operating Systems (4)
      • OOP (1)
    • 독서 (4)
      • 데이터 중심 애플리케이션 설계 (3)
      • 객체지향의 사실과 오해 (1)
    • 회고 (4)
      • Project (2)
      • Career (2)
    • Deprecated (280)

채널

  • GitHub
  • LinkedIn

최근 글

태그

  • 개발자
  • 프로그래머스
  • front-end
  • 백준Go
  • 알고스팟
  • Algospot
  • 데이터베이스
  • 프로그래머스Python
  • Baekjoon Online Judge
  • 백준C++
  • 백준
  • 프로그래밍
  • programmers
  • 백준Python
  • Database
  • 백엔드
  • back-end
  • 코딩
  • 알고스팟Python
  • 프로그래머스C++

최근 댓글

인기 글

hELLO
HelloMinchan

처음처럼

[Baekjoon Online Judge] 백준 4673번 셀프 넘버(Python)
Deprecated

[Baekjoon Online Judge] 백준 4673번 셀프 넘버(Python)

2020. 2. 29. 19:52

© 2020 All Rights Reserved. 주식회사 스타트링크

[Baekjoon Online Judge] 백준 4673번 셀프 넘버

(Python)

(글쓴날 : 2020.02.29)

 


* Baekjoon Online Judge, 백준 4673번 문제 Python 언어 풀이입니다.

* 소스 코드의 저작권은 글쓴이에게 있습니다.


 

 

백준 4673번 셀프 넘버


1) 문제

문제 링크 : https://www.acmicpc.net/problem/4673

 

4673번: 셀프 넘버

문제 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다.  예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는

www.acmicpc.net


2) 풀이 과정

10000보다 작거나 같은 셀프 넘버를 출력하는 문제입니다.

셀프 넘버란 1949년 인도 수학자 D.R. Kaprekar가 이름 붙인 수이며 생성자라는 특정 규칙으로 만들 수 없는 수를 뜻한다고 합니다.

생성자의 규칙은 양의 정수 n이 있을 때 n 그 자체와 n의 각 자리수의 합을 더하는 것입니다.

따라서, 1부터 10000까지의 숫자 중에서 생성자로 만들 수 없는 숫자를 출력해 주시면 되겠고,

저의 경우, 1부터 10000까지의 불(True, False) 값을 담을 리스트를 만들고 해당 숫자가 셀프 넘버인지 아닌지 판별하는 반복문을 돌려 문제를 해결하였습니다.


3) 코드

 

* Python 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
arr = []
i = 0
while i <= 10000:
    arr.append(True)
    i += 1
 
i = 1
while i < 10000:
    if i < 10:
        arr[i + i] = False
    elif i >= 10 and i < 100:
        arr[i + int(str(i)[0]) + int(str(i)[1])] = False
    elif i >= 100 and i < 1000:
        arr[i + int(str(i)[0]) + int(str(i)[1]) + int(str(i)[2])] = False
    else:
        temp = i + int(str(i)[0]) + int(str(i)[1]) + int(str(i)[2]) + int(str(i)[3])
        if temp <= 10000:
            arr[temp] = False
    i += 1
 
for i in range(1, len(arr)):
    if arr[i]:
        print(i)

 

저작자표시 비영리 변경금지 (새창열림)

'Deprecated' 카테고리의 다른 글

[CSS] 레이아웃 height 100%로 동작하게 하는 법  (2) 2020.03.01
[Baekjoon Online Judge] 백준 1065번 한수(Python)  (2) 2020.02.29
[Baekjoon Online Judge] 백준 15596번 정수 N개의 합(Python)  (0) 2020.02.29
[Baekjoon Online Judge] 백준 4344번 평균은 넘겠지(Python)  (0) 2020.02.29
[Baekjoon Online Judge] 백준 8958번 OX퀴즈(Python)  (0) 2020.02.29
    'Deprecated' 카테고리의 다른 글
    • [CSS] 레이아웃 height 100%로 동작하게 하는 법
    • [Baekjoon Online Judge] 백준 1065번 한수(Python)
    • [Baekjoon Online Judge] 백준 15596번 정수 N개의 합(Python)
    • [Baekjoon Online Judge] 백준 4344번 평균은 넘겠지(Python)
    HelloMinchan
    HelloMinchan
    Though you should not fear failure, You should do your very best to avoid it.

    티스토리툴바