내 코드
def solution(brown, yellow):
answer = []
s = brown+yellow
l = []
for i in range(3,s+1):
if s%i==0:
if s//i < i:
break
l.append([s//i,i])
for i in l:
if (i[0]-2)*(i[1]-2) == yellow:
return i
return answer
ㅠ 이건 코딩 능력보다 창의력 능력같다 ㅠ.ㅠ 풀긴 풀었는데 뭔가 뺑뺑 돌아가는 느낌?? 아이디어만 있으면 코딩은 어렵지 않음,,
갈색과 노란색의 합을 구해 s라고 한다. 즉, 전체 타일의 수가 s이다.
s를 만들 수 있는 가로, 세로를 구해줄것이다. a*b=s가 될때의 a,b를 구하면된다!
for 문을 3부터 끝까지 돌려서 s가 i로 나누어 떨어지는 수를 구한다. 가로의 길이가 더 길어야하니 s//i가 i보다 작아지면 break를 한다. 이렇게 찾은 리스트를 l에 넣는다.
갈색이 카펫의 테두리에만 있다고 했으므로 전체 타일의 가로,세로 길이에 -2씩 한것이 노란색의 가로, 세로 길이이다. 즉, l에서 -2를 하고 곱한 크기가 처음에 주어진 yellow다.
음 근데 다른사람들꺼 보니까 저렇게 for문 두개 안하고 if 문 두개해서 풀어도됐었당 ㅋㅎ
다른사람 코드
def solution(brown, red):
for i in range(1, int(red**(1/2))+1):
if red % i == 0:
if 2*(i + red//i) == brown-4:
return [red//i+2, i+2]
엥 ㅠ 완전 짧다.. 문제가 중간에 바껴서 노란색이 빨간색으로 적혀있다.
i는 red의 가로길이이다. 2*( i(가로길이) + red//i(세로길이) ) = red의 둘레 = 갈색 - 4
red의 가로세로에 +2씩해서 return 해준다.
'코딩테스트 > Python' 카테고리의 다른 글
[프로그래머스] 소수 찾기 (0) | 2021.09.04 |
---|---|
[프로그래머스] 가장 큰 수 (0) | 2021.09.04 |
[프로그래머스] 모의고사 (0) | 2021.09.03 |
[프로그래머스] 위클리 챌린지 2주차 상호평가 작성중 (0) | 2021.08.24 |
[프로그래머스] H-Index 작성중 (0) | 2021.08.19 |