문제
100/100 (30분소요)
명령어 수신 탑(높이) I 숫자 큐에 주어진 숫자를 삽입합니다. D 1 큐에서 최댓값을 삭제합니다. D -1 큐에서 최솟값을 삭제합니다.
모든 연산을 처리한 후 큐가 비어있으면 [0,0]
비어있지 않으면 [최댓값, 최솟값]을 return 하도록 solution 함수를 구현해주세요.
주어진 배열을 문자와 숫자를 분리 한 후 push pop을 통해서 처리
function solution(operations) {
var answer = [];
let splitOperation = [];
splitOperation = operations.map(x=>({tag : x.split(' ')[0] , value : Number(x.split(' ')[1])}))
splitOperation.map(x=>{
if(x.tag == 'I')
answer.push(x.value);
else if(x.tag == 'D' && x.value == 1) //최대값 삭제
answer.splice(answer.indexOf(Math.max(...answer)),1);
else //최솟값 삭제
answer.splice(answer.indexOf(Math.min(...answer)),1);
})
if(answer.length == 0 )
return [0,0]
else
return [Math.max(...answer),Math.min(...answer)]
}
map함수를 통해
{ }
형태로 tag에는 D,I를 구분하는 역할과 value에는 값이 Number로 변환되어 숫자형태로 처리되게 배열을 만든 후
다시 map을 이용하여 문자를 확인하여 삽입인지 삭제인지 처리하는 if else문을 이용하고
이것이 끝난 후 answer의 값이 없을경우와 존재할 경우 최댓값 최솟값을 찾아낸다.
{ } 형태는 배열에 객체넣기를 통해 확인 할 수 있다.
answer.splice(answer.indexOf(Math.max(...answer)),1);
answer.splice(answer.indexOf(Math.min(...answer)),1);
찾아낸 최대값(max)이 존재하는 인덱스번호(indexOf)의 한개만 제거하는(splice~,1) 역할을 한다. (최솟값도 마찬가지
function solution(operations) {
var answer = [];
operations.map(x=>({tag : x.split(' ')[0] , value : Number(x.split(' ')[1])})).map(x=>{
if(x.tag == 'I')
answer.push(x.value);
else if(x.tag == 'D' && x.value == 1) //최대값 삭제
answer.splice(answer.indexOf(Math.max(...answer)),1);
else //최솟값 삭제
answer.splice(answer.indexOf(Math.min(...answer)),1);
})
return answer.length == 0 ? [0,0] : [Math.max(...answer),Math.min(...answer)]
}
필요없는 변수 제거 및 map을 통해 바로 처리
if문을 삼항연산자로 마지막에 처리
function solution(operations) {
var answer = [];
let a = operations.map(x=>({tag : x.split(' ')[0] , value : Number(x.split(' ')[1])})).map(x=> {
if(x.tag === 'I')
answer.push(x.value);
else if(x.tag === 'D' && x.value === 1) //최대값 삭제
answer.splice(answer.indexOf(Math.max(...answer)),1);
else //최솟값 삭제
answer.splice(answer.indexOf(Math.min(...answer)),1);
})
return answer.length === 0 ? [0,0] : [Math.max(...answer),Math.min(...answer)]
}
==
를===
로 변환
console.log(Math.max(...[-1,-5]))
console.log(Math.max(...[-1,-5],null))
console.log(Math.max(...[-1,-1],null))
console.log(Math.min(...[10,4]))
console.log(Math.min(...[10,4],null))
console.log(Math.min(...[1,1],null))
결과
-1
0
0
4
0
0
즉, null을 넣었을때 중복되거나 문제가 발생하는 부분이 생기므로 가능하면 null은 안쓰도록하자