250x250
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
Tags
- 코딩테스트
- 김영한
- 프록시
- 테스트코드
- 스프링컨테이너
- html form
- fielderror
- DI
- http 메시지 컨버터
- 코드트리
- 예외와 트랜잭션 커밋
- 티스토리챌린지
- 코드트리조별과제
- HttpServletResponse
- 참조변수
- 백준
- 의존관계
- 오버라이딩
- 다익스트라
- @configuration
- 추상클래스
- 스프링
- java
- 오블완
- 프로그래머스
- 인터페이스
- 서블릿
- equals()
- objecterror
- 싱글톤
Archives
- Today
- Total
minOS
프로그래머스 카펫 본문
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/42842
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
처음에 해당 문제를 보고 입출력 예시를 보았습니다.

가장 먼저 떠오른 생각은 brown과 yellow의 합을 기준으로 그 약수들을 구하고,
그 중에서 (가로, 세로) 쌍의 곱이 brown + yellow가 되면서 조건을 만족하는 가장 작은 가로 값을 찾는 것이 답이 아닐까 하는 것이었습니다.
예를 들어, brown이 10이고 yellow가 2라면 합은 12이고,
12의 약수 쌍은 (1,12), (2,6), (3,4)와 같습니다.
이런 가정하에 문제를 접근했습니다.
def solution(brown, yellow):
temp = brown + yellow
ans = 1e9
result = []
for i in range(1,brown+1) :
if temp % i == 0 :
row = i
col = temp //i
else:
continue
if ans > row + col:
ans = row + col
result = [row,col]
result.sort(reverse=True)
return result
이러면

반례를 찾았는데
solution( 26, 10) # [12, 3]
기대값과 다르게 [6,6]이 나옵니다.
그래서 그림을 그렸는데 ..

해당 수식으로 일반화 할 수 있었습니다 !
def solution(brown, yellow):
ans =[]
for x in range(1,yellow+1):
if yellow % x == 0:
y = yellow//x
if x*y + 2*x + 2*y + 4 == yellow+ brown:
ans = [y+2, x+2]
break
return ans

728x90
'Problem Solving > 프로그래머스' 카테고리의 다른 글
| 프로그래머스 단속카메라 (1) | 2025.07.25 |
|---|---|
| 프로그래머스 거리두기 확인하기 (1) | 2025.07.11 |
| 프로그래머스 야근 지수 (0) | 2025.07.07 |
| 프로그래머스 가장 많이 받은 선물 (0) | 2025.07.05 |
| 프로그래머스 점프와 순간 이동 (0) | 2025.07.05 |