-
1/7 기록 - 백준 1712번Algorithm 2022. 1. 7. 09:35728x90
어제에 이어 가벼운 알고리즘 문제풀이를 해 보기 위해 백준을 켰다. 낮은 단계부터 차근히 해보자는 마음이었기 때문에 오늘 한 번 더 브론즈4 티어로 가서 문제를 골라보았다. 생각보다 정답률이 낮은 문제가 있어서 괜찮겠다 싶어서 문제를 도전해 보았다.
백준 1712번 손익분기점 문제이다. 처음에 손익분기점에 대한 내용을 잘 모르니 문제를 읽으면서 최대한 이해를 해 보려 했다. 손익분기점은 총 수입이 총 비용보다 많아져 이익이 발생하는 지점을 말한다고 한다.
그래서 어쩌라는거지.... 생각보다 꽤 고민한것 같은데 예시1을 통해 적용해 보자.
예시1
고정 비용 : 1000
가변 비용 : 70
판매 비용 : 170
총 수입 > 총 비용이 되려면
1개 팔았을 때, 170 < 1000+70
2개 팔았을 때, 170*2 < 1000+70*2
3개 팔았을 때, 170*3 < 1000+70*3
서서히 규칙이 보인다.
이렇게 10개 팔면, 170*10 = 1700 = 1000+70*10=1700
11개 팔았을 때, 170*11=1870 > 1000+70*11=1770
11개 팔았을 때가 손익분기점이 되어 출력되게 된다.
그렇다면 판 개수를 n으로 두고 점화식을 세워 볼 수 있다.
판매 비용(C) * n = 고정 비용(A) + 가변 비용(B) * n 이 손익분기점이 되기 바로 직전 값이다.
n = A/(C-B)가 된다.
이제 그럼 예시 2를 통해 손익분기점이 발생할 수 없는 경우를 살펴 보자.
예시2
고정 비용 : 3
가변 비용 : 2
판매 비용 : 1
1개 팔았을 때, 1<3+2
2개 팔았을 때, 1*2 < 3+2*2
3개 팔았을 때, 1*3 < 3+2*3
좌우의 간격이 좁혀져야 하는데 점점 벌어지는 것이 보인다. 판매비용보다 변하는 가변비용이 크기 때문에 영원히 이득은 발생하지 않게 되는 것이다. 그럼 C<B가 될 경우 죽어도 손익 분기점이 생기지 않는 것을 파악했다.
알고리즘은 이 정도 생각을 했고, 코딩을 해보자.
BufferedReader와 StringTokenizer를 사용해서 크기3의 배열에서 입력을 받았다. 해당 인덱스를 값에 모두 넣어주고 손익분기점이 발생하는 경우와 그렇지 않은 경우를 if else 구문을 사용해서 풀어주었다.
여기서 처음에 문제를 틀렸던 것이 n = a/(c-b)를 해주고 바로 백준에 돌렸더니 틀렸다길래 뭔가 싶어서 한참 봤다. 위에 적은듯이 꼼꼼히 적어보지 않고 규칙을 보자마자 점화식을 세우고 바로 문제를 풀었더니 이런일이 발생했다.
내가 구한 n = a/(c-b) 이건 손익 분기점 바로 직전의 값이었던 것.... 손익분기점이 발생하는 개수를 n으로 했기 때문에 정수가 되어야 하고 그렇다면 1을 더해주어야 한다. 그래서 n = (a/(c-b)) + 1을 해주어야 답이 제대로 나온다.
답 맞췄다. 생각보다 시간이 좀 걸렸지만 그래도 푼게 어디야... ㅋㅋ
다음번엔 티어를 하나만 올려서 브론즈 3으로 도전해 봐야겠다.
728x90'Algorithm' 카테고리의 다른 글
1/12기록 - 프로그래머스 문제풀이 #2 (0) 2022.01.12 1/12기록 - 프로그래머스 문제풀이 #1 (0) 2022.01.12 1/11기록 - 백준 2846 (0) 2022.01.11 1/10기록 - 백준 1009 (0) 2022.01.10 1/6 기록 - 백준 1297 (0) 2022.01.06