level2_카펫

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