1) 문제
https://school.programmers.co.kr/learn/courses/30/lessons/134240
예를 들어, 3가지의 음식이 준비되어 있으며, 칼로리가 적은 순서대로 1번 음식을 3개, 2번 음식을 4개, 3번 음식을 6개 준비했으며, 물을 편의상 0번 음식이라고 칭한다면, 두 선수는 1번 음식 1개, 2번 음식 2개, 3번 음식 3개씩을 먹게 되므로 음식의 배치는 "1223330333221"이 됩니다. 따라서 1번 음식 1개는 대회에 사용하지 못합니다.
입출력 예
food result
[1, 3, 4, 6] "1223330333221"
[1, 7, 1, 2] "111303111"
2) 풀이
레벨 1의 간단한 문제였다.
문제에는 사용하지 못하는 음식에 대한 설명이 있지만 굳이 고려할 필요는 없는 요소였다.
단순히 해당 칼로리(인덱스)의 개수를 2로 나눠 반복해서 answer에 append 시켜주면 해결된다.
3) 코드
string solution(vector<int> food) {
string answer = "";
// while 반복문
// 1부터 증가해서 it이 size-1과 같아지면 '0' 추가하고 감소시작
// it이 0이 되면 종료
int it=1;
bool sign = true;
while (it > 0) {
int limit = food.size();
if (it == limit) {
answer += "0";
--it;
sign = false;
}
if (sign) {
for(int i=0; i<food[it]/2; i++) {
answer += to_string(it);
}
++it;
}
if (!sign) {
for(int i=0; i<food[it]/2; i++) {
answer += to_string(it);
}
--it;
}
}
return answer;
}
4) 고찰
food vector의 길이가 9였기 때문에 그냥 아무 생각없이 vector를 왕복했는데
생각해보니 0을 기준으로 같은 순서기 때문에 한 번만 돌고
0을 append하고 reverse해서 붙였어도 되었다.
'Algorithm' 카테고리의 다른 글
[프로그래머스] 신규 아이디 추천 (0) | 2022.07.05 |
---|---|
[프로그래머스] 전화번호 목록 (0) | 2022.04.25 |
[프로그래머스] 문자열 압축 (0) | 2022.04.01 |
[Codility] MissingInteger - demo test (0) | 2022.03.29 |
[프로그래머스] 완주하지 못한 선수 (0) | 2022.03.05 |