[복습] 백준_파이썬배우기(1~50)

Leejaegun·2025년 10월 6일

코딩테스트 시리즈

목록 보기
44/49

1️⃣ 현재시간 출력

https://www.acmicpc.net/problem/10699

from datetime import datetime, timezone, timedelta

KST = timezone(timedelta(hours=9))
seoul = datetime.now(KST)
print(seoul.date())

해설

  • timezone(timedelta(hours=9)) : UTC+9(한국 표준시) 설정.
  • datetime.now(KST) : 현재 시간 불러오기.
  • .date() : 시각 정보 중 ‘날짜’만 출력.
  • 즉, 실행 결과는 YYYY-MM-DD 형태의 오늘 날짜를 반환한다.

추가로 비슷한 문제가 있어서 가져옴

https://www.acmicpc.net/problem/1924

2007년 날짜가 주어지면 무슨 요일인지를 묻는 것임

from datetime import datetime

x,y = map(int,input().split())
d = datetime(2007,x,y)

week = ["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"]
print(week[d.weekday()])

datetimeweekday() 라는게 있나봄. 이를 이용하면 0->monday, 1-> tuesday... 으로 매핑됨


2️⃣ 소인수분해

https://www.acmicpc.net/problem/11653

from typing import List

def prime_factorization(n: int) -> List[int]:
    factors = []
    d = 2
    while d * d <= n:
        while n % d == 0:
            factors.append(d)
            n //= d
        d += 1
    if n > 1:
        factors.append(n)
    return factors

num = int(input())
for ans in prime_factorization(num):
    print(ans)

해설

  • while d*d <= n: 약수는 대칭이므로 √n까지만 검사.
  • 내부 루프에서 n //= d로 나누며 소인수들을 factors에 저장.
  • 나누어 떨어지지 않으면 d += 1로 다음 후보로 이동.
  • 마지막에 남은 n>1이면 소수이므로 추가.
  • 입력값 72라면 출력은 2, 2, 2, 3, 3.

3️⃣ 최소공배수(LCM), 최대공약수(GCD)

https://www.acmicpc.net/problem/1934

import math

T = int(input())
for _ in range(T):
    A, B = map(int, input().split())
    print(math.lcm(A, B))

해설 (math 모듈 사용)

  • math.gcd(a,b)는 최대공약수.
  • math.lcm(a,b)는 최소공배수.
  • lcm(a,b) = a*b // gcd(a,b) 공식이 내장되어 있음.

유클리드 방법 (직접 구현)

def gcd(a, b):
    while b:
        a, b = b, a % b
    return a

def lcm(a, b):
    return a * b // gcd(a, b)
  • a%b를 반복하여 b가 0이 되면 a가 최대공약수.
  • 두 수의 곱을 gcd로 나누면 lcm이 된다.

4️⃣ 네 번째 점

ori = [tuple(map(int, input().split())) for _ in range(3)]
x_list = [x for x, _ in ori]
y_list = [y for _, y in ori]

for x in x_list:
    if x_list.count(x) == 1:
        ans_x = x

for y in y_list:
    if y_list.count(y) == 1:
        ans_y = y

print(ans_x, ans_y)

해설

  • 직사각형의 각 좌표는 두 번씩 등장하고, 한 점만 한 번 등장한다.

  • count(x)==1인 x, y가 네 번째 점의 좌표.

  • 입력:

    5 5
    5 7
    7 5

    출력:

    7 7

5️⃣ 시계 문제

https://www.acmicpc.net/problem/2884

h, m = map(int, input().split())
k = h * 60 + m
result_h = (k - 45) // 60
result_m = (k - 45) % 60

if result_h < 0:
    result_h += 24

print(result_h, result_m)

해설

  • 입력된 시각을 분 단위로 바꾸고 45분을 뺀다.
  • //60으로 시, %60으로 분 계산.
  • result_h<0이면 24를 더해 24시간제 유지.
  • 예: 입력 10 10 → 출력 9 25.

6️⃣ 팰린드롬 판별

https://www.acmicpc.net/problem/10988

s = input()
if s == s[::-1]:
    print("1")
else:
    print("0")

해설

  • 문자열을 뒤집는 s[::-1]와 원본을 비교.
  • 같으면 팰린드롬 → 1, 아니면 0.
  • 예: level → 1 / apple → 0.

7️⃣ 사분면 판별

https://www.acmicpc.net/problem/9610

T = int(input())
Q1 = Q2 = Q3 = Q4 = AXIS = 0

for _ in range(T):
    x, y = map(int, input().split())
    if x == 0 or y == 0:
        AXIS += 1
    elif x > 0 and y > 0:
        Q1 += 1
    elif x < 0 and y > 0:
        Q2 += 1
    elif x < 0 and y < 0:
        Q3 += 1
    else:
        Q4 += 1

print(f"Q1: {Q1}")
print(f"Q2: {Q2}")
print(f"Q3: {Q3}")
print(f"Q4: {Q4}")
print(f"AXIS: {AXIS}")

해설

  • 좌표평면의 각 사분면을 조건문으로 구분.

  • x==0 or y==0이면 축 위(AXIS).

  • 입력:

    5
    1 1
    -1 2
    -2 -3
    3 -4
    0 5

    출력:

    Q1: 1
    Q2: 1
    Q3: 1
    Q4: 1
    AXIS: 1

8️⃣ 완전수 판별

https://www.acmicpc.net/problem/9506

from typing import List, Tuple

def is_perfect(n: int) -> Tuple[bool, List[int]]:
    if n <= 1:
        return False, []
    divisors: List[int] = []
    for i in range(1, n):
        if n % i == 0:
            divisors.append(i)
    return sum(divisors) == n, divisors

while True:
    n = int(input())
    if n == -1:
        break
    perfect, divisors = is_perfect(n)
    if perfect:
        print(f"{n} = {' + '.join(map(str, divisors))}")
    else:
        print(f"{n} is NOT perfect.")

해설

  • 약수를 모두 찾아 리스트에 저장.

  • 합이 자기 자신과 같으면 완전수(True).

  • 입력 6, 12, 28, -1

    6 = 1 + 2 + 3
    12 is NOT perfect.
    28 = 1 + 2 + 4 + 7 + 14
profile
Lee_AA

0개의 댓글