[프로그래머스] 푸드 파이트 대회

gcoco·2023년 5월 12일
0

안녕하세요! 친구와 곧 GYM에 다녀올 예정인 GCOCO입니다!


잡설 한 COOKIE🍪

안녕하세요 여러분! 여러분은 함께 운동하는 친구가 있으신가요?
이 운동은 고독한 자신과의 싸움일 수도 있지만, 함께하는 친구가 있다면 좀 더 즐겁고, 힘을 내서 운동이 가능하다는걸
알고계신가요?!!!

저도 항상 느끼는 것이지만, 운동 중간 쉬는시간에 친구와 서로 피드백 해주고 할 수 있다고 힘내자고 피드백 하는것은 확실히 긍정적인 영향을 주더라구요. 가장 좋은점은 지루하지 않다는 것입니다.

역시 사람은 사회적 동물! 혼자서도 하는것도 좋지만, 좋은 친구분들과 함께 교류하며 더욱 성장해 보자구요!

자, 힘차게 문제로 가봅시다!


문제링크:

옛풀이

#include <string>
#include <vector>

using namespace std;

string solution(vector<int> food) {
    string answer = "0";
    int i = food.size() - 1;
    while (i > 0) {
        if (food[i] == 1) {
            i--;
            continue;
        }
        else {
            if (food[i] % 2 == 1)
                food[i]--;
            while (food[i] > 0) {
                if (food[i] % 2 == 0) {
                    answer = to_string(i) + answer;
                }
                else {
                    answer = answer + to_string(i);
                }
                food[i]--;
            }
        }
        i--;
    }
    return answer;
 }

코드의 맥락은 다음과 같습니다.

  1. 마지막 음식부터 출발!
  2. 만약 음식이 1개라면 추가하지 않고 넘어가기
  3. 음식이 2개 이상이고, 홀수인지 짝수인지 판별 후 홀수라면 1개 빼주기.
  4. 앞 뒤를 번갈아가며 answer에 추가해주기

이정도가 되겠네요!

새롭게 짠 코드는 알아보기 더 쉽습니다!


새풀이

#include <string>
#include <vector>

using namespace std;

string solution(vector<int> food) {
    string answer = "0";
    for(int i=food.size()-1;i>=1;i--){
        int num = food[i]-food[i]%2;
        while(num>0){
            num-=2;
            answer = to_string(i) + answer + to_string(i);
        }
        
    }
    return answer;
}

step은 다음과 같습니다.

  1. 마지막 음식에서부터 출발!
  2. num에 2의 배수에 맞게 음식 담아주기
  3. while문을 돌며 answer의 앞뒤로 붙여주기

훨씬 가독성이 좋은것같습니다! 또 성장했구나 GCOCO! 훌륭하다!


작은 도움이 되었길 바라며, 포스팅 마치겠습니다!

profile
그코코 입니다.

0개의 댓글