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()])
datetime 에 weekday() 라는게 있나봄. 이를 이용하면 0->monday, 1-> tuesday... 으로 매핑됨
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로 다음 후보로 이동.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가 최대공약수.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
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)
해설
//60으로 시, %60으로 분 계산.result_h<0이면 24를 더해 24시간제 유지.10 10 → 출력 9 25.https://www.acmicpc.net/problem/10988
s = input()
if s == s[::-1]:
print("1")
else:
print("0")
해설
s[::-1]와 원본을 비교.level → 1 / apple → 0.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
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