def solution(brown, yellow):
total = brown + yellow
num = []
idx = 3
while (True) :
if total % idx == 0 :
if idx > total // idx :
break
num.append([total // idx, idx])
idx += 1
for n in num :
temp = (n[0]-2)*2 + n[1]*2
if temp == brown :
return [n[0], n[1]]
break
그냥 로직만 잘 짜면 금방 해결할 수 있는 문제였다
일단 (brown + yellow) 의 약수를 구해주는데,
1과 2는 가로/세로 길이가 될 수 없기 때문에 애초에 idx 를 3으로 초기화시켜줌.
그리고 가로 길이가 세로 길이보다 더 커야 하니까 idx 가 total // idx 보다 커지면 break
예를 들어서 (brown + yellow) 가 48일 때,
왼쪽 정수는 idx, 오른쪽 정수는 total // idx 라고 가정하면
1 x 48 (x) -- idx 는 3부터 시작했기 때문에 포함 안 됨
2 x 24 (x) -- idx 는 3부터 시작했기 때문에 포함 안 됨
3 x 16 (o)
4 x 12 (o)
6 x 8 (o)
8 x 6 (x) -- idx 가 더 커지는 경우니까 이때 break
참고로 temp = (n[0]-2) * 2 + n[1] * 2 에서
n[0] 은 가로 길이, n[1] 은 세로 길이인데,
중간에 들어있는 yellow 빼고 계산해줘야 하니까
위에처럼 테두리만 따로 계산해준거
암튼 brown 개수 계산해서 입력으로 들어온 brown 개수랑 맞아떨어지면 바로 리턴하고 끝 !!
'알고리즘' 카테고리의 다른 글
[프로그래머스 Lv1] 예산 (Python) (0) | 2022.07.02 |
---|---|
[프로그래머스 Lv2] 기능개발 (Python) (0) | 2022.07.02 |
[프로그래머스 Lv2 - 2019 KAKAO BLIND RECRUITMENT] 오픈채팅방 (Python) (0) | 2022.07.02 |
[프로그래머스 Lv1 - 2018 KAKAO BLIND RECRUITMENT] 다트 게임 (Python) (0) | 2022.07.01 |
[프로그래머스 Lv1 - 2018 KAKAO BLIND RECRUITMENT] 비밀지도 (Python) (0) | 2022.07.01 |