수학과 코딩은 함께 가는 것이죠 — 프로그래밍에서는 숫자가 어디에나 있습니다. 숫자가 소수인지 확인하거나, 피보나치 수열을 생성하거나, 회문을 찾는 등의 작은 도전 과제는 여러분의 수학 능력과 코딩 논리를 모두 날카롭게 해줍니다.
이 글에서는 숫자를 기반으로 한 초보자 친화적인 프로그래밍 연습 20가지를 살펴보겠습니다. 각 연습마다 수학 개념에 대한 간단한 설명, 몇 가지 샘플 입력과 출력, 그리고 실행 가능한 파이썬 솔루션을 제공합니다. 완전 제곱수, 큐브, 삼각수와 같은 수학 아이디어가 코드에서 어떻게 살아날 수 있는지를 배우면서 코딩을 연습하는 재미있는 방법입니다.
1. 첫 N 자연수의 합
이 연습이 원하는 것:
첫 n 자연수의 합을 찾는 프로그램을 작성하세요. 이는 루프나 수학 공식을 연습하는 데 도움이 됩니다.
자연수란 무엇인가요?
자연수는 1부터 시작하는 세는 숫자입니다: 1, 2, 3, 4, …
샘플 입력
5
샘플 출력
15
파이썬 솔루션
# n을 읽고 닫힌 형태의 공식을 사용하여 첫 n 자연수의 합을 계산합니다.
n = int(input("n을 입력하세요: "))
# 부동 소수점을 피하기 위해 정수 산술(//)을 사용합니다.
total = n * (n + 1) // 2
print(total)
2. 짝수 또는 홀수 확인기
이 연습이 원하는 것:
정수를 입력받아 짝수인지 홀수인지 출력하세요.
짝수/홀수란 무엇인가요?
짝수는 2로 나누어 떨어지는 숫자입니다 (예: 2, 4, 6). 홀수는 2로 나누었을 때 나머지가 1인 숫자입니다 (예: 1, 3, 5).
샘플 입력
7
샘플 출력
7은 홀수입니다
파이썬 솔루션
# 입력된 정수가 짝수인지 홀수인지 모듈로를 사용하여 확인합니다.
n = int(input("숫자를 입력하세요: "))
if n % 2 == 0:
print(f"{n}은 짝수입니다")
else:
print(f"{n}은 홀수입니다")
3. 소수 확인기
이 연습이 원하는 것:
주어진 숫자가 소수인지 확인하는 프로그램을 작성하세요.
소수란 무엇인가요?
소수는 1보다 크고 1과 자기 자신만으로 나누어 떨어지는 숫자입니다 (예: 2, 3, 5, 7).
샘플 입력
13
샘플 출력
13은 소수입니다
파이썬 솔루션
# n의 제곱근까지 나누기를 시도하여 소수를 확인합니다.
n = int(input("숫자를 입력하세요: "))
if n < 2:
print(f"{n}은 소수가 아닙니다")
else:
for d in range(2, int(n**0.5) + 1):
if n % d == 0:
print(f"{n}은 소수가 아닙니다")
break
else:
print(f"{n}은 소수입니다")
4. 숫자의 합
이 연습이 원하는 것:
숫자의 모든 자리수의 합을 찾으세요.
왜 자리수의 합이 중요할까요?
자리수의 합은 가분성 규칙 및 다양한 숫자 퍼즐에서 나타납니다 (예: 자리수의 합이 3으로 나누어 떨어지면 3으로 나누어 떨어집니다).
샘플 입력
1234
샘플 출력
10
파이썬 솔루션
# 문자를 반복하여 정수로 변환하여 자리수를 합산합니다.
s = input("숫자를 입력하세요: ").strip()
digit_sum = sum(int(ch) for ch in s if ch.isdigit())
print(digit_sum)
5. 회문 숫자 확인기
이 연습이 원하는 것:
숫자가 앞뒤가 같은지 확인하세요.
회문 숫자란 무엇인가요?
121, 1331 또는 12321과 같은 숫자로, 거꾸로 해도 동일합니다.
샘플 입력
12321
샘플 출력
12321은 회문입니다
파이썬 솔루션
# 문자열을 거꾸로 뒤집어 회문을 테스트합니다.
s = input("숫자를 입력하세요: ").strip()
print(f"{s}은 회문입니다" if s == s[::-1] else f"{s}은 회문이 아닙니다")
6. 숫자의 모든 약수 찾기
이 연습이 원하는 것:
n을 고르게 나누는 모든 숫자를 나열하세요.
약수란 무엇인가요?
약수는 n을 얻기 위해 곱할 수 있는 정수입니다. 12의 경우 약수는 1, 2, 3, 4, 6, 12입니다.
샘플 입력
12
샘플 출력
1 2 3 4 6 12
파이썬 솔루션
# 1부터 n까지 테스트하여 모든 약수를 생성합니다.
n = int(input("숫자를 입력하세요: "))
factors = [d for d in range(1, n+1) if n % d == 0]
print(" ".join(map(str, factors)))
7. 완전수 확인기
이 연습이 원하는 것:
n이 자신의 약수의 합(자기 자신 제외)과 같은지 확인하세요.
완전수란 무엇인가요?
6 (=1+2+3)과 28 (=1+2+4+7+14)과 같은 숫자는 완전수입니다.
샘플 입력
28
샘플 출력
28은 완전수입니다
파이썬 솔루션
# 적절한 약수를 합산하고 n과 비교합니다.
n = int(input("숫자를 입력하세요: "))
proper = [d for d in range(1, n) if n % d == 0]
print(f"{n}은 완전수입니다" if sum(proper) == n else f"{n}은 완전수가 아닙니다")
8. 암스트롱(나르시시스트) 숫자 확인기
이 연습이 원하는 것:
n이 자리수의 합의 각 자리수를 해당 자리수의 수로 거듭제곱한 것과 같은지 확인하세요.
암스트롱 숫자란 무엇인가요?
예: 153 = 1³ + 5³ + 3³; 9474 = 9⁴ + 4⁴ + 7⁴ + 4⁴.
샘플 입력
153
샘플 출력
153은 암스트롱 숫자입니다
파이썬 솔루션
# 각 자리수를 자리수의 총 개수의 거듭제곱으로 올리고 합산합니다.
s = input("숫자를 입력하세요: ").strip()
p = len(s)
arm = sum(int(ch)**p for ch in s)
print(f"{s}은 암스트롱 숫자입니다" if arm == int(s) else f"{s}은 암스트롱 숫자가 아닙니다")
9. 완전 제곱수 확인기
이 연습이 원하는 것:
숫자가 완전 제곱수인지 확인하세요.
완전 제곱수란 무엇인가요?
k²로 표현할 수 있는 숫자입니다 (예: 4, 9, 16, 25).
샘플 입력
49
샘플 출력
49는 완전 제곱수입니다
파이썬 솔루션
# 부동 소수점 문제를 피하기 위해 정수 제곱근을 사용합니다.
import math
n = int(input("숫자를 입력하세요: "))
print(f"{n}는 완전 제곱수입니다" if math.isqrt(n)**2 == n else f"{n}는 완전 제곱수가 아닙니다")
10. 완전 큐브 확인기
이 연습이 원하는 것:
숫자가 완전 큐브인지 확인하세요.
완전 큐브란 무엇인가요?
k³로 표현할 수 있는 숫자입니다 (예: 8, 27, 64).
샘플 입력
27
샘플 출력
27은 완전 큐브입니다
파이썬 솔루션
# 큐브 근을 근사하고 다시 세제곱하여 확인합니다.
n = int(input("숫자를 입력하세요: "))
croot = round(n ** (1/3))
print(f"{n}는 완전 큐브입니다" if croot**3 == n else f"{n}는 완전 큐브가 아닙니다")
11. 피보나치 수열 생성기
이 연습이 원하는 것:
첫 n 피보나치 숫자를 생성하세요.
피보나치 숫자란 무엇인가요?
0, 1에서 시작하여 각 새로운 항은 이전 두 항의 합입니다: 0, 1, 1, 2, 3, 5, 8, …
샘플 입력
7
샘플 출력
0 1 1 2 3 5 8
파이썬 솔루션
# 두 개의 추적기를 사용하여 피보나치 수열을 반복적으로 생성합니다.
n = int(input("n을 입력하세요: "))
a, b = 0, 1
seq = []
for _ in range(n):
seq.append(a)
a, b = b, a + b
print(" ".join(map(str, seq)))
12. 숫자가 피보나치 수열에 있는지 확인하기
이 연습이 원하는 것:
주어진 숫자가 피보나치 수열에 속하는지 확인하세요.
수학적 사실:
n이 피보나치 수열에 속하려면 (5n² + 4) 또는 (5n² − 4)가 완전 제곱수여야 합니다.
샘플 입력
21
샘플 출력
21은 피보나치 숫자입니다
파이썬 솔루션
# 5n^2±4 완전 제곱수 테스트를 사용하여 피보나치 멤버십을 확인합니다.
import math
def is_square(x: int) -> bool:
return math.isqrt(x)**2 == x
n = int(input("숫자를 입력하세요: "))
if is_square(5*n*n + 4) or is_square(5*n*n - 4):
print(f"{n}은 피보나치 숫자입니다")
else:
print(f"{n}은 피보나치 숫자가 아닙니다")
13. 삼각수 확인기
이 연습이 원하는 것:
n이 삼각수인지 확인하세요: n = k(k+1)/2인 정수 k가 존재하는지.
삼각수란 무엇인가요?
삼각수는 점 삼각형을 형성합니다: 1, 3, 6, 10, 15, …
샘플 입력
15
샘플 출력
15는 삼각수입니다
파이썬 솔루션
# k(k+1)/2 = n을 해결하기 위해 k = floor((sqrt(8n+1)-1)/2)를 확인합니다.
import math
n = int(input("숫자를 입력하세요: "))
k = int((math.isqrt(8*n + 1) - 1) // 2)
print(f"{n}는 삼각수입니다" if k * (k + 1) // 2 == n else f"{n}는 삼각수가 아닙니다")
14. 유리수 (소수 → 분수)
이 연습이 원하는 것:
소수를 단순화된 분수 p/q로 변환하세요.
유리수란 무엇인가요?
정수의 비율로 표현할 수 있는 숫자입니다 (예: 0.75 = 3/4).
샘플 입력
0.75
샘플 출력
3/4
파이썬 솔루션
# Fraction을 사용하여 소수를 p/q 형태로 변환하고 단순화합니다.
from fractions import Fraction
x = float(input("소수를 입력하세요: "))
print(Fraction(x).limit_denominator())
15. 삼각수 확인기
이 연습이 원하는 것:
숫자가 삼각수인지 확인하세요, 즉 정삼각형을 형성할 수 있는지 확인하세요.
삼각수란 무엇인가요?
삼각수는 첫 n 자연수의 합입니다: 1, 3, 6, 10, 15…
샘플 입력
10
샘플 출력
10은 삼각수입니다
파이썬 솔루션
import math
n = int(input("숫자를 입력하세요: "))
# 공식: 8n+1이 완전 제곱수이면 n은 삼각수입니다.
check = 8 * n + 1
if int(math.isqrt(check))**2 == check:
print(f"{n}는 삼각수입니다")
else:
print(f"{n}는 삼각수가 아닙니다")
16. 피보나치 수열 생성기
이 연습이 원하는 것:
n 항까지 피보나치 수열을 생성하세요.
피보나치 수열이란 무엇인가요?
각 숫자가 이전 두 숫자의 합인 수열입니다: 0, 1, 1, 2, 3, 5, 8…
샘플 입력
7
샘플 출력
0 1 1 2 3 5 8
파이썬 솔루션
n = int(input("항의 개수를 입력하세요: "))
a, b = 0, 1
for _ in range(n):
print(a, end=" ")
a, b = b, a + b
17. 숫자의 합
이 연습이 원하는 것:
주어진 숫자의 모든 자리수의 합을 계산하세요.
무슨 뜻인가요?
예: 1234의 자리수는 1+2+3+4 = 10입니다.
샘플 입력
1234
샘플 출력
10
파이썬 솔루션
n = input("숫자를 입력하세요: ")
# 각 문자를 다시 int로 변환하고 합산합니다.
s = sum(int(d) for d in n)
print(s)
18. 숫자 뒤집기
이 연습이 원하는 것:
주어진 숫자의 자리를 뒤집으세요.
무슨 뜻인가요?
예: 12345는 54321이 됩니다.
샘플 입력
12345
샘플 출력
54321
파이썬 솔루션
n = input("숫자를 입력하세요: ")
# 슬라이싱을 사용하여 뒤집습니다.
print(n[::-1])
19. 최대 공약수 (GCD)
이 연습이 원하는 것:
두 정수를 나머지 없이 나누는 가장 큰 숫자를 찾으세요.
GCD란 무엇인가요?
두 숫자 모두에 공통적인 가장 큰 약수입니다. 예: gcd(12, 18) = 6.
샘플 입력
12 18
샘플 출력
6
파이썬 솔루션
import math
a, b = map(int, input("두 숫자를 입력하세요: ").split())
# 효율성을 위해 math.gcd를 사용합니다.
print(math.gcd(a, b))
20. 최소 공배수 (LCM)
이 연습이 원하는 것:
두 정수로 나누어 떨어지는 가장 작은 숫자를 찾으세요.
LCM란 무엇인가요?
두 숫자의 최소 공배수입니다. 예: lcm(4, 6) = 12.
샘플 입력
4 6
샘플 출력
12
파이썬 솔루션
import math
a, b = map(int, input("두 숫자를 입력하세요: ").split())
# 공식: lcm(a, b) = abs(a*b) // gcd(a, b)
print(abs(a*b) // math.gcd(a, b))