백준 문제풀이(파이썬)/기본 수학 2

두 원의 중심 좌표와 반지름을 줄 때 교점의 개수를 구하는 문제이다. 겉보기에는 쉬운 문제이지만, 조건문을 짤 때 실수를 많이하는 문제이다. 조건문을 나눠줄 때 크게 두가지 경우로 나눈 뒤 세부적으로 들어가는 것이 좋을 것 같아서 두 원의 중심이 같을 때와 다를 때로 나누었다. 중심이 같을 때는 두 원이 일치하는 경우와 한 원이 다른 원을 포함할 때 두가지 경우가 있다. 중심이 다를 때는 밑의 사진의 경우 처럼 한 점에서 접하는 경우, 두 점에서 만나는 경우, 만나지 않는 경우로 나뉘는데, 한 점에서 접할 때는 (1) 각 반지름의 합이 좌표사이의 거리와 같을 때 (2) 각 반지름의 차가 좌표사이의 거리와 같을 때이다. 제곱근 계산의 번거로움 때문에 제곱을 한 값을 사용해서 비교를 해주면 되겠다. 두 점에..
이번 문제도 베르트랑 공준 문제처럼 먼저 소수를 모두 구한 뒤에 반복문을 이용해서 구해주면 될 것이다. 문제의 핵심은 2부터 증가하면서 둘다 소수이면 출력해주면 되는 것인데, 출력할 때 파티션이 여러 가지인 경우에는 두 소수의 차이가 가장 작은 것을 출력하고, 출력하는 소수는 작은 것부터 먼저 출력해야한다. 그러려면 min 변수와 gap 변수를 이용해서 gap을 매번 구해준 뒤 min과 비교해서 gap이 더 작으면 gap을 min에 넣어준 뒤 반복해서 비교해주면 되겠다. ##변수 선언 부분 T = 0 n = 0 min = 100000 gap = 0 save = 0 ##메인 함수 부분 if __name__ == "__main__": T = int(input()) prime = 10001 * [True] f..
이 문제는 입력값이 1~123,456 이므로 이중 for문을 이용하는 일반적인 소수 판별법으로는 시간 초과가 나올 것이 분명했다. 문제의 설명란에 에라토스테네스의 체로 풀어보자는 말이 있으므로 구글링을 해봤다. 위의 사진은 120까지의 자연수 중에서 소수를 모두 구하는 과정을 보여준다. 과정은 간단하다. 2의 배수를 모두 지우고, 그 다음엔 3의 배수를 지운다. 4는 이미 앞에서 2의 배수를 지울 때 지워졌기 때문에 4가 아닌 5로 넘어가서 5의 배수를 모두 지운다. 여기서 포인트는 위의 예에서 120까지의 소수를 구하는 것이 목적인데, 120 < 11^2 이므로 11까지만 이 과정을 반복해주면 된다. 이 과정을 반복하면 소수만 남는다는 것이 에라스토테네스의 체이다. 프로그래밍 언어로 구현하기는 생각보다..
소수를 구하는 법을 안다면 그렇게 어렵지 않은 문제이다. 입력 값도 10,000이하의 자연수이기 때문에 시간초과 걱정은 안해도 된다. M부터 N까지 반복문을 돌리면서 값이 소수인지 판별해주면 되겠다. 소수를 구할 때 2부터 나누어주면서 진행하기 때문에, 2가 소수라는 사실을 잊기 쉬우니 조심하자. 최솟값을 구할 때는 첫번 째 값일 때 즉, sum이 아직 0일 때 구한 값을 최솟값으로 초기값으로 설정해 준 뒤 그 뒤부터 비교를 해주면 된다. ##변수 선언 부분## M = 0 N = 0 min = 0 sum = 0 isRight = 0 ##메인 함수 부분## if __name__ == "__main__": M = int(input()) N = int(input()) for i in range(M, N+1):..
aodtns
'백준 문제풀이(파이썬)/기본 수학 2' 카테고리의 글 목록