쌓고 쌓다

[프로그래머스] 푸드 파이트 대회 C++ 풀이 및 해설 본문

알고리즘/프로그래머스

[프로그래머스] 푸드 파이트 대회 C++ 풀이 및 해설

승민아 2023. 10. 21. 21:47

https://school.programmers.co.kr/learn/courses/30/lessons/134240?language=cpp

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이 방법

  1. 먼저 생수를 가운데 무조건 배치를 하므로 answer에 "0"을 추가해준다.
  2. 이제 현재 answer의 앞뒤로 음식들을 배치할 것이다.
  3. 목표하는 정답의 안쪽부터 음식을 채워 나갈 것이므로 음식 배열을 도는 반복문은 배열 끝부터 돈다.
  4. 이때 음식이 /2로 나눠지는만큼 answer의 앞뒤에 음식의 인덱스 i를 붙인다. (왜냐 양쪽 선수 앞뒤로 서로 하나씩 먹을려면 2개가 필요한데. 이 2개의 쌍이 몇개나 나올지를 /2로 계산하여 그 크기만큼 음식 인덱스를 answer에 붙이는것이다.)

 

전체 코드

#include <string>
#include <vector>
#include <iostream>
using namespace std;

string solution(vector<int> food) {
    string answer = "";
    answer+="0";
    for(int i=food.size()-1; i>=1; i--) {
        for(int j=0; j<food[i]/2; j++) { // 앞뒤로 2개의 음식을 붙일 수 있는만큼 붙임
            answer.insert(0, to_string(i));
            answer.insert(answer.length(), to_string(i));
        }
    }
    return answer;
}
Comments