Lv 0. 치킨 쿠폰. *다시 풀어보기*

https://school.programmers.co.kr/learn/courses/30/lessons/120884

 

#include <string>
#include <vector>

using namespace std;

int solution(int chicken) {
    int answer = 0;
    int cp=chicken;
    int service=0;
    
    while(cp>=10){
        service=cp/10;
        answer+=service;
        cp=service+cp%10;
    }
    return answer;
}

 

단순해보이는 문제였는데, 생각하는게 굉장히 헷갈려서 오래걸렸다. 매번 시행마다 받는 service 치킨의 갯수와, answer에서 요구하는 총 service 치킨의 갯수를 구분지어서 생각해야 옳바른 수식을 작성할 수 있는데 그 부분에서 굉장히 헷갈렸다. 

 

다른 사람의 풀이를 보니까, 아주아주 간단하게 해결하는 형태가 있어서 첨부해보겠다.

이런식으로 해결하면 더욱 이해하기 쉬울것이다. 

#include <string>
#include <vector>

using namespace std;

int solution(int chicken) {
    int ans=0;
    while(chicken>=10){
        chicken-=10;
        ans++;
        chicken++;
    }
    return ans;
}

위의 경우 나누기를 통해서 몫이나 나머지 연산자를 통해서 나머지를 계산하는것이 아니라 10개의 치킨을 먹었다는 형태의 표현을 10개의 치킨을 빼는 식으로 표현한 방법이고, 10개를 먹어 없앨때마다 서비스 치킨을 하나씩 더 받고, 그렇게 서비스 치킨 하나를 더 받을때마다 치킨을 한마리씩 더 받기 때문에 ans++; chicken++; 을 해주면 되는 것이다. 

아주아주 간결하게 해결한 함수이다. 

오히려 내가 처음에 생각한 방향으로, 나누기 연산을 사용하면서 더욱 복잡해졌다. 

다음에는 이런 식으로 한번 생각해보도록 하자. 덧셈뺄셈으로 더욱 단순화시키자. 

 

 

  Comments,     Trackbacks