본문 바로가기
프로그래머스/2단계

(Python/LV2)멀쩡한 사각형

by windy7271 2022. 10. 8.
728x90
반응형

문제출처: https://school.programmers.co.kr/learn/courses/30/lessons/62048

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이:

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)

 

반응형

댓글