-
2/23기록 - 백준 4796Algorithm 2022. 2. 23. 12:53728x90
코로나 시국으로 인해 캠핑도 애매해진 상황에 제목이 캠핑이라는 문제가 하나 있길래 풀어보았다.
백준 4796번 캠핑 문제이다. 처음에 문제가 무슨 소리를 하는 건지 잘 이해를 하지 못했다. 그래서 입력 예시를 가지고 하나하나 분석해 보았다.
L=5, P=8, V=20 예시를 가지고 문제를 분석해 보자.
20일짜리 휴가를 8일로 나누면 총 2번하고 4일이 나오게 된다. 그렇다면 한번에 5일씩 캠핑을 갈 수 있으니
2번*5일 + 4일 = 14일이 된다.
이것을 식의 형태로 나타내 보면, (V/P) * L + V%P 로 나타낼 수 있다. 여기서 주의할 점이 한가지 있는데, 뒤에 남는 4일이 한 번에 갈 수 있는 일수인 5일 보다 작은 경우와 큰 경우로 나뉠 수 있다.
만약 V=22라면 뒤에 남는 일수는 6일이 되고 5일을 한 번 더 캠핑 갈 수 있는 기간이 된다. 그러므로 뒤에 남는 일수를
L 일수와 비교하여 최솟값을 출력시켜주어야 한다.
(V/P) * L + Math.min((V%P), L) 이렇게 최종값을 출력시켜 줄 수 있을 것이다.
알고리즘 생각
1. while(true)의 형태로 반복문 형성
2. if(L==0)이면 바로 종료
3. 최종값의 케이스 수를 표현해야 하므로 count++
4. 결과값을 알고리즘에서 구한식으로 표현
5. 반복문을 한꺼번에 출력해야 하므로 StringBuilder에 담아서 append 시켜서 출력
이렇게 해결할 수 있었다. 처음 문제를 풀 때 result를 break if문 위에 써주었더니, P가 0이 될 수 있어 ArithmeticError가 계속 발생했다. 그것을 사전에 차단해 버리기 위해 L==0에서 break해주는 방식을 먼저 써주었더니 깔끔하게 해결될 수 있었다.
2/22 기록 끝!!!!!!!!
728x90'Algorithm' 카테고리의 다른 글
2/28 기록 - 백준 9237 (0) 2022.02.28 2/24기록 - 백준 7785 (0) 2022.02.24 2/22기록 - 백준 1476 (0) 2022.02.22 2/21기록 - 백준 1969 (0) 2022.02.21 2/18기록 - 백준 1316 (0) 2022.02.18