2022. 11. 24. 16:31ㆍ알고리즘/프로그래머스 알고리즘 공부
[문제]
food 배열이 주어집니다. 예를 들어 [1, 3, 4, 6] 라고 food 배열이 input으로 주어질 때, 첫 번째 인덱스 0은 마시는 물을 말하며 항상 값이 1이고 그 다음 인덱스 1은 3이 주어졌는데 첫 번째 인덱스의 음식 개수입니다. 2번째 인덱스는 4개, 3번째 인덱스는 6개가 되며, 왼쪽 선수와 오른쪽 선수가 서로 대결을 펼친다고 가정해서 물이 한 가운데 있는, 즉 물을 기준으로, 서로 대칭 형태로 음식을 배열하고자 합니다. 즉 이 예시에서는 "1223330333221"이 결과로 return 되어야 하는 것입니다.
[알고리즘]
여러 알고리즘이 사용될 수 있으며 필자는 먼저 배열에 반복문을 활용하여 음식을 나열한 뒤에 0을 붙이고 이미 만든 배열을 역정렬(sort 함수 활용)하여 뒤에 추가해주었습니다.
[풀이]
최종 코드는 아래와 같으며 먼저 배열을 선언합니다. 그 다음 반복문을 이용하여 food[i]가 최소 2이상 일 때 음식을 나열해야 하기 때문에 이 조건문을 추가하고 그 다음 food[i]의 개수가 대칭을 위해 짝수여야 하므로 food[i] / 2를 사용하여 절반만 배치될 수 있도록 합니다. 마지막으로 이 형태가 배열이므로 join 함수를 사용하여 String 자료형으로 0과 합쳐주고 기존에 있었던 answer 배열을 sort 함수(reverse() 함수 사용해도 됩니다)를 활용해서 역으로 정렬해서 return 해주면 됩니다.
function solution(food) {
// 배열 선언
const answer = [];
// 반복문 설정하여 주어진 input에 맞게 food result가 0을 기준으로 대칭이기 때문에
// 앞 쪽을 먼저 완성합니다.
for (let i = 1; i < food.length; i++) {
if (food[i] > 1) {
// food[i] / 2를 하여 절반만 나열될 수 있도록 합니다.
for (let j = 1; j <= food[i] / 2; j++) {
answer.push(i);
}
}
}
// 0을 추가하고 answer를 역순으로 정렬해서 return합니다.
return answer.join("") + "0" + answer.sort((a, b) => b - a).join("");
}
'알고리즘 > 프로그래머스 알고리즘 공부' 카테고리의 다른 글
[프로그래머스-Level 1] [JavaScript] 과일 장수 - 배열, 최솟값 이용 (0) | 2022.11.28 |
---|---|
[프로그래머스-Level 1] [JavaScript] 햄버거 만들기 - 스택(Stack) 활용 (0) | 2022.11.27 |
[프로그래머스-Level 1] [JavaScript] 기사단원의 무기 - 약수의 개수 구하기 (0) | 2022.11.23 |
[프로그래머스-Level 1] [JavaScript] 콜라 문제 - 재귀 함수 활용 (0) | 2022.11.23 |
[프로그래머스-Level 0] [Javascript] 분수의 덧셈(최대공약수 이용) (0) | 2022.10.29 |