function solution(numArr) {
let prev = 0;
let result = [];
for(let i = 0; i < numArr.length; i++) {
if(numArr[i] > prev) {
result.push(numArr[i]);
prev = numArr[i];
} else {
prev = numArr[i];
}
}
return result;
}
// 강사님풀이
function solution1(arr) {
let answer = [arr[0]];
for(let i = 1; i < numArr.length; i++) {
if(arr[i] > arr[i-1]) answer.push(arr[i]);
}
return answer;
}
// 다른 분 reduce 사용한 코드
function solution(arr) {
let answer = [];
arr.reduce((prev, cur) => {
if (prev < cur) answer.push(cur);
return cur;
}, 0);
return answer;
}
문제에 첫 번째 수는 무조건 출력한다 라는 말을 못 봐서 prev라는 변수를 하나 더 만들어버렸다..
그리고 reduce가 익숙하지 않고 성능적으로 좋은진 모르겠지만 깔끔한 것 같아서 연습해 봐야겠다
function solution(arr) {
let result = [arr[0]];
for(let i = 1; i < arr.length; i++) {
if(result[result.length - 1] < arr[i]) {
result.push(arr[i]);
}
}
return result.length;
}
// 강사님 풀이
function solution1(arr) {
let answer = 1, max = arr[0];
for(let i = 0; i < arr.length; i++) {
if(arr[i] > max) {
answer++;
max = arr[i];
}
}
return answer;
}
console.log(solution([130, 135, 148, 140, 145, 150, 153])); // 5
카운트 세는 문제랑 배열을 출력하는 1, 2 문제 뭔가 서로 바꿔서 생각한 듯..?
function solution(arrA, arrB) {
let answer = []
// A가 이기는 경우가 아니고 비기는 경우도 아니면 B가 이기는 경우!
for (let i = 0; i < arrA.length; i++) {
if (arrA[i] === arrB[i]) answer.push('D')
else if (arrA[i] === 2 && arrB[i] === 1) answer.push('A')
else if (arrA[i] === 1 && arrB[i] === 3) answer.push('A')
else if (arrA[i] === 3 && arrB[i] === 2) answer.push('A')
else answer.push('B')
}
return answer
}
// 다른 분 연산을 이용한 풀이
function solution(a, b) {
let answer = [];
for (let i = 0; i < a.length; i++) {
if (a[i] === b[i]) answer.push('D');
else if (a[i] - b[i] === 1 || a[i] - b[i] === -2) answer.push('A');
else answer.push('B');
}
return answer;
}
const a = [2, 3, 3, 1, 3];
const b = [1, 1, 2, 2, 3];
console.log(solution(a, b)); // A B A B D
바보같이 모든 경우의 수를 생각해서 if문 다 작성할 뻔... ㅜ 경우를 따지는 문제에서는 기준을 잘 잡아야 함! 뭐로 잡아서 분류를 할지 생각해 보기
function solution(arr) {
let cnt = 0;
let result = 0;
for (let x of arr) {
if (x === 1) {
cnt++;
result += cnt;
} else {
cnt = 0;
}
}
return result;
}
console.log(solution([1, 0, 1, 1, 1, 0, 0, 1, 1, 0])); // 10
// 91점 3명이 1등이면 1 1 1 2
function solution(arr) {
const obj = {};
const result = [];
const sort = [...arr].sort((a, b) => b - a);
const unique = sort
.filter((v, i) => sort.indexOf(v) === i)
.map((v, i) => (obj[v] = i + 1));
arr.map((v) => result.push(obj[v]));
return result;
}
console.log(solution([87, 89, 92, 92, 100, 76])); // [4, 3, 2, 2, 1, 5]
강사님은 for문을 이용하셨는데 난 여전히 2중 for 문이 헷갈려서 조금 복잡한? 방법으로 풀었다. 내가 생각한 방법은 우선 큰 수 순으로 이루어진 중복이 제거된 배열로 object를 하나 만들었다.
그런데 sort를 하면 원본 배열이 변경돼서 spread operator 기존 배열을 복사하고 filter로 중복된 숫자를 제거하고 텅 빈 obj에 키는 정렬된 arr의 값으로, i는 1부터 시작해야 하므로 value는 i+1로
{
100: 1,
92: 2,
87: 3,
...
}
이렇게 등수대로 이루어지게 만든 다음, 전달받은 arr를 돌면서 obj[arr value] 형식으로 꺼내서 result 배열에 push 되게 풀었다.