본문 바로가기

알고리즘 문제 풀이37

백준 10250번 : ACM호텔 (Python) 출처 : https://www.acmicpc.net/problem/10250 t = int(input()) for i in range(t) : h, w, n = map(int, input().split()) y = n % h x = n // h + 1 if y == 0 : y = h x = n // h print(f"{y * 100 + x}") 예시로 주어진 h = 6, w = 12, n = 10 의 경우를 보자. 가장 왼쪽 라인의 아래층부터 방을 배정하므로 10번째 손님은 가장 왼쪽 라인(X01호)에 앞선 6명의 손님을 배치한 후 4층의 2호실(= 402호)에 배정된다. 즉, n을 h로 나누었을때 그 나머지는 방의 층수와, 몫은 해당 층의 호실과 관련이 있음을 알 수 있다. 2022. 10. 14.
백준 2869번 : 달팽이는 올라가고 싶다 (Python) 출처 : https://www.acmicpc.net/problem/2869 import math a, b, v = map(int, input().split()) x = v - a d = math.ceil(x / (a - b)) print(d + 1) 낮에 2미터(=a) 올라가고 밤에 1미터(=b) 미끄러지는 달팽이가 5미터(=v)의 막대를 올라가는 경우를 가정해보자. 마지막 낮 이전에 3미터(v - a = x) 이상 올라간 상태라면, 낮 동안 2미터를 올라가 정상에 도달할 수 있다. 하루의 낮과 밤에는 1미터(a - b)를 올라가기 때문에 3일(x/(a - b)) + 1일 = 총 4일이면 정상에 도착한다. 다음으로 a = 5, b = 2, v = 10 인 경우를 가정해보자. 마지막 낮 이전에 5미터 이상.. 2022. 10. 11.
백준 1110번 : 더하기 싸이클 (Python) 출처 : https://www.acmicpc.net/problem/1110 N = int(input()) initial_N = N # 최초의 N i = 0 while True : b = (N // 10) + (N % 10) # b는 N의 자릿수 합. N // 10 은 십의 자리수, N % 10 은 일의 자리 수 N = 10 * (N % 10) + (b % 10) # 새로운 N. 기존 N의 일의 자리 수가 새로운 N의 십의 자리수, b의 일의 자리 수가 새로운 N의 일의 자리수 i = i + 1 # 현재 사이클 횟수 if N == initial_N : print(i) break # 최초의 N과 같아지면 사이클 중지 2022. 10. 7.
백준 2588번 : 곱셈 (Python) 출처 : https://www.acmicpc.net/problem/2588 A = input() B = input() print(int(A) * int(B[2])) print(int(A) * int(B[1])) print(int(A) * int(B[0])) print(int(A) * int(B)) B의 1의 자리 * A, B의 10의 자리 * A, B의 100의 자리 * A 이런 식으로 계산되기 때문에 B를 정수로 변환하지 않은 문자열 상태에서 1의 자리, 10의 자리, 100의 자리 숫자를 문자로 인덱싱한 후 정수로 변환하여 A에 곱해준다. 2022. 10. 6.