강의로 돌아가기
고동건

제 알고리즘이 맞는지 확인해주실분 있나요? python

처음 값을 w*h로 초기화 한이후에 대각선에 겹친 갯수를 빼는 코드입니다.
사용하지 못하는 정사각형의 갯수를 구하는 식은 w,h중에 큰값을 작은값으로 나누었을때 1)몫이 정수인 경우와 2)몫이 실수인 경우 두개로 나누어서 구했습니다.

정수인 경우는 몫에 작은 값(min(w,h))을 곱해서 구합니다.
예를 들면 a=b=10인 정사각형인경우 몫이 1이 나오고 min=10이므로, 사용하지 못하는 사각형의 갯수는 1*10=10입니다.
따라서 return은 100-10=90 이 됩니다.

실수인 경우에는 몫을 올림을 하여 작은값을 곱합니다.
몫을 올림하는 이유는 대각선이 지나가면서 걸치는 변은 다 못쓰게 때문에 올림을 사용했습니다.
예를 들면 a=8, b=12, 인 직사각형인 경우 몫이 1.5가 나옵니다. 몫을 올림하면 2이고 min=8이므로, 사용하지 못하는 사각형의 갯수는 2*8=16입니다
따라서 return은 96-16=80 이 됩니다.

두개의 경우에 대해서 값을 넣으면 대부분 맞는거 같은데 제출해보면 50점 나오네요.
제가 놓친부분이 무엇인지 알려주실분 있으신가요?

작성중인 코드―solution.py
1
2
3
4
5
6
7
8
9
10
11
12
def solution(w,h): 
    answer = w*h 
    max_v,min_v = max(w,h),min(w,h) 

    flt_v=(max_v/min_v) 
    int_v=(max_v//min_v) 
    if flt_v==int_v:
        answer-=int_v*min_v 
    else: 
        answer-=(int_v+1)*min_v 

    return answer
  • goodboy-kr

    가로가 3 세로가 5인 사각형은 기울기가 1.6이지만 못 두번째 칸에서 못쓰는 사각형이 2개가 아니라 3개입니다.(직선이 1.6~3.2까지 걸쳐있기 때문에) 가로3 세로 5를 넣으면 8이 나와야하는데 9가 나오시겠네요

    goodboy-kr―2020.03.30 17:40
0 개의 답변
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.