문제
https://school.programmers.co.kr/learn/courses/30/lessons/42842
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
입출력

해설
노란색과 갈색으로 이뤄진 카펫이 있을 때 카펫의 가로와 세로를 구하는 문제이다.
갈색은 노란색에 둘러싸여있는 1줄 외곽부분이고 안에 부분들은 전부 노란색으로 채워져있다.
갈색이 입력으로 주어지는 값이 크지 않으므로 갈색을 기준으로 반복문을 돌면서 해당 개수가 맞을 때는 찾아주었다.
갈색을 X라고 하고 노란색을 Y라고 한다면 다음과 같은 그림이 나올 수 있다.
XXXXX
XYYYX
XXXXX
갈색이 둘러싸여있긴 하지만 가로의 길이를 정해준다면 세로의 길이는 자동으로 정해질 수 밖에 없고, 갈색의 총 범위가 크지 않기에 반복문으로도 충분히 알 수 있다는 것을 알 수 있다. 그리고 다음과 같은 수식을 구할 수 있다.
세로의 길이 = (갈색블럭 갯수 - (2 * 가로의 길이)) / 2 + 2
정답코드
더보기
'''
'25. 08. 10
1. 노란색과 갈색으로 이뤄진 카펫이 있을 때 해당 카펫의 가로 세로 길이를 구하여라
2. 가로의 길이는 세로와 같거나 세로보다 길다
세로 <= 가로
세로 : x
가로 : y
brown * yellow <= 10^10
테두리 한 줄만 갈색으로 돼있다.
brown을 기준으로 가로의 갯수를 지정하면 세로는 정해질 수 밖에 없다.
그럼 갯수가 나오게 된다.
brown_x = 1 .. x
brown_y =
(전체 - (가로 * 2))
xxxxx
x x
x x
xxxxx
'''
def solution(brown, yellow):
answer = []
for brown_x in range(1, brown + 1):
if (brown - (brown_x * 2)) % 2:continue
brown_y = (brown - (brown_x * 2)) // 2 + 2
yellow_x = brown_x - 2
yellow_y = brown_y - 2
if yellow_x <= 0 or yellow_y <= 0:continue
if yellow_x * yellow_y == yellow and yellow_x>=yellow_y:
answer = [brown_x, brown_y]
break
return answer
깃허브 : https://buly.kr/ChpJcFF
'코딩테스트 > programmers' 카테고리의 다른 글
| 프로그래머스 / greedy / 구명보트 (0) | 2025.08.15 |
|---|---|
| 프로그래머스 / 정수론 / 점프와 순간 이동 (0) | 2025.08.12 |
| 프로그래머스 / 스택 / 짝지어 제거하기 (0) | 2025.08.09 |
| 프로그래머스 / 투포인터 / 숫자의 표현 (0) | 2025.08.07 |
| 프로그래머스 / 구현 / 이진 변환 반복하기 (0) | 2025.08.06 |