티스토리 뷰
반응형
문제
programmers.co.kr/learn/courses/30/lessons/62048
문제 상황
- 가로 Wcm, 세로 Hcm인 종이를 대각선으로 잘라 단위 사각형으로 잘라 쓸 수 없는 부분을 전체에서 제거한다.
해결 전략
- 전체에서 대각선이 지나가는 사각형을 빼야하고, 결국 반복되는 구조이므로 최소 비율이 몇번 반복되는지 찾아야한다. 이를 위해 GCD(최대 공약수) 개념이 필요하다. 예시의 8cm, 12cm의 경우 비율이 2:3 이므로 가장 작은 가로 2cm, 세로 3cm의 사각형을 기준으로 생각한다. 작은 사각형을 기준으로 가로를 w', 세로를 h'라 할 때 대각선은 w'+h'-1의 사각형 수만큼 지나간다. 그러므로 전체 수는 W*H - (w'+h'-1)*(W//GCD(W,H))이므로 W*H-(W+H-GCD(W,H))가 된다.
코드
1
2
3
4
5
6
|
from math import gcd
def solution(w:int, h:int) -> int:
return w * h - (w + h - gcd(w, h))
|
cs |
해설
- 파이썬 내장함수로 gcd 구현이 가능하여 매우 간단한 수식이 되지만 간단하게 gcd를 구현해 볼 수 있다. 유클리드 호제법을 사용한다.
1
2
3
4
|
def gcd(w:int, h:int) -> int:
if h == 0:
return w
return gcd(h, w % h)
|
cs |
- 재귀로 gcd를 구현한다. 중요한 것은, 여기서 gcd에 return을 하지 않으면 바로 None이 출력된다.
새로 학습한 것 & 실수
- 알고리즘적으로 복잡한 것이 아니라 수학문제에 가까웠다. 대각선이 지나는 사각형의 개수에 대한 개념을 알고 있는 것이 중요한 문제였다. 이렇게 수학적 지식이 중요한 문제는 Codility에서 주로 봤는데 대비할 필요가 있다.
반응형
'알고리즘 학습 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 이진 변환 반복하기 (월간 코드 챌린지 시즌1) [Python] (0) | 2021.01.08 |
---|---|
프로그래머스 - 스킬트리 (Summer/Winter Coding(~2018)) [Python] (0) | 2021.01.07 |
프로그래머스 - 자물쇠와 열쇠 [Python] (0) | 2020.09.12 |
프로그래머스 - 괄호 변환 [Python] (0) | 2020.09.11 |
프로그래머스 - 길 찾기 게임 [Python] (0) | 2020.09.11 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- django#slicing
- 파이썬알고리즘인터뷰#4장
- 리모컨#완전탐색#BOJ#Python
- 쿼드트리#BOJ#분할정복#Python
- Swift#Tuples#Range
- 반복수열#백준알고리즘#Python
- 날짜 계산#BOJ#완전탐색#Python
- 나무자르기#BOJ#이분탐색#Python
- API#lazy#
- N으로 표현#DP#Programmers#Python
- 토마토#백준알고리즘#Python
- 배열합치기#분할정복#BOJ#Python
- 미로 탐색#백준알고리즘#Python
- 섬의개수#백준알고리즘#Python
- 순열사이클#BOJ#Python
- 종이자르기#분할정복#BOJ#Python
- filter#isalnum#lower
- NumberofDiscIntersections#Codility#Sort#Python
- 텀 프로젝트#백준알고리즘#Python
- Distinct#Codility#Python
- 랜선자르기#이분탐색#BOJ#Python
- 병든 나이트#BOJ#탐욕법#Python
- 백준 알고리즘#BackTracking
- 암호코드#dp#BOJ#Python
- 터틀비치#리콘#xbox#controller
- PassingCars#Codility#Python
- 공유기 설치#BOJ#이분탐색#Python
- Brackets#Stacks and Queues#Codility#Python
- django
- Triangle#Sorting#Codility#Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함