일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- DP
- bfs
- 코딩
- 백준
- 그래프
- 컴공
- 너비우선탐색
- 코테
- 정석
- 개발
- 문제풀이
- 스택
- Stack
- 자료구조
- 북리뷰
- 브루트포스
- vector
- c++
- Operating System
- 오퍼레이팅시스템
- cs
- OS
- coding
- 정석학술정보관
- 알고리즘
- 구현
- 오에스
- Computer science
- 컴공과
- 컴퓨터공학과
- Today
- Total
Little Jay
[Python][Project Euler] 코딩퀴즈 1번 - '얼른 마스크'씨 회사 전기자동차의 행복한 일련번호 본문
[Python][Project Euler] 코딩퀴즈 1번 - '얼른 마스크'씨 회사 전기자동차의 행복한 일련번호
Jay, Lee 2022. 2. 12. 14:33마스크를 쓰지 않고는 밖을 다니면 안 되는 코로나19 시대입니다.
코로나19가 장기화되면서 코로나 블루라는 말이 나올 정도로 우울한 사람들이 많아지고 있습니다.
세계적인 전기자동차 회사 경영자인 '얼른 마스크'씨는
자신의 전기자동차를 타는 고객들이 조금이라도 행복할 수 있기를 바라며
판매하는 전기자동차 번호판 일련번호 4자리를 행복 수(happy number)로 채우고자 합니다.
행복 수는 각 자릿수의 제곱의 합으로 변환하는 과정을 반복할 때 언젠가는 1에 도달하는 수입니다.
예로, 13 → 1x1 + 3x3 = 10 → 1x1 + 0x0 = 1이므로 13은 행복 수입니다.
행복 수가 아닌 것은 슬픈(sad) 수 또는 불행(unhappy) 수라고 불립니다.
예로, 4 → 4x4 = 16 → 1x1 + 6x6 = 37 → 3x3 + 7x7 = 58 → ... → 4 로 순환하여 결코 1에 도달할 수 없으니 4는 슬픈 수입니다.
문제
'얼른 마스크'씨 회사 전기자동차의 일련번호가 될 수 있는 1 ~ 9999 범위의 행복 수는 모두 몇 개이고
그 총합은 얼마인지 구하는 프로그램을 작성해서 보내주세요 작성하세요.
입력
각 범위의 최댓값을 한 줄에 하나씩 입력으로 받습니다. 최종적으로 구하고자 하는 범위의 최댓값은 9999이므로 소스코드 안에 하드코딩 해도 됩니다.
9
99
출력
범위와 행복 수의 개수 그리고 총합을 아래와 같이 출력합니다.
1 ~ 9 범위의 행복 수는 2개이고 총합은 8입니다.
1 ~ 99 범위의 행복 수는 19개이고 총합은 924입니다.
참고
프로젝트 오일러 92번은 행복 수에 대한 조금 더 어려운 문제입니다.
https://euler.synap.co.kr/problem=92
출처) 사이냅소프트 채용퀴즈
아래 정답란에는..
1 ~ 9 범위의 행복 수는 2개이고 총합은 8이므로 두 수의 곱은 16입니다. 1 ~ 9999 범위의 행복 수의 개수와 총합을 구하여 두 수의 곱을 제출하세요.
import math
my_range = 9999
happy_num = []
for i in range(1, my_range+1):
temp_num_list = []
temp = i
while True:
if temp == 1:
happy_num.append(i)
break
if temp in temp_num_list:
break
temp_num_list.append(temp)
if math.floor(temp / 1000) > 0:
a = math.floor(temp / 1000)
b = math.floor((temp % 1000) / 100)
c = math.floor((temp % 1000) % 100 / 10)
d = math.floor((temp % 1000) % 100 % 10)
temp = a ** 2 + b ** 2 + c ** 2 + d ** 2
elif math.floor(temp / 100) > 0:
a = math.floor(temp / 100)
b = math.floor((temp % 100) / 10)
c = (temp % 100) % 10
temp = a ** 2 + b ** 2 + c ** 2
elif math.floor(temp / 10) > 0:
a = math.floor(temp / 10)
b = temp % 10
temp = a ** 2 + b ** 2
else:
temp = temp ** 2
print(happy_num)
print(len(happy_num))
print(s)
'알고리즘 > Project_Euler' 카테고리의 다른 글
[Python][Project Euler] 코딩퀴즈 5번 - 숫자 목록을 이용해 만든 두 자연수 합의 최솟값 (0) | 2022.08.26 |
---|---|
[C++][Project Euler] 코딩퀴즈 3번 - Full HD 화면상의 직사각형들이 차지하고 있는 총면적 (0) | 2022.08.25 |
[Python][Project Euler] 코딩퀴즈 6번 - 특정 구간내의 모든 피보나치 수의 합 (0) | 2022.02.12 |
[Python][Projet Euler] 가장 큰 소인수 구하기 - 003 (0) | 2022.02.02 |
[Python][Projet Euler] 1부터 1000까지 영어로 썼을 때 사용된 글자의 개수는? - 017 (0) | 2022.01.27 |