https://school.programmers.co.kr/learn/courses/30/lessons/134240
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
#include <string>
#include <vector>
using namespace std;
string solution(vector<int> food) {
string answer = "";
vector<int>a;
vector<int>b;
for(int i=1;i<food.size();i++)
{
if(food[i]>1)
{
a.push_back(food[i]/2);
b.push_back(i);
}
}
for(int i=0;i<a.size();i++)
{
for(int j=0;j<a[i];j++)
{
answer+=(b[i])+'0';
}
}
answer+='0';
for(int i=answer.length()-2;i>=0;i--)
answer+=answer[i];
return answer;
}
주어진 food 배열은 0번이 물을 뜻하며 항상 1, 그 다음부터 음식의 개수를 뜻한다.
food[1] = 3 이라면 1번음식이 3개라는 뜻이다.
그렇다면 각 선수가 1개씩 먹을수 있다.
그래서 answer에 답을 찾기위한 사전 준비로 벡터 a,b를 준비한다.
값이 1이상이어야 두명이 먹을수있기 때문에 1이상일 경우 벡터 a에 한 명이 먹을 개수를 b에 몇번 음식인지를 저장한다.
a의 크기만큼 반복문을 돌리며 한 선수의 음식순서를 저장한다.
a크기는 한 선수가 몇개의 종류의 음식을 먹을지를 나타낸다. 또 a[i]는 그 음식이 몇개인지를 뜻한다.
따라서 a[i]번만큼 다시 반복문을 돌며 answer에 문자를 추가한다. 이 때, 저장은 몇번 음식인지를 나타내야하기 때문에
b벡터의 값을 저장한다.
이렇게 한 선수에 대한 음식을 저장하면 그 후, 물을 뜻하는 0을 저장하고
음식을 반대 순서로 다시 저장한다.
'알고리즘 > 프로그래머스 1단계' 카테고리의 다른 글
프로그래머스 - 비밀지도 - C++ (0) | 2024.07.16 |
---|---|
프로그래머스 - 문자열 내 마음대로 정렬하기 - C++ (1) | 2024.07.16 |
프로그래머스 - 숫자 문자열과 영단어 - C++ (0) | 2024.07.16 |
프로그래머스 - 두 개 뽑아서 더하기 - C++ (0) | 2024.07.16 |
프로그래머스 - 가장 가까운 글자 - C++ (0) | 2024.07.11 |