티스토리 뷰
https://programmers.co.kr/learn/courses/30/lessons/42842
코딩테스트 연습 - 카펫
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과
programmers.co.kr
<풀이>
- 노란색 사각형의 경우의 수를 모두 고려하고
- 그 노란 사각형을 갈색 격자로 한 층씩 덮어가는 식으로 구현하였다.
- 남은 갈색 격자의 수가 정확히 0이라면 answer로 반영한다.
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 32 33 34 35 | def solution(brown, yellow): answer = [] for y_y in range(1, yellow + 1): # 주어진 격자가 사각형이 되어야하기 때문에 세로 길이로 나눠서 나머지가 0이어야 한다 if not yellow % y_y: # 가로 길이를 구하고 y_x = yellow // y_y # 세로가 더 길면 무시 if y_y > y_x: continue # 현재 카펫 격자의 수 num_carpet = yellow # 남은 갈색 격자의 수 remain_brown = brown # 현재 카펫의 가로 길이 cur_x = y_x # 현재 카펫의 세로 길이 cur_y = y_y # 갈색 격자를 다 소진할 때 까지 while remain_brown > 0: # 갈색으로 덮을 때마다 가로, 세로 길이가 2씩 늘어난다. cur_x += 2 cur_y += 2 # 직사각형을 키울 때마다 필요한 갈색 격자의 수 added_brown = (cur_x) * (cur_y) - num_carpet remain_brown -= added_brown num_carpet += added_brown # 남은 갈색 격자의 수가 정확히 0이라면 answer에 반영하고 break한다. if remain_brown == 0: answer.append(cur_x) answer.append(cur_y) break return answer | cs |
반응형
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 가장 큰 수 (0) | 2020.12.18 |
---|---|
[프로그래머스] K번째 수 (0) | 2020.12.18 |
[프로그래머스] 소수 찾기 (0) | 2020.12.16 |
[프로그래머스] 모의고사 (0) | 2020.12.16 |
[프로그래머스] 단어 변환 (0) | 2020.12.14 |
댓글