접근법 문제가 너무 신박해서 재밌게 풀었다. 복잡해 보이는 문제지만 자세히 살펴보면, 우선 두 개의 좌표가 주어진다. 이 좌표로 부터 특정 점 (마린 a.k.a 류재명) 까지의 거리를 계산했을 때, 마린이 있을 수 있는 좌표를 찾으라고 되어있다. 따라서 하나의 터렛으로 부터 측정한 거리는 원으로 나타낼 수 있고, 마찬가지로 또 다른 터렛에서 측정한 거리를 원으로 나타낼 수 있다. 그랬을 때, 마린이 위치할 수 있는 경우의 수는 두 원의 접점의 수를 계산하면 되는 것이다. 두 원 사이의 관계는 아래의 그림을 통해 확인하자. 풀이 import math case = int(input()) for i in range(case): x1,y1,r1,x2,y2,r2 = map(int,input().split(' ')..
접근법 택시 기하학이라는 말은 처음 들어봤는데, 문제를 차근차근 읽어보니 반지름의 길이가 같아도 유클리드 기하학에서의 원과 택시 기하학에서의 원의 형태가 틀리다. 반지름이 r인 원과 한 변의 길이가 r인 마름모의 넓이를 출력하면 된다. 풀이 import math a = int(input()) v1 = a * a * math.pi v2 = (a * 2) * (a * 2) / 2 print("%.6f" % v1) print("%.6f" % v2) @ 문제 출처 : 백준
접근법 문제에서 주어진 가장 기본적인 규칙이 짝수라는 것이다. 이 특정한 짝수를 두 수의 합의 형태로 나타낼 때, 가장 차이가 작은 것은 짝수를 2로 나눈 값을 나열하는 것이다. 예를 들어서, 10의 경우는 5 + 5가 될 것이고, 14의 경우는 7 + 7이 될 것이다. 따라서, 문제에서 원하는 답을 찾을 때는, 어찌 되었든 가장 중앙에서부터 시작해야 한다. 문제를 풀기 위해서 접근한 방법은 아래와 같다. 최대값인 10,000까지의 소수로 이루어진 리스트를 우선 만들어 놓는다. 입력값을 n 이라고 할 때, n의 가운데에서부터 시작해서 소수 리스트에 해당 값이 있는지 확인한다. 없으면 다음 값, 또 그다음 값... 을 반복하여 중앙에서 가장 가까운 소수를 찾는다. (이하 x) 이제 해당 소수와 가장 인접한..
접근법 소수 시리즈 4탄이다. 어벤저스도 4편이 엔드게임인데 소수도 이제 엔드게임이었으면 좋겠다. 이번 문제도 에라토스테네스의 체를 이용하면 쉽게 풀 수 있다. 에라토스테네스의 체에 대한 자세한 설명은 이전 포스팅에 있으니 참고바란다. (이전 포스팅) 우선 숫자 0이 들어올 때까지 해당 프로그램은 무한루프를 돌아야 한다. 그리고 각 케이스 별로 입력값이 주어지면 입력값의 두배에 해당하는 범위까지의 소수의 개수를 찾아야한다. 따라서, 이전에 만들어 두었던 프로그램을 활용하면 손쉽게 문제를 풀 수 있다. 풀이 while True: n = int(input()) N = 2 * n if n == 0 : break else : arr = [i for i in range(N+1)] arr[1] = 0 for i i..
접근법 소수 시리즈의 3탄이다. 소수가 싫어진다 소수 2탄과 유사한 문제의 형태이다. 범위가 주어지고, 해당 범위 안에서 소수를 찾는 문제다. 이번에는 전에 사용했던 함수들의 문제점을 조금 해결해보았다. 우선, for문의 반복 범위를 제곱근까지만 돌 수 있도록 변경했다. 반복의 횟수를 줄이는 것만으로 해도 충분히 시간을 줄일 수 있었고, 추가적으로 중간에 나누어 떨어지는 수가 있는 경우에는 즉시 False를 return하도록 했다. 그 코드는 바로 다음과 같다. import math def Prime(num): if num==1: return False n=int(math.sqrt(num)) for i in range(2,n+1): if num%i==0: return False return True M,..