Baekjoon - 기본수학

do yeon kim·2022년 6월 27일
0

1712번 손익분기점

방법1
a,b,c = list(map(int,input().split()))

if b >= c:
    print(-1)
else:
    i = a // (c-b)
    print(i +1)



방법2
a,b,c = list(map(int,input().split()))

# a는 고정비용
# b는 제조비용
# c는 제품가격

# a + (b * 제품의 수) < c * 제품의 수

i = 1       
while True:
    if b >= c :
        print(-1)
        break
    else:
        if  a + (b * i) < c * i:
            print(i)
            break
        else:
            i = i + 1

방법1의 경우 손익분기점을 구하는 방정식을 이용한 경우이다.
손익분기점 매출량 = 고정비 / (매출액 - 변동비)
손익분기점의 매출량은 손익분기점이 된 경우의 매출량 이므로 문제의 해결을 위해서 +1을 해주어야 했다.

방법2의 경우 숫자를 1씩 증가해 가면서 알맞은 수를 구하는 방식이다.
방법2의 경우 해를 구해도 시간초가 오류가 발생했다.

프로그램은 문제해결을 위해서 코드를 짜는 것이다. 프로그램의 실행으로 문제를 해결하는 것도 중요하다. 하지만 문제를 풀기 위해 어느정도의 메모리와 시간을 소비하는지도 고려해가며 코드를 짜야 될 것이다. 그렇지 않으면 방법1과 같은 시간초과 오류가 발생 할 수도 있다.

2292번 벌집

방법1
search = int(input())
cnt = 1
six_count = 6
count = 1
while search > cnt:
    count += 1
    cnt += six_count
    six_count += 6
print(count)



방법2
search = int(input())
count = 1
k = 2
j = 8

if search == 1:
    print(count)

else:
    while True:
        if search in range(k, j):
            print(count+1)
            break
        else:
            count = count + 1
            k = k+(6*count-1)
            j = j+(6*(count))

방법1

지나가야 하는 방의 갯수 1개 => 1
지나가야 하는 방의 갯수 2개 => 2-7
지나가야 하는 방의 갯수 3개 => 8-19
지나가야 하는 방의 갯수 4개 => 20-37
지나가야 하는 방의 갯수 5개 => 38-61
.
.
.

방을 1개 거쳐야 하는 숫자는 1개
방을 2개 거쳐야 하는 숫자는 6개
방을 3개 거쳐야 하는 숫자는 12개
방을 4개 거쳐야 하는 숫자는 18개
.
.
.

6의 배수씩 범위가 증가한다는 것을 알 수 있다.
6
12
18
24
.
.
.

방을 거쳐야 하는 숫자를 기준으로 생각
그래서 six_count를 주어서 cnt의 범위를 계산하는데 사용했다.

six_count는 한번 끝날때 마다 6의 배수만큼 증가하므로
six_count = six_count + 6을 해주었다.

cnt는 방을 거쳐야 하는 숫자
six_count는 배수를 위해서 설정

search > 1 1개
search > 7 2개
search > 19 3개
search > 37 4개
search > 61 5개
.
.
.


방법2
시간 초과 오류 발생
visual studio code에서도 오류 발생
벌집이 생성되는 순서대로 for문으로 벌집을 생성하고 in을 사용해서 안에 들어 있다면 결과를 출력하는 코드를 구현했으나 시간초과오류가 발생했다.

0개의 댓글