반응형
카펫
문제 링크
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해 주세요.
제한 조건
- 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
- 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
- 카펫의 가로길이는 새로 길이와 같거나, 세로 길이보다 깁니다.
입출력 예
brown | yellow | return |
10 | 2 | [ 4, 3 ] |
8 | 1 | [ 3, 3 ] |
24 | 24 | [ 8, 6 ] |
해결 과정
'''
브라운의 가로 = brown_width = bw
브라운의 세로 = brown_height = bh
옐로우의 가로 = yellow_width = yw
옐로우의 세로 = yellow_height = yh
A. 브라운 가로, 브라운 세로 길이 = 옐로우 가로+2, 옐로우 세로+2
bw, bh = yw + 2, yh + 2
B. 브라운 개수 + 옐로우 수 = 카펫의 전체 크기 = 브라운 가로 x 브라운 세로
brown + yellow = carpet = bw x bh = (yw + 2) x (yh + 2)
C. 옐로우 = 옐로우 가로 x 옐로우 세로
yellow = yw x yh = (bw - 2) x (bh - 2)
D. 브라운 = 브라운 가로 + 브라운 가로 + 브라운 세로 + 브라운 세로 - 4
brown = bw + bw + bh + bh - 4 = 2bw + 2bh - 4
따라서
bw = (brown - 2bh + 4) / 2
을 이용해보자.
'''
제출 코드
def solution(brown, yellow):
# 1. 세로 길이는 가로보다 작거나 같다는 조건이 있으므로 절반까지 확인
for bh in range(1, brown//2 + 1):
# 2. 위 정리된 수식을 이용하여 가로, 세로 구하기
bw = (brown - 2 * bh + 4) // 2
yw, yh = bw - 2, bh - 2
# 3. 옐로우 = 옐로우 가로 x 옐로우 세로 이면서 옐로우 + 브라운이 브라운 가로 x 브라운 세로를 만족하면
if yellow == yw * yh and yellow + brown == bw * bh:
# 4. 브라운 가로, 브라운 세로가 카펫의 크기와 같다.
return [bw, bh]
또 다른 풀이
def solution(brown, yellow): # 근의 공식 활용
x = (brown + 4 + ((brown + 4) ** 2 - 16 * (brown + yellow)) ** 0.5) / 4
y = (brown + yellow) / x
return [x, y]
반응형
'ALGORITHM > Programmers' 카테고리의 다른 글
[Python] 프로그래머스, H-Index Lv.2 (feat. for, sort, 파이썬) (5) | 2023.06.05 |
---|---|
[Python] 프로그래머스, 할인 행사 Lv.2 (feat. zip, Counter, 파이썬) (34) | 2023.04.11 |
[Python] 프로그래머스, 추억 점수 Lv.1 (feat. zip, dictionary, 한 줄 코드, 파이썬) (23) | 2023.04.06 |
[Python] 프로그래머스, 위장 Lv.2 (feat. hash, counter, 파이썬) (52) | 2023.04.04 |
[Python] 프로그래머스, 피로도 Lv.2 (feat.permutations, 파이썬) (58) | 2023.03.30 |