코드 N = 2*123456+1 sosu =[True] *N for i in range(2,int(N**0.5)+1): if sosu[i]: for j in range(2*i,N,i): sosu[j] = False def check_prime(n): cnt = 0 for k in range(n+1, (n*2)+1): if sosu[k]: cnt += 1 print(cnt) while 1: n = int(input()) if n == 0 : break check_prime(n) N의 범위는 1
코드 a, b, v = map(int, input().split()) day = (v-b) / (a-b) print(int(day) if day == int(day) else int(day)+1) 하루동안 움직이는 거리는 a이고 밤이 되면 b만큼 미끌어진다. -> a만큼 더하고 b만큼 뺀다. 그런데 다음날 지나갈 때 -b를 한 채로 계산을 하게 되면 오류가 날 수 도 있다 ex) a,b,v =2,1,5 로 예로 들고 밤도 하루단위로 계산하게 되면 a-b=1 하루 1만큼씩 움직이기에 5일이 걸린다는 결과가 나오는데 아침이 되었을 때 움직이는 것까지 계산하면 4일 이면 v에 도달하게 된다. 그러므로 v = a*day - b*day + b 로 수식으로 표현할 수 있다. day값이 int(day)정수값과 같은 ..
코드 text_num = int(input()) for _ in range(text_num): k = int(input()) # 층 변수 n = int(input()) # 호 변수 f0 = [i for i in range(1,n+1)] # 0층 1호부터 ~ n호까지 인원수 만들기 for i in range(k): for j in range(1, n): # fo[0] (1호)은 계속 1이며, 아래 층에 인원 수를 구하는 k층까지 더함. f0[j] += f0[j-1] print(f0[n-1]) 문제 풀이 f0 변수에 0층 1호부터 ~ n호까지의 인원수를 만들어준다. k층의 n호에 있는 인원수를 구하기 위해선 k번 만큼 반복해줘야한다. f0[0]은 1호이기에 계속 1이며, 이를 제외하고 f0[j] += fo[..
코드 n = int(input()) cnt = 0 while n >= 0 : if n % 5 == 0 : cnt += n//5 print(cnt) break n -= 3 cnt += 1 else : print(-1) 문제 풀이 봉지의 최소 개수를 구해야하는 문제이기 때문에 3과 5중 큰 수인 5로 나누어 떨어지게 만들면 최솟값을 구할 수 있다. 1. n이 5로 한 번에 나눠 떨어지는 수이다. 2. n이 5로 나누어지지 않아 -3을 해가면서 5로 나누어 떨어지는지 확인한다. 3. (2)의 방법이 되지 않는 3의 배수인 경우 -3을 통해서만 계산한다. 4. 나머지 경우는 문제에서 제시했듯이 -1을 출력한다. (3)번 같은 경우 출력하기 위해서 n>0 이 아닌 n>=0을 함으로써 0이 됐을 때 더해지는 값이 ..