콘텐츠로 이동

파이썬 코딩 논술 — 오픈북 요약


1. 입출력

name = input("이름: ")          # 항상 str 반환
n    = int(input("수: "))       # 정수 변환
x    = float(input("실수: "))   # 실수 변환

# 한 줄에 여러 값 — split
a, b = input("두 수: ").split()          # 공백 분리 → str
a, b = map(int, input().split())         # 바로 int 변환
a, b = input().split(",")               # 쉼표 분리
nums = list(map(int, input().split()))  # 여러 값 → 리스트

# print
print("결과:", x)
print(f"이름: {name}, 점수: {n}점")          # f-문자열
print(f"{x:.2f}")                           # 소수점 2자리
print(f"{x:.1f}")                           # 소수점 1자리
print(1, 2, 3, sep=" ")                     # 구분자 지정
print("A", end="")                          # 줄바꿈 없이

2. 연산자

# 산술
+  -  *  /      # 사칙 (/ 는 항상 float)
//              # 몫 (정수 나눗셈)   7 // 2  → 3
%               # 나머지            7 % 2   → 1
**              # 거듭제곱          2 ** 8  → 256

# 비교 — 결과는 True/False
==  !=  >  <  >=  <=

# 논리
and   or   not
# 100 <= x <= 200  # 파이썬은 연속 비교 가능

# 대입 단축
x += 1    x -= 1    x *= 2    x //= 2    x %= 3

3. 조건문

# 기본 구조
if 조건:
    ...
elif 조건:
    ...
else:
    ...

# 자주 쓰는 패턴
if x % 2 == 0:          # 짝수
if x % 3 == 0:          # 3의 배수
if a <= x <= b:         # 범위 포함
if x > 0 and y > 0:     # 둘 다 양수
if s == "y" or s == "n":

4. while 반복문

# 기본
i = 0
while i < n:
    i += 1

# 카운터 + break
count = 0
while count < 3:
    val = input("입력: ")
    if val == "1234":
        print("성공!")
        break
    count += 1
else:                   # break 없이 끝나면 실행
    print("실패")

# 누적
total = 0
i = 1
while i <= n:
    total += i
    i += 1

# 무한 루프 탈출
while True:
    x = int(input())
    if x == 0:
        break

# 유클리드 호제법 (GCD)
a, b = int(input()), int(input())
while b:
    a, b = b, a % b
gcd = a
lcm = (원래_a * 원래_b) // gcd

5. for 반복문

# range
for i in range(n):          # 0 ~ n-1
for i in range(1, n+1):     # 1 ~ n
for i in range(n, 0, -1):   # n ~ 1  역순
for i in range(a, b, step): # step 간격

# 문자열 순회
for ch in "Hello":
    print(ch)

# break / continue
for i in range(10):
    if i % 2 == 0:
        continue            # 짝수 건너뜀
    if i == 7:
        break               # 7에서 종료

# 중첩 for (구구단, 패턴)
for i in range(1, n+1):
    for j in range(1, n+1):
        print(i * j, end="\t")
    print()

# 한 줄 공백 출력 패턴
result = []
for i in range(1, n+1):
    result.append(str(i))
print(" ".join(result))     # "1 2 3 4 5"
# 또는
print(*result)              # 동일 효과

6. 사용자 정의 함수

# 기본 구조
def 함수이름(매개변수):
    ...
    return 결과

# 예시
def factorial(n):
    result = 1
    i = 1
    while i <= n:
        result *= i
        i += 1
    return result

def is_prime(n):
    if n < 2:
        return False
    for i in range(2, n):
        if n % i == 0:
            return False
    return True

def get_grade(score):
    if score >= 90: return "A"
    elif score >= 80: return "B"
    elif score >= 70: return "C"
    elif score >= 60: return "D"
    else: return "F"

# 여러 값 반환
def stats(lst):
    return sum(lst), len(lst)

total, count = stats([10, 20, 30])

7. 자주 쓰는 내장 함수

abs(-5)           # 5         절댓값
round(3.567, 2)   # 3.57      반올림
int(3.9)          # 3         소수 버림 (floor)
round(3.5)        # 4         반올림 (정수)

len("hello")      # 5         길이
str(42)           # "42"      문자열 변환
int("42")         # 42        정수 변환
float("3.14")     # 3.14      실수 변환

# 리스트 관련
sum([1,2,3])      # 6
min(3, 1, 4)      # 1
max(3, 1, 4)      # 4

8. 문자열 메서드

s = "Hello, World!"

s.split()           # ['Hello,', 'World!']  공백 분리
s.split(",")        # ['Hello', ' World!']  쉼표 분리
s.strip()           # 양쪽 공백 제거
s.upper()           # "HELLO, WORLD!"
s.lower()           # "hello, world!"
s.replace("o","0")  # "Hell0, W0rld!"
len(s)              # 13

# 문자 ↔ 코드
ord('A')   # 65
ord('a')   # 97
chr(65)    # 'A'

# 문자 분류
ch.isalpha()   # 알파벳?
ch.isdigit()   # 숫자?
ch.isupper()   # 대문자?
ch.islower()   # 소문자?
ch.isspace()   # 공백?

# ROT-13 패턴
if 'a' <= ch <= 'z':
    ch = chr((ord(ch) - ord('a') + 13) % 26 + ord('a'))

9. 자주 쓰는 패턴 모음

# ── 최대·최소 직접 구현 ──
max_val = scores[0]
for s in scores:
    if s > max_val:
        max_val = s

# ── 소수 판별 ──
def is_prime(n):
    if n < 2: return False
    for i in range(2, n):
        if n % i == 0: return False
    return True

# ── 소인수 분해 ──
n = int(input())
d = 2
factors = []
while d * d <= n:
    while n % d == 0:
        factors.append(d)
        n //= d
    d += 1
if n > 1: factors.append(n)

# ── 피보나치 ──
a, b = 1, 1
for _ in range(n - 1):
    a, b = b, a + b
# a가 n번째 항

# ── 콜라츠 ──
steps = 0
while n != 1:
    if n % 2 == 0: n //= 2
    else: n = n * 3 + 1
    steps += 1

# ── 팰린드롬 판별 ──
def is_palindrome(s):
    s = s.replace(" ", "").lower()
    return s == s[::-1]

# ── 등차수열 합 ──
# 시작 a, 공차 d, 항수 n
total = 0
for i in range(n):
    total += a + d * i

# ── 누진 요금 계산 패턴 ──
if usage <= 200:
    fee = usage * 93.3
elif usage <= 400:
    fee = 200 * 93.3 + (usage - 200) * 187.9
else:
    fee = 200 * 93.3 + 200 * 187.9 + (usage - 400) * 280.6

# ── 거스름돈 ──
units = [50000, 10000, 5000, 1000, 500, 100, 50, 10]
change = paid - price
for u in units:
    print(f"{u}원: {change // u}개")
    change %= u

# ── 별 패턴 (삼각형) ──
for i in range(1, n+1):
    print("*" * i)              # 왼쪽 정렬
    print(" " * (n-i) + "*"*i) # 오른쪽 정렬

# ── 별 다이아몬드 (홀수 N) ──
h = n // 2
for i in range(n):
    if i <= h:
        print(" "*(h-i) + "*"*(2*i+1))
    else:
        j = n - 1 - i
        print(" "*(h-j) + "*"*(2*j+1))

10. 형 변환 · 출력 형식 빠른 참조

# 형 변환
int(3.9)       # 3    (버림)
int("42")      # 42
float("3.14")  # 3.14
str(42)        # "42"
bool(0)        # False
bool(1)        # True

# f-문자열 형식
f"{n}"          # 그대로
f"{n:d}"        # 정수
f"{x:.2f}"      # 소수점 2자리
f"{n:>10}"      # 오른쪽 정렬 10칸
f"{n:<10}"      # 왼쪽 정렬 10칸
f"{n:05d}"      # 0 채움 5자리  → 00042

# % 연산자 (나머지)
n % 2 == 0     # 짝수
n % 2 != 0     # 홀수
n % k == 0     # k의 배수

# 올림 (math 없이)
import math
math.ceil(x)          # 올림
-(-x // 1)            # 올림 (int 범위)
(x + k - 1) // k * k # k 단위 올림