Algorithm

2/23기록 - 백준 4796

Hyeon Lee 2022. 2. 23. 12:53
728x90

코로나 시국으로 인해 캠핑도 애매해진 상황에 제목이 캠핑이라는 문제가 하나 있길래 풀어보았다.

 

 

백준 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