두 원의 교점의 개수를 구하는 문제 코드 import math t = int(input()) for _ in range(t): x1,y1,r1,x2,y2,r2 = map(int,input().split()) distance = math.sqrt((x1-x2)**2 + (y1-y2)**2) if distance == 0 and r1 == r2 : print(-1) elif abs(r1-r2) < distance < r1+r2 : print(2) elif distance == r1+r2 or distance == abs(r1-r2) : print(1) else: print(0) import math math.sqrt() 는 제곱근을 구해주는 함수이다. abs()는 절대값을 구해주는 함수 (1) 위치의 개수 ..
코드 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)정수값과 같은 .0으로 끝나게..
코드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이며, 이를 제..
코드 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이 됐을 때 더해지는 값이 ..
코드 natural_num = set(range(1,10001)) generated_num = set() for i in range(1, 10001): for j in str(i): i += int(j) generated_num.add(i) self_num = sorted(natural_num - generated_num) for k in self_num : print(k) 이 문제에서는 셀프 넘버를 구하기 위해 생성된 변수를 구하고 이를 generated_num 변수에 저장한다. natural_num 변수는 1~10000을 저장하고 있으며 셀프 넘버를 구하기 위해 natural_num에 저장된 값들 중에 generated_num 값들을 빼주면 되기에 set자료형을 사용하여 차집합을 연산한다. sorte..
코드 n = int(input()) d = [] for i in range(n): sum = 0 score = 0 case = input() for j in range(len(case)): if case[j] == 'O': score += 1 sum += score else : score = 0 d.append(sum) for K in d: print(K) 문자열에서 'O'가 연속적으로 있는 경우는 if case[j] =='O' 를 통해 score 값으로 1씩 올리며 더해준다. else절에서 score값을 0으로 다시 초기화함으로써 X일때를 표현한다.
코드 c = int(input()) d = [] for i in range(c): tol = 0 avg = 0 count = 0 n_score = list(map(int, input().split())) tol = sum(n_score) - n_score[0] avg = tol/(len(n_score)-1) for j in range(1, len(n_score)) : if n_score[j] > avg : count += 1 d.append((count/(len(n_score)-1))*100) for k in range(c): print(f'{d[k]:.3f}%') 총합 변수 tol, 평균 변수 avg, 각 테스트 케이스에서 평균 보다 높은 점수의 개수는 count 변수로 저장을 하였다. tol에서는 각..