2024. 3. 7. 10:48ㆍ파이썬_알고리즘(코딩테스트)/level2



#1 내가 제출한 코드(실패)
def solution(brown, yellow):
total = brown + yellow
answer = []
for i in range(1, total+1):
if total % i == 0:
answer.append(i)
list_len = len(answer)
x = list_len // 2
# 홀수이면
if list_len % 2 == 1:
return [answer[x],answer[x]]
# 짝수이면
else:
return [answer[x], answer[x-1]]
print(answer)

코드는 약수로 접근을 하면서 짰던거 같은데
코드 실행했었을때는 통과를 했었는데
채점한 결과는 ㅜㅜ 테스트에 통과하질 못했다.

실패가 ㅜㅜ 떠서 다시 차근차근 접근하기로 했다.
#2 내가 제출한 코드
def solution(brown, yellow):
total = brown + yellow
for b in range(1, total+1):
if (total / b) % 1 == 0:
a = total / b
if a >= b:
if 2*a + 2*b == brown +4:
return [a,b]


- if (total / b) % 1 == 0: 조건은 정수인지 아닌지 고려하기위해서 설정하였고
- total / b 연산을 통해서 가로 길이(a)를 구한다.
- 카펫의 가로 길이가 세로 길이보다 길거나 같아야 하므로 a >= b라는 조건을 달아주었고
- 카펫의 테두리를 구성하는 갈색 격자 수는 2 * a + 2 * b == brown + 4 조건을 만족하게 되면
return으로 [a,b]를 반환하게 짰다.
다른 사람이 제출한 코드
def solution(brown, yellow):
for i in range(1, int(yellow**(1/2))+1):
if yellow % i == 0:
if 2*(yellow//i + i) == brown - 4:
return [yellow//i+2, i+2]
순간.... 이게... 뭐지... 땀이 났다...............ㅠㅠ

당황하지말고!! 차근차근 접..접근해보자!!! ㅎㅎ
brown은 가로, red는 세로이고

1. x * y = yellow
-> y = yellow // x
2. 2 * ( x + y) = brown - 4
-> 1번식을 2번식에 대입해서
-> 2 * ((yellow // x) + y) = brown - 4
-> if 2*((yellow // i) + i) == brown - 4: 위에 식이 이 식하고 동일하다.
3.그림에서 보면 가로는 x + 2이고, 세로는 y +2이다.
-> 가로 x부분에 yellow // x를 대입(1번참고)
-> return [ 가로, 세로] --> return [ yellow //i+2, i+2]
풀고나서의.. 생각..
나 정말 수학책 펴야하는거..같은데...?!!!


'파이썬_알고리즘(코딩테스트) > level2' 카테고리의 다른 글
| level2_가장 가까운 같은 글자 (0) | 2024.03.13 |
|---|---|
| level2_짝지어 제거하기 (0) | 2024.03.05 |
| level2_피보나치 수 (0) | 2024.02.29 |
| level2_다음 큰 숫자 (0) | 2024.02.27 |
| level2_숫자의 표현 (0) | 2024.02.25 |