목록파이썬 (45)
STUDY_SEONMIN
한수는 지금 (x, y)에 있다. 직사각형의 왼쪽 아래 꼭짓점은 (0, 0)에 있고, 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램을 작성하시오. x, y, w, h = map(int,input().split()) d = [abs(w-x), abs(h-y), x, y] print(min(d)) (x,y)에서 직사각형 경계 사방까지의 거리는 각각 |w-x|, |h-y|, x, y 입니다. 이 중에서 가장 최솟값을 구하면 문제에서 요구하는 경계까지 거리의 최솟값을 구할 수 있습니다.
1보다 큰 자연수 중에서 1과 자기 자신을 제외한 약수가 없는 자연수를 소수라고 한다. 예를 들어, 5는 1과 5를 제외한 약수가 없기 때문에 소수이다. 하지만, 6은 6 = 2 × 3 이기 때문에 소수가 아니다. 골드바흐의 추측은 유명한 정수론의 미해결 문제로, 2보다 큰 모든 짝수는 두 소수의 합으로 나타낼 수 있다는 것이다. 이러한 수를 골드바흐 수라고 한다. 또, 짝수를 두 소수의 합으로 나타내는 표현을 그 수의 골드바흐 파티션이라고 한다. 예를 들면, 4 = 2 + 2, 6 = 3 + 3, 8 = 3 + 5, 10 = 5 + 5, 12 = 5 + 7, 14 = 3 + 11, 14 = 7 + 7이다. 10000보다 작거나 같은 모든 짝수 n에 대한 골드바흐 파티션은 존재한다. 2보다 큰 짝수 n이..
베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼프가 1850년에 증명했다. 예를 들어, 10보다 크고, 20보다 작거나 같은 소수는 4개가 있다. (11, 13, 17, 19) 또, 14보다 크고, 28보다 작거나 같은 소수는 3개가 있다. (17,19, 23) 자연수 n이 주어졌을 때, n보다 크고, 2n보다 작거나 같은 소수의 개수를 구하는 프로그램을 작성하시오. $ 1 \le n \le 123,456 $ N = 123456*2 sieve = [True]*(N+1) m = int(N**0.5) for i in range(2, m+1): if sieve[..
M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.($1 \le M \le N \le 1,000,000$) - 에라토스테네스의 체를 이용하세요. n = 1000000 sieve = [True] * (n+1) m = int(n**0.5) for i in range(2, m+1): if sieve[i] == True: for j in range(i+i, n+1, i): sieve[j] = False sieve[0], sieve[1] = False, False M, N = map(int, input().split()) for i in range(M, N+1): if sieve[i] == True: print(i) 먼저 구하고자하는 범위에 대해 에라토스테네스의 체를 만들어줍니다. - sieve[i]가 ..
정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오. N = int(input()) i = 2 while N != 1: if N % i == 0: print(i) N = N // i else: i += 1 가장 작은 소수인 2부터 시작해서 입력된 숫자를 나눌 수 있을 때까지 나눈 후 다음 소수로 넘어가게 하면 소인수분해의 과정을 표현할 수 있습니다. 입력된 숫자를 나누다가 그 숫자가 1이 되었을 때는 소인수분해가 완료되었다는 의미이므로 while문의 조건을 N != 1로 두어 N == 1일 때 루프가 종료되도록 하였습니다.
자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오. 예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 이들 소수의 합은 620이고, 최솟값은 61이 된다. 소수가 하나도 존재하지 않으면 -1을 출력하세요. def is_prime(n): if n == 1: return False else: cnt = 0 for i in range(2, int(n**0.5)+1): if n % i == 0: cnt += 1 break if cnt == 0: return True else: return False M = int(input()..
주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오. def is_prime(n): if n == 1: return False else: div_cnt = 0 for i in range(2,int(n**0.5)+1): if n % i == 0: div_cnt += 1 break if div_cnt == 0: return True else: return False N = int(input()) nums = list(map(int, input().split())) prime_cnt = 0 for num in nums: if is_prime(num): prime_cnt += 1 print(prime_cnt) 먼저 어떤 숫자가 소수인지 아닌지를 판별하는 is_prime 함수를 만들어주..

T = int(input()) for _ in range(T): x, y = map(int,input().split()) d = y-x n = 0 while d > n**2: n += 1 if (n**2)-d < n: print(2*n-1) else: print(2*n-2) 이 문제는 이동해야하는 총 거리에 따라 이동횟수를 구하는 문제입니다. 문제에 따르면 거리에 따른 이동은 다음과 같이 이루어집니다. 저는 여기서 $d=n^2$이 되는 지점에 주목했습니다. ex: ( 1 ), (1 2 1), ( 1 2 3 2 1), ( 1 2 3 4 3 2 1 ) 1. $ (n-1)^2 \lt d \le n^2 $ 을 만족하는 $n$을 찾습니다. 2. 위의 예시에서 알 수 있듯이 n을 찾게되면 이동횟수는 $2n-2$ 또..
상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다. 상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다. 상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오. 정확하게 N킬로그램을 만들 수 없다면 -1을 출력하세요. N = int(input()) kg_3 = 0 while True: k..
이 아파트에 거주하려면 조건이 있습니다. "a층의 b호에 거주하려면 (a-1)층의 1호부터 b호까지의 사람들 수의 합만큼 사람들을 데려와 살아야 한다" 아파트에 비어있는 집은 없고 모든 거주민들이 계약 조건을 지키고 있다고 가정했을 때 k층 n호에는 몇 명이 살고 있는지 출력하세요. 단, 아파트는 0층부터 있고 각층에는 1호부터 있으며 0층 i호에는 i명이 산다. T = int(input()) for _ in range(T): k = int(input()) b = int(input()) floor_nums = [i+1 for i in range(b)] for i in range(1,k+1): floor_nums = [sum(floor_nums[:j+1]) for j in range(b)] print(fl..