ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2/23기록 - 백준 4796
    Algorithm 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

    '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
Designed by Tistory.