한번씩 읽고 가세요.
“ 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. ”
- Frederick Philips Brooks
Mythical Man-Month 저자
1.
다음과 같은 형태의 배열을
[a1,a2,a3...,an,b1,b2...bn]
다음과 같은 형태로 바꾸시오
[a1,b1,a2,b2.....an,bn]
풀이
// swap을 하는 방법
const arr = [10, 20, 30, 40, 50, 60];
[arr[1], arr[2]] = [arr[2], arr[1]];
console.log(arr);
//
const l = ['a1','a2','a3','a4','a5','b1','b2','b3','b4','b5']
function solution(list) {
var n = list.length / 2;
for (let i = 1; i < n; i++) {
for (let j = i * 2 - 1; j < n + i; j++) {
[list[j], list[n + i - 1]] = [list[n + i - 1], list[j]];
}
}
return list;
}
console.log(solution(l));
주어진 배열 arr에서 두 요소의 위치를 서로 바꾸는 방법을 보여주고 있습니다.
- 주어진 배열 arr의 두 요소를 서로 교환하기 위해 배열 비구조화 할당(destructuring assignment)을 사용합니다.
- [arr[1], arr[2]]는 첫 번째 요소와 두 번째 요소를 배열로 묶은 것입니다.
- [arr[2], arr[1]]는 두 번째 요소와 첫 번째 요소를 배열로 묶은 것입니다.
- [arr[1], arr[2]] = [arr[2], arr[1]]은 왼쪽의 배열과 오른쪽의 배열을 비구조화 할당하여 요소의 위치를 서로 바꿉니다.
- console.log(arr)을 통해 바뀐 배열 arr을 출력합니다.
따라서, [10, 30, 20, 40, 50, 60]이 출력됩니다.
두 번째 코드는 주어진 배열 list의 요소를 일정한 패턴으로 서로 바꾸는 함수 solution을 정의하고, 주어진 배열 l에 대해 테스트하는 부분입니다. 코드를 해석해보면 다음과 같습니다:
- solution 함수는 list라는 매개변수를 받습니다.
- n 변수에 list의 길이를 2로 나눈 값을 할당합니다. (배열이 어떤 패턴으로 구성되어 있는지에 따라 계산됩니다.)
- 중첩된 반복문을 사용하여 요소의 위치를 서로 바꿉니다.
- 외부 반복문은 i를 1부터 n까지 증가시킵니다.
- 내부 반복문은 j를 (i * 2) - 1부터 n + i - 1까지 증가시킵니다.
- 비구조화 할당을 사용하여 요소의 위치를 서로 바꿉니다.
- 바뀐 배열 list를 반환합니다.
- console.log(solution(l))을 통해 함수 solution을 호출한 결과를 출력합니다.
따라서, solution 함수는 배열 l의 요소를 일정한 패턴으로 서로 바꾸고, [ 'a1', 'a3', 'a2', 'b1', 'b3', 'b2', 'a4', 'a5', 'b4', 'b5' ]가 출력됩니다. 배열 l의 요소들이 a와 b로 구성되어 있으며, a와 b의 순서가 바뀌는 패턴으로 배열이 재정렬되었습니다.
2.
기계를 구입하려 하는데 이 기계는 추가 부품을 장착할 수 있다. 추가 부품은 종류당 하나씩만 장착 가능하고, 모든 추가 부품은 동일한 가격을 가진다.
원래 기계의 가격과 성능, 추가 부품의 가격과 각 부품의 성능이 주어졌을 때, 추가 부품을 장착하여 얻을 수 있는 최대 가성비를 정수 부분까지 구하시오(가격 및 성능은 상대적인 값으로 수치화되어 주어진다).
e.g.)
원래 기계의 가격 : 10
원래 기계의 성능 : 150
추가 부품의 가격 : 3
추가 부품의 성능 : 각각 30, 70, 15, 40, 65
추가 부품을 장착하여 얻을 수 있는 최대 가성비 : 17.81... → 17
(성능이 70과 65인 부품을 장착하면 됨)
풀이
let 가격 = 10
let 성능 = 150
let 부품가격 = 3
let 부품성능 = [30, 70, 15, 40, 65]
부품성능.sort((a, b) => a - b)
부품성능.sort((a, b) => b - a)
for (let i of 부품성능){
if ((성능 / 가격) > ((성능 + i) / (가격 + 부품가격))) {
break
} else {
성능 += i
가격 += 부품가격
}
}
console.log(~~(성능/가격))
- 주어진 변수들은 다음과 같습니다:
- 가격은 초기 가격을 나타냅니다. (10)
- 성능은 초기 성능을 나타냅니다. (150)
- 부품가격은 각 부품의 추가 가격을 나타냅니다. (3)
- 부품성능은 부품의 성능을 담은 배열입니다. (예: [30, 70, 15, 40, 65])
- 부품성능 배열을 오름차순으로 정렬합니다. (부품성능.sort((a, b) => a - b))
- 부품성능 배열을 내림차순으로 정렬합니다. (부품성능.sort((a, b) => b - a))
- 이렇게 하면 부품 성능이 내림차순으로 정렬됩니다.
- for...of 문을 사용하여 부품 성능을 하나씩 확인합니다.
- 각 부품 성능 i에 대해, (성능 / 가격)과 (성능 + i) / (가격 + 부품가격)의 비율을 비교합니다.
- 만약 (성능 / 가격)이 더 크다면, 즉 성능 대비 가격 비율이 더 크다면 반복문을 종료합니다.
- 그렇지 않으면, 성능과 가격을 갱신합니다. 성능은 i만큼 증가시키고, 가격은 부품가격만큼 증가시킵니다.
- 최종적으로 성능 대비 가격 비율을 구하여 소수점 이하를 버린 후, console.log를 사용하여 결과를 출력합니다. (~~(성능/가격))
따라서, 주어진 가격과 성능에 대한 정보를 기반으로 성능 대비 가격 비율이 최대가 되는 부품을 찾아 그 값을 출력합니다.