Oops, All Code!/🤯 Oops, My Algorithm!
♡̈ 11. 프로그래머스:: 푸드 파이트 대회
밍동망동
2024. 7. 10. 23:09


문제를 해결하기 위한 조건을 정리해보았다.
1. 각 음식 종류별로 두 선수가 동일하게 먹을 수 있는 음식 개수
2. 각 음식을 배치하는데 필요한 문자열 생성
3. 생성된 문자열을 중앙의 '0'을 기준으로 좌우 배치
function solution(food) {
let left = "";
let right = "";
for (let i = 1; i < food.length; i++) {
const count = Math.floor(food[i] / 2);
if (count > 0) {
left += i.toString().repeat(count);
}
}
right = left.split('').reverse().join('');
return left + "0" + right;
}
더 간결한 코드는 다음과 같다.
다른 사람의 코드
function solution(food) {
let res = '';
for (let i = 1; i < food.length; i++) {
res += String(i).repeat(Math.floor(food[i]/2));
}
return res + '0' + [...res].reverse().join('');
}
로직은 같지만 문자열 연결 방식에 차이가 있다.
이 코드에서는 res라는 문자열 변수에 좌측 문자열을 모두 저장하고,
그 좌측 문자열을 뒤집어 최종 문자열을 구한다.
이 코드가 더 간결하며 중간 변수 없이 res 하나로 좌우측 문자열을
처리하기 때문에 더욱 간결하다.
문자열 처리 방식 역시 차이가 나타나는데,
[...res].reverse().join('')
이 코드에서는 스프레드 연산자를 사용해 배열을 변환하고 다시 조합하는 반면,
이전 코드에서는 'split('')'을 사용해 문자열을 배열로 변환하고 다시 문자열로 조합한다.
left.split('').reverse().join('')