하루에 1문제씩 풀기.
한 문제당 30분씩은 고민하기.
왜 그렇게 풀었는지 공유하기.
하루라도 놓친다면 벌금은 1,000원
[3코1파] 2023.01.04~ (35일차)
[4코1파] 2023.01.13~ (26일차)
2023.02.07 [35일차]
프로그래머스 LV2
카펫
https://school.programmers.co.kr/learn/courses/30/lessons/42842
문제 설명
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
제한사항
갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.
입출력 예
※ 공지 - 2020년 2월 3일 테스트케이스가 추가되었습니다.
※ 공지 - 2020년 5월 11일 웹접근성을 고려하여 빨간색을 노란색으로 수정하였습니다.
문제 풀이 방법
일단, yellow랑 brown 사이의 규칙을 찾기 위해서 두뇌풀가동 (x) 손풀가동(x)
찾을 때 까지 냅다그려봄 (그래봤자 6개 그리고 힘들어)
1시간 고민했지만 깨달은 것
하지만 나는 규칙을 찾지 못했다..
나는 순식간에 감이 왔다.. 이건 내가 답을 보지 않고서야.. 영영 못푸는 뭔가 있을 거라고 그래서 찾아봄
내 코드
def solution(brown, yellow):
answer = []
yellow_w, yellow_h = 0,0
for i in range(1, yellow+1):
if yellow%i==0:
yellow_w = int(yellow/i)
yellow_h = i
if (yellow_w*2) + (yellow_h*2) +4 == brown:
answer.append(yellow_w+2)
answer.append(yellow_h+2)
break
sorted(answer, reverse=True)
return answer
증빙
다른 사람 풀이
yellow의 가로길이2 + yellow의 세로길이2 +4 = brown 개수 알아낸 사람 ㄳ
여담
출제자의 의도 : 완전탐색
내가 시도한거 :