본 게시물은 프로그래머스의 연습 문제 풀이입니다. 저작권은 (주) 그랩에게 있습니다
파이썬 코드
# 멀쩡한 사각형
# 입력받은 두 수의 최대 공약수를 구하는 함수
def gcd(a, b):
if a % b == 0:
return b
else:
return gcd(b, a % b)
def solution(w, h):
# w와 h의 최대공약수 구하기
w_h_gcd = gcd(w, h)
# 총 정사각형의 수
total_square = w * h
unusable_square = w + h - w_h_gcd
# 사용할 수 있는 정사각형의 수
usuable_square = total_square - unusable_square
return usuable_square
Comment
답을 구하기 위해서는, 전체 정사각형의 개수
에서 사용할 수 없는 정사각형의 개수
를 빼야한다.
전체 정사각형의 개수
는 주어진 w와 h를 곱하면 쉽게 구할 수 있다.
사용할 수 없는 정사각형의 개수
는 w와 h의 최대공약수
에 따른 규칙을 찾아서 구해내야한다. 최대공약수
를 구하기 위해서 유클리드 호제법을 재귀함수의 형태로 구현한다. 최대공약수
에 따른 사용할 수 없는 정사각형의 개수
규칙은 아래와 같다
w + h - g
위와 같은 규칙이 나오는 이유는, 대각선은 좌측 상단의 꼭지점으로부터 우측 하단의 꼭지점으로 우하향한다. 이때, 대각선은 가로로 w만큼 세로로 h만큼 지니간다. 그러므로 당연히 w개의 정사각형을 못쓰게 될 것이고 h개의 정사각형을 못쓰게 된다. 그러므로 w와 h를 더한다. 하지만, 대각선으로 지나가는 것이므로 실제 값보다 과대 계산된다. 겹치게 계산된 수 (w와 h의 최대공약수
)를 빼준다.
Reference
'programming study > Algorithm' 카테고리의 다른 글
[프로그래머스] 약수의 개수와 덧셈- JavaScript 풀이 (0) | 2021.06.24 |
---|---|
[프로그래머스] 스킬트리 - python 풀이 (0) | 2021.06.22 |
[프로그래머스] 콜라츠 추측 - python 풀이 (0) | 2021.06.20 |
[프로그래머스] 문자열 다루기 기본 - python 풀이 (0) | 2021.06.19 |
[프로그래머스] 로또의 최고 순위와 최저 순위 - python 풀이 (0) | 2021.06.19 |