오늘의 문제는 푸드 파이트 대회입니다.
문제를 보고 필요한 것이 무언인지 생각해 보았습니다.
먼저 음식이 2명이 먹을 수 있어야 하고, 반올림이 아닌 소수점을 제거해야합니다.
다음은 한 선수의 음식을 배치하게 되면 다음 선수의 음식은 처음 선수의 문자열을 뒤집으면 됩니다!
function solution(food) {
var answer = '';
for(let i = 0; i<food.length; i++){
if(Math.floor(food[i]/2) > 0){
for(let j = 0; j<Math.floor(food[i]/2); j++) answer += i;
}
}
return answer + '0' + answer.split("").reverse().join('');
}
따라서 저는 Math.floor를 사용해서 음식이 2명에서 먹을 수 있는지를 확인하고 중첩 for문을 사용해 answer에 넣어주었습니다. 이렇게 첫 번째 선수의 음식 순서를 정한 후에는 '0'과 answer를 나눈 배열을 뒤집은 후 join을 사용하여 연결해주었습니다.
결과는 정답!!
문제를 푼 후 다른 분의 코드도 살펴보았습니다.
가장 상단에 있는 코드를 한 번 보겠습니다.
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('');
}
- repeat은 괄호 안에 들어가는 숫자만큼 반복을 하는 메서드입니다.
예를 들어 "abc".repeat(2)를 하게 되면 > "abcabc"가 리턴됩니다.
따라서 i를 String으로 형 변환 시킨 후 Math.floor를 사용해 몇 번 반복할 지 넣어주는 방식입니다.
제가 if와 중첩 for문을 사용했던 것보다 좀 더 간결하고 효율적인 코드인 것 같습니다.
첫 번째 음식 정렬을 구한 후 [...res].reverse().join('')을 사용하였습니다. reverse와 join을 사용한 것은 같지만 전개연산자를 사용하였습니다. 전개연산자를 사용하게 되면 배열이나 객체의 요소를 나열해주지만 원본을 손상시키지는 않는 복사본을 만들 수 있습니다. 따라서 res의 문자열을 이루고 있는 요소들을 나열하는 배열을 만든 것입니다.
>
앞으로 코딩을 할 때 무조건 조건문과 반복문을 쓰기 전에 좀 더 단순하고 간결한 코드를 어떻게 만들 수 있을지 고민해봐야겠습니다! 이 문제도 조건문과 반복문을 쓰게 되면 쉽겠지만 repeat()이라는 메소드를 쓰게 되면 조건문과 중첩 반복문 없이 작성할 수 있다는 것을 생각하지 못해 아쉽습니다. 하지만 Math.floor()를 사용한 것과 reverse와 join을 사용한 것은 칭찬해주고 싶다!! O(∩_∩)O
그럼 20000~
'코딩테스트' 카테고리의 다른 글
프로그래머스 - 문자열 다루기 기본 (0) | 2024.03.07 |
---|---|
코딩테스트 - 없는 숫자 더하기 (2) | 2024.03.06 |
프로그래머스 - 다음 큰 숫자 (0) | 2023.12.31 |
프로그래머스 - 소인수분해 (0) | 2023.12.30 |
프로그래머스 - 배열의 길이를 2의 거듭제곱으로 만들기 (1) | 2023.12.21 |