본문 바로가기

전체 글92

[python] 1002. 터렛 문제 출처 1002. 터렛 풀이 d(distance): 터렛1과 터렛2의 거리 r1, r2: 터렛1과 터렛2 부터 마린까지의 거리 ip(intersection point): 마린이 존재할 수 있는 경우의 수 풀이에 사용하는 용어는 위와같이 정의하고, 두 터렛의 좌표와 마린과의 거리가 주어졌을때 마린이 존재할 수 있는 위치의 경우는 다음과 같다. d가 (r1+r2) 보다 클때 두 터렛간의 교점이 없음 d가 (r1+r2)와 같을때 두 터렛간의 교점이 하나 존재 d가 (r1+r2) 보다 작을때 두 터렛의 좌표가 같고 마린까지의 거리도 같을 때 한 터렛의 좌표가 다른 터렛의 반경 내부에 있으며 교점이 두 개 존재 한 터렛의 좌표가 다른 터렛의 반경 내부에 있으며 교점이 두 개 존재 한 터렛의 좌표가 다른 터렛의.. 2019. 6. 26.
[python] 1015. 수열정렬 문제 출처 1015. 수열 정렬 풀이 우리에게 주어지는 input은 'N'과 '수열 A'이고, 이 수열 A를 비내림차순(각각의 원소가 바로 앞에 있는 원소보다 크거나 같을 경우)으로 만드는 '수열 P'를 구해야하는 문제이다. 주어진 문제의 설명과 예제만으로는 이해하기 쉽지 않지만, 간단하게 설명하면 수열 A 와 같은 길이의 수열 P를 만들고, 수열 A의 작은 값의 인덱스와 같은 위치의 수열 P에 0부터 N-1까지 넣어주면 된다. 예를들면, 예제1 수열 A : 4 2 6 1 9 수열 P : 2 1 3 0 4 예제2 수열 A : 1 0 1 0 1 수열 P : 2 0 3 1 4 예제3 수열 A : 1 1 1 수열 P : 0 1 2 위의 예제와 같이 만약 수열 A에 중복되는 숫자가 있다면 중복되는 숫자가 나온 .. 2019. 6. 26.
[python] 1010. 다리놓기 문제 출처 1010. 다리놓기 풀이 단순한 순열/조합을 사용한 경우의 수 문제이다. 서쪽에서 동쪽으로 다리를 놓을때 두 개 이상의 다리가 겹치면 안되므로 순서를 배제한 모든 경우의 수를 구하면 된다. T = int(input()) for _ in range(T): N, M = map(int, input().split()) tot = 1 # 동쪽과 서쪽의 사이트 갯수가 동일할때 if N != M: # 동쪽의 사이트 갯수가 더 많을때 for i in range(M, M-N, -1): tot *= i for i in range(N, 1, -1): tot //= i print(tot) 2019. 6. 26.
[python] 1004. 어린 왕자 문제 출처 1004. 어린 왕자 풀이 A 포인트부터 B 포인트까지 이동할때 거쳐야 할 최소의 행성계 진입/이탈 횟수를 구한다. 행성계의 좌표와 반지름이 주어지므로 A, B포인트와 행성계 와의 거리를 통해 행성계 궤도에 진입 여부를 확인한다. 이때 최소의 횟수를 구하는 것 이므로 진입/이탈 둘 다 하는 경우는 없다고 볼 수 있다. 따라서 최소의 행성계 진입을 통해 이동가능한 경우는 다음과 같다. 한 개 이상의 행성계 내부에 A, B 포인트 모두 존재 한 개의 행성계 내부에는 A, B 포인트 중 하나만 존재 A, B 포인트 모두 행성계 외부에 존재 위 경우를 고려해서 코드를 짜면 다음과 같다. # 특정 포인트가 행성계 내부에 존재 유무 확인 def inCircle(planet, x, y): c1, c2, r.. 2019. 6. 25.