728x90
반응형
문제
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
내 생각
악 완전탐색 쉬운듯 넘 어렵다 이건 수학적 센스도 필요하고 규칙도 잘 찾아야 하고 구냥 뭐 아무튼 해낼거라는 얘기
이 문제도 문제를 이해하고 엥? 했다. 그래서 조금의 검색도 함 ㅎㅎ ㅠ
아무튼 내가 해결한 방법은
1. 전체 크기를 구한다.
2. 모든 가로 세로가 될 수 있는 경우의 수를 구한다. : 제곱근을 구하는 int(total**0.5) 를 잊지마,,
3. 노란색 부분을 구한다
4. 노란색 부분이 일치해? 그게 답이다
그러니까 가장 중요했던건 약수 구할 줄 알아? 인 것같다 !
(다른 사람의 풀이보니까 수학적 공식을 도입한 사람도 있었고, 구냥 대박이었다,,)
내 코드
def solution(brown, yellow):
size = brown + yellow
# 약수의 쌍을 찾아가며 가로, 세로 길이 검증
# total의 제곱근까지만 반복
for i in range(1, int(size**0.5)+1):
#n을 i로 나누었을 때 나누어 떨어지면 그게 일부의 약수들
if size % i == 0:
# i가 가로 길이, total//i가 세로 길이
#(i-2)는 갈색 테두리의 가로 길이를 제외한 한 행의 노란색 수
#(size//i-2)는 갈색 테두리의 세로 길이를 제외한 한 열의 노란색 수
y = (i-2) * (size//i-2)
# 노란색수가 일치하는지 확인
if y == yellow:
return [size//i, i]
다른 사람의 코드
def solution(brown, yellow):
w = (brown / 2) + 1
h = 1
while w >= h:
if (w-2) * (h-2) == yellow:
return [w, h]
w -= 1
h += 1
728x90
반응형
'Algorithm > 코딩테스트 (Python)' 카테고리의 다른 글
[백준] [2164번] - 카드2 (0) | 2023.12.14 |
---|---|
[프로그래머스][정렬] H-Index (0) | 2023.12.11 |
[프로그래머스] 가까운 수 (1) | 2023.12.05 |
[프로그래머스][스택/큐] 주식가격 (1) | 2023.12.04 |
[프로그래머스][딕셔너리(해시맵)] 의상 (0) | 2023.12.01 |
댓글