[BOJ-Python] 단계별 문제 6단계 함수
카테고리: BOJ-Python
💡
백준(Baekjoon Online Judge)은 온라인으로 프로그래밍 문제를 풀고 채점받을 수 있는 웹사이트입니다.
백준 ‘단계별로 풀어보기’ 문제풀이가 아래에 수록되었습니다.
6단계 함수
단계 | 문제 번호 | 제목 | 정답률 |
---|---|---|---|
1 | 15596 | 정수 N개의 합 | 50.848% |
2 | 4673 | 셀프 넘버 | 49.064% |
3 | 1065 | 한수 | 52.921% |
Q1. 정수 N개의 합(15596)
❓ 문제
정수 n개가 주어졌을 때, n개의 합을 구하는 함수를 작성하시오.
a
: 합을 구해야 하는 정수n
개가 저장되어 있는 배열 (0 ≤ a[i] ≤ 1,000,000, 1 ≤ n ≤ 3,000,000)- 리턴값:
a
에 포함되어 있는 정수n
개의 합
💯 답(정답률: 50.848%)
def solve(a):
return sum(a)
Q2. 셀프 넘버(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이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열을 만들 수 있다.
33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, …
n을 d(n)의 생성자라고 한다. 위의 수열에서 33은 39의 생성자이고, 39는 51의 생성자, 51은 57의 생성자이다. 생성자가 한 개보다 많은 경우도 있다. 예를 들어, 101은 생성자가 2개(91과 100) 있다.
생성자가 없는 숫자를 셀프 넘버라고 한다. 100보다 작은 셀프 넘버는 총 13개가 있다. 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97
10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 프로그램을 작성하시오.
입력
입력은 없다.
출력
10,000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 증가하는 순서로 출력한다.
💯 답(정답률: 49.064%)
natural = set(range(1, 10001))
generate = set()
for i in range(1,10001):
for j in str(i): #i가 26이라면, 두자릿수이므로 두번 반복
i += int(j) # 26에 십의자리 2 더하고, 다음 순번에선 일의자리 6을 더함.
generate.add(i) #generate집합에 결과값 추가
selfnum = sorted(natural - generate)
for i in selfnum:
print(i)
Q3. 한수(1065)
❓ 문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
💯 답(정답률: 52.920%)
n = int(input())
hansu = 0
for i in range(1, n+1):
if i <= 99: # 일의자리, 십의자리 수는 모두 한수일 수밖에.
hansu += 1
else:
num = list(map(int, str(i)))
if num[0] - num[1] == num[1] - num[2]: #'십의자리-백의자리'가 '백의자리-십의자리'와 같은지를 판별. 같다면 등차수열!
hansu += 1
print(hansu)