728x90
반응형
문제출처: https://school.programmers.co.kr/learn/courses/30/lessons/62048
풀이:
if w == h :
return (w * h) - w
가로 세로 같으면 가로*세로 - (가로 세로 중 하나)
22.2 / 100
if w <=1 or h <= 1:
return 0
가로 혹은 세로가 1이면 대각선으로 그으면 다 날라가기때문에
0 을 리턴
38.9 / 100
def gcd(x, h):
max_xy = max(x, h)
min_xy = min(x, h)
while h > 0:
x, h = h, x % h
return max(x,h)
def solution(w,h):
if w == h :
return (w * h) - w
if w <=1 or h <= 1:
return 0
else:
return (w * h) - ( (w+h) - (gcd(w,h)))
그 외의 경우
대각선과 만나는 점 이용 >> 최대공약수 만큼 만남
각 대각선에 겹치는 직사각형들은 맨왼쪽 위로 옮겨보면 빈공간이 3이 나와서
처음엔 최대공약수 - 1 을 했지만
w + h 할때 한 부분이 겹쳐들어가서 -1 을 하지 않고 빼주면 된다
다른사람 코드..
def gcd(a,b): return b if (a==0) else gcd(b%a,a)
def solution(w,h): return w*h-w-h+gcd(w,h)
반응형
댓글