2023. 10. 11. 21:04, 알고리즘/프로그래머스
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++; 을 해주면 되는 것이다.
아주아주 간결하게 해결한 함수이다.
오히려 내가 처음에 생각한 방향으로, 나누기 연산을 사용하면서 더욱 복잡해졌다.
다음에는 이런 식으로 한번 생각해보도록 하자. 덧셈뺄셈으로 더욱 단순화시키자.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
Lv 0. A로 B 만들기 (0) | 2023.10.11 |
---|---|
Lv 0. 이진수 더하기. *다시 풀어보기* (0) | 2023.10.11 |
Lv 0. 로그인 성공? (0) | 2023.10.11 |
Lv 0. 옹알이 (1). *다시 풀어보기* (0) | 2023.10.11 |
Lv 0. 등수 매기기 *다시 풀어보기* (0) | 2023.10.10 |
Comments, Trackbacks