풀이 def factorial(n): if n == 1 or n == 0: return 1 return n * factorial(n-1) n = int(input()) print(factorial(n)) 접근법 재귀 중에서도 가장 간단한 문제다. 전체적인 흐름을 보면 다음과 같다. 1 2 * factorial(1) 3 * factorial(2) 4 * factorial(3) 5 * factorial(4) 우선, 위처럼 값을 모두 쌓아둔다. (push) 그리고 각 값을 출력할 때, 메모리 입장에서는 factorial() 값을 모르기 때문에 pop을 해서 factorial(1) = 1 과 같이 값을 거꾸로 찾아간다. 즉, 2 * factorial(1) = 2 * 1 3 * factorial(2) = 3 * ..
접근법 문제가 너무 신박해서 재밌게 풀었다. 복잡해 보이는 문제지만 자세히 살펴보면, 우선 두 개의 좌표가 주어진다. 이 좌표로 부터 특정 점 (마린 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) @ 문제 출처 : 백준
접근법 처음에는 약간 의심을 품었으나, 모두가 생각하는 그것이다. 피타고라스! 코드는 먼저 빗변을 찾기 위해서 input으로 가져온 값을 정렬했고, 모두 0이 들어온 경우에 입력을 멈출 수 있도록 break를 걸어주었다. 그 다음은 피타고라스의 정의를 통해 출력을 할 수 있도록 해주었다. 풀이 while True: a, b, c = sorted(map(int,input().split(' '))) if sum([a,b,c]) == 0: break print('right' if a**2 + b**2 == c**2 else 'wrong') 문제 출처: 백준
접근법 직사각형의 정의에 대해서 한번 고민해보면 쉽게 해결할 수 있는 문제다. 직사각형은 두 쌍의 마주 보는 변이 서로 평행이고, 그 길이가 같다. 또한 네 각이 모두 90도로 동일하다. 따라서 x좌표든 y좌표든 모두 두 번씩 등장해야 한다. 아래의 그림을 참조하자. 문제에서 주어지는 x와 y좌표를 리스트에 담아두고, 단 한번만 등장한 좌표를 출력하는 형태로 코드를 만들어보았다. 풀이 X = list() Y = list() for _ in range(3): x,y = map(int,input().split(' ')) X.append(x) Y.append(y) for i in X: if X.count(int(i)) == 1: new_x = int(i) for i in Y: if Y.count(int(i))..