문제
https://programmers.co.kr/learn/courses/30/lessons/42842
코딩테스트 연습 - 카펫
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과
programmers.co.kr
나의 코드
def solution(brown, yellow):
div_arr1,div_arr2 = divisor(brown + yellow)
for a1,a2 in zip(div_arr1,div_arr2):
if (a1-2) * (a2-2) == yellow:
return [a2,a1]
def divisor(num):
arr1 = []
arr2 = []
for i in range(1,int(num**(0.5))+1):
if num % i == 0:
arr1.append(i)
arr2.append(num//i)
return arr1,arr2
풀이
갈색과 노란색 격자의 합으로 카펫이 만들어진다. 합산된 수로 만들 수 있는 직사각형을 구하기 위해서
약수들을 구해서 경우의 수를 arr1, arr2에 저장한다.
약수들의 집합은 arr1 + arr2 이지만 짝지어서 카펫의 경우를 나타내기로 하였다.
노란색은 카펫의 길이-2로 이루어 지기 때문에 arr1와 arr2에서 한 개씩 순서대로 뽑은 뒤 -2 한 값들을 곱한다.
곱하였을 때 그 값이 yellow와 같으면 return하면 된다.
a1-2 와 a2-2를 처음에 음수가 될 경우를 제거해야되나 생각했지만 두개가 동시에 음수가 되는 경우는 없고,
음수가 하나라도 있는 경우도 2이하인 경우 문제가 발생하기 때문에 yellow가 될 수 없다고 생각했다.
좀 더 수학적으로 해결하는 방법도 생각해봤고 다른 사람 풀이도 수학으로 푼 경우도 있지만 그냥 내가 생각한 것을
구현하는데 집중하였다.
'공부-코딩테스트 > 코테풀이 - 자바, 파이썬' 카테고리의 다른 글
뉴스 클러스터링 (코딩테스트, 프로그래머스, 파이썬) (0) | 2022.02.26 |
---|---|
큰 수 만들기 (코딩테스트, 프로그래머스, 파이썬) (0) | 2022.02.24 |
방문 길이 (코딩테스트, 프로그래머스, 파이썬) (0) | 2022.02.20 |
H-Index (코딩테스트, 프로그래머스,파이썬) (0) | 2022.02.18 |
전화번호 목록 (코딩테스트, 프로그래머스) (0) | 2022.02.17 |
댓글