Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

프로젝트 모찌

백준코딩 [1712] 손익분기점 (Kotlin) 본문

백준코딩

백준코딩 [1712] 손익분기점 (Kotlin)

Project Mochi 2020. 8. 2. 00:50

백준코딩 1712번 손익분기점 문제는 말 그대로 비용과 가격이 주어졌을때 손익분기점에 도달하는 시점의 판매량을 구하는 문제였다. 

 

처음에는 FixedCost, VariableCost, productPrice 라는 3개의 변수의 각각의 값을 담아 놓고 while문을 통해 손익분기점에 도달할 때까지 VariableCost와 productPrice를 더해가며 비교하는 방식으로 접근하려고 헀다. 

 

그러나 이렇게 코드를 구성하였더니 잘못된 결과를 출력하거나 런타임에러, 나아가 시간초과까지 나왔다.

 

그래서 접근방식을 약간 변경하였다. 

 

계속 variableCost와 productPrice를 더해가는 대신 고정비용을 이윤으로 나누어버리기로 했다. 제품의 가격이 생산비용보다 크다면 항상 이윤이 발생할 것이고 그 이윤이 고정비용을 초과한다면 그때가 바로 손익분기점 (Break-even point)을 지나는 시점으로 보고 접근하였다.

 

나름 꼼꼼히 계산을 해보고 구성하였다고 생각했지만 결과는 런타임 에러.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
fun main(arg : Array<String>) {
    var usrBufferedReader = BufferedReader(InputStreamReader(System.`in`))
    var usrStringTokenizer = StringTokenizer(usrBufferedReader.readLine())
 
    var fixedCost = usrStringTokenizer.nextToken().toInt()
    var variableCost = usrStringTokenizer.nextToken().toInt()
    var productPrice = usrStringTokenizer.nextToken().toInt()
    var productSold = 1;
 
    if (variableCost > productPrice) {
        productSold = -1
    } else {
        productSold += fixedCost / (productPrice - variableCost)
    }
 
    println(productSold)
}
cs

사실 런타임에러가 발생하는 원인조차 모르고 있었기에 바로 찾아보았다.

 

런타임에러가 발생하는 경우는 첫째, 배열에 할당된 크기를 넘어서 접근했을 때, 둘째, 전역배열의 크기가 메모리 제한을 초과할때, 셋째, 지역 배열의 크기가 스텍 크기제한을 넘어갈때, 넷째, 0으로 나눌때.

 

여기까지 읽고 바로 눈치챘다. 만약 입력값에서 variableCost와 productPrice의 값이 같을경우 이윤은 발생하지않으며 위에 있는 코드대로 갈경우, Line10 에서 걸러지지 않고 Line 12로 가서 0으로 fixedCost를 나누어 버리게 된다.

 

그래서 이 경우또한 if문에서 걸러질 수 있게 조건을 바로 바꾸어 주었다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
fun main(arg : Array<String>) {
    var usrBufferedReader = BufferedReader(InputStreamReader(System.`in`))
    var usrStringTokenizer = StringTokenizer(usrBufferedReader.readLine())
 
    var fixedCost = usrStringTokenizer.nextToken().toInt()
    var variableCost = usrStringTokenizer.nextToken().toInt()
    var productPrice = usrStringTokenizer.nextToken().toInt()
    var productSold = 1;
 
    if (variableCost >= productPrice) {
        productSold = -1
    } else {
        productSold += fixedCost / (productPrice - variableCost)
    }
 
    println(productSold)
}
cs

 

Comments