프로그래밍/프로그래머스
Lv1_[푸드 파이트, C++] 알고리즘 정리 및 풀이 - 프로그래머스
워킹독
2022. 11. 16. 06:50
728x90
문제 내용, 조건, 예시는 프로그래머스 사이트 참조
※ 고려사항
· 물(0)을 제외하고는 동일한 양이 되야하기 때문에 음식의 개수는 짝수가 되야함.
· 물을 기준으로 왼쪽, 오른쪽에는 주어진 음식의 양의 절반씩 배치해주면 된다.
(2로 나누고 양쪽에 동일하게 배분, 나머지는 버림)
양쪽의 배치는 서로 반전이 되어 있기 때문에 한쪽 배치를 구하면 다른 한쪽은 역배치를 해주면 된다.
(ex. 112233 ↔ 332211)
역배치를 하는 법은 reverse() 사용, 반복문을 역으로 실행 등등 있지만 방금 설명한 방식은 추가로 리소스를 소모하기 때문에 불필요한 방법이다.
더 좋은 방법은 한쪽 배치를 할 때, 다른 반대쪽도 배치를 해주는 것이다.
· string left_str = left_str + to_string(i);
· string right_str = to_string(i) + right_str;
위와 같이 해주면 양쪽 배치를 동시에 완성 시킬 수 있어서 추가 리소스를 쓰지 않고 배치를 완성 시킬 수 있다.
양쪽 배치가 완성되면 중간에 물(0)을 넣어서 붙여주면 완성
· answer = left_str + "0" + right_str;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <string> #include <vector> using namespace std; string solution(vector<int> food) { string answer = ""; string left_str = ""; string right_str = ""; for(unsigned int i = 1; i < food.size(); i++) { int count = food[i] / 2; if(count > 0) { for(int k = 0; k < count; k++) { left_str = left_str + to_string(i); right_str = to_string(i) + right_str; } } } answer = left_str + "0" + right_str; return answer; } | cs |
↓↓↓↓↓↓ 유익했다면 하트 뿅 ♥ ↓↓↓↓↓↓
728x90
반응형