2720
미국으로 유학간 동혁이는 세탁소를 운영하고 있다. 동혁이는 최근에 아르바이트로 고등학생 리암을 채용했다.
동혁이는 리암에게 실망했다.
리암은 거스름돈을 주는 것을 자꾸 실수한다.
심지어 $0.5달러를 줘야하는 경우에 거스름돈으로 $5달러를 주는것이다!
어쩔수 없이 뛰어난 코딩 실력을 발휘해 리암을 도와주는 프로그램을 작성하려고 하지만, 디아블로를 하느라 코딩할 시간이 없어서 이 문제를 읽고 있는 여러분이 대신 해주어야 한다.
거스름돈의 액수가 주어지면 리암이 줘야할 쿼터(Quarter, $0.25)의 개수, 다임(Dime, $0.10)의 개수, 니켈(Nickel, $0.05)의 개수, 페니(Penny, $0.01)의 개수를 구하는 프로그램을 작성하시오. 거스름돈은 항상 $5.00 이하이고, 손님이 받는 동전의 개수를 최소로 하려고 한다. 예를 들어, $1.24를 거슬러 주어야 한다면, 손님은 4쿼터, 2다임, 0니켈, 4페니를 받게 된다.
n = int(input())
for i in range(n):
change = int(input())
q1, m1 = divmod(change, 25)
q2, m2 = divmod(m1, 10)
q3, m3 = divmod(m2, 5)
print(q1, q2, q3, m3, end=' ')
print()
2903
1 초 | 128 MB | 31866 | 22686 | 20678 | 71.736% |
문제
상근이는 친구들과 함께 SF영화를 찍으려고 한다. 이 영화는 외계 지형이 필요하다. 실제로 우주선을 타고 외계 행성에 가서 촬영을 할 수 없기 때문에, 컴퓨터 그래픽으로 CG처리를 하려고 한다.
외계 지형은 중앙 이동 알고리즘을 이용해서 만들려고 한다.
알고리즘을 시작하면서 상근이는 정사각형을 이루는 점 4개를 고른다. 그 후에는 다음과 같은 과정을 거쳐서 지형을 만든다.
- 정사각형의 각 변의 중앙에 점을 하나 추가한다.
- 정사각형의 중심에 점을 하나 추가한다.
초기 상태에서 위와 같은 과정을 한 번 거치면 총 4개의 정사각형이 새로 생긴다. 이와 같은 과정을 상근이가 만족할 때 까지 계속한다.
아래 그림은 과정을 총 2번 거쳤을 때까지의 모습이다.
초기 상태 - 점 4개 | 1번 - 점 9개 | 2번 - 25개 |
상근이는 어떤 점은 한 개 보다 많은 정사각형에 포함될 수 있다는 사실을 알았다. 메모리 소모량을 줄이기 위해서 중복하는 점을 한 번만 저장하려고 한다. 과정을 N번 거친 후 점 몇 개를 저장해야 하는지 구하는 프로그램을 작성하시오.
n = int(input())
# 초기 값
k = 2
for _ in range(n):
k = 2 * k - 1
print(k ** 2)
2292
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
n = int(input())
# 1번 방은 예외처리
if n == 1:
print(1)
else:
layer = 1 # 현재층
range_max = 1 # 각 계층의 마지막 방 번호
# 입력된 n이 속하는 계층을 찾기 위해 반복
while n > range_max:
range_max += 6 * layer # 각 계층의 방 번호는 6의 배수로 늘어남
layer += 1
print(layer)
1193
무한히 큰 배열에 다음과 같이 분수들이 적혀있다.
1/1 | 1/2 | 1/3 | 1/4 | 1/5 | … |
2/1 | 2/2 | 2/3 | 2/4 | … | … |
3/1 | 3/2 | 3/3 | … | … | … |
4/1 | 4/2 | … | … | … | … |
5/1 | … | … | … | … | … |
… | … | … | … | … | … |
이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.
X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.
- 첫 번째 대각선: 1/1
- 두 번째 대각선: 1/2, 2/1
- 세 번째 대각선: 3/1, 2/2, 1/3
- 네 번째 대각선: 1/4, 2/3, 3/2, 4/1
n = int(input())
line = 1 # 대각선 라인 번호
max_num = 1 # 해당 라인의 마지막 숫자
# 입력된 n이 속한 라인을 찾음
while n > max_num:
line += 1
max_num += line
# n번째 수는 line번째 대각선에 위치
# 그 대각선에서 몇 번째 수인지 계산
diff = max_num - n # 대각선에서 뒤로 몇 번째인지
if line % 2 == 0:
# 짝수번째 대각선 (위로 올라가는 경우)
numerator = line - diff
denominator = 1 + diff
else:
# 홀수번째 대각선 (아래로 내려가는 경우)
numerator = 1 + diff
denominator = line - diff
print(f"{numerator}/{denominator}")
2869
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
처음에는 밤, 낮을 0.5일씩 분리하여서 아래처럼 풀려고 하였는데..
math 를 사용하면 훨씬 쉽게 풀린다.
import math
A, B, V = map(int, input().split())
# (V - A) 만큼 올라가야 하는 높이를 먼저 구하고,
# 그 뒤 매일 (A - B) 만큼 올라가는 일수 계산 후,
# 마지막 날 A만큼 올라가서 종료.
day = math.ceil((V - A) / (A - B)) + 1
print(day)
'Baekjoon' 카테고리의 다른 글
백준 2차원 배열 python 문제풀이 (2738, 2566, 10798, 2563) (0) | 2024.09.21 |
---|---|
백준 문자열 문제 Python 풀이 정리 (27866,2743,9086,11654,11720,10809,2675,1152,2908,5622,11718) (3) | 2024.09.17 |