문제
풀이
카펫의 가장자리만 브라운, 가운데는 노란색이려면 가로, 세로에 어떤 조건이 있을지 생각해봤다.
1. brown + yellow의 소인수일것이다.
입출력 예의 첫번째를 보자면 10 + 2 즉 12는 3과 4의 곱이다.
2. 가로와 세로에서 2씩 뺀 값을 곱하면 yellow 타일 개수일 것이다.
위 두 조건을 만족시키는 값을 찾으면 리턴했다.
def solution(brown, yellow):
for height in range(1, brown + yellow + 1):
if (brown + yellow) % height == 0:
width = int((brown + yellow) / height)
if yellow == (height - 2) * (width - 2):
return [width, height]
다른 사람의 코드
def solution(brown, red):
for i in range(1, int(red**(1/2))+1):
if red % i == 0:
if 2*(i + red//i) == brown-4:
return [red//i+2, i+2]
int(red**(1/2)+1)은 루트씌워 최대 범위를 줄인 것 같고,,,
두 번째 if문에선 brown-4는 모서리 네 개의 타일을 제거하고 둘레의 길이를 기준으로 계산한 것 같은데
정확히 뭔소린지 모르겠다ㅎㅎ 누가 좀 알려주세요
import math
def solution(brown, yellow):
w = ((brown+4)/2 + math.sqrt(((brown+4)/2)**2-4*(brown+yellow)))/2
h = ((brown+4)/2 - math.sqrt(((brown+4)/2)**2-4*(brown+yellow)))/2
return [w,h]
근의 공식을 이용한 풀이라고 한다. 노트있을때 다시 봐야겠다
'알고리즘 스터디' 카테고리의 다른 글
[프로그래머스] 해시 3. 위장 (0) | 2021.04.03 |
---|---|
[Google Kick Start] 2021 Round A (0) | 2021.03.28 |
[프로그래머스] 완전탐색 2. 소수 찾기 (0) | 2021.03.14 |
[프로그래머스] 스택/큐 4. 프린터 (0) | 2021.03.07 |
[프로그래머스] 스택/큐 3. 기능개발 (0) | 2021.03.04 |