[프로그래머스] 프린터
📖 문제
https://programmers.co.kr/learn/courses/30/lessons/42587
✏️ 나의 풀이
사실 이 문제는 예전에 풀다 실패했던 문제였다.
처음에는 문서의 순서가 바뀌었을 때를 처리하는 방법에 대해 많은 고민을 해봤지만 도저히 답을 못찾아 포기했었다.
지금 생각해보면 어려운 문제가 아니였는데 왜 포기했는지…
문서의 순서가 바뀌었을 때를 위해 index 라는 변수를 선언해 주었다.
해당 변수는 인쇄를 요청한 문서의 index 로 해당 변수가 -1일 경우 인쇄가 되었다고 판단을 한다.
👩💻 코드
function solution(priorities, location) {
var answer = 0;
let index = location;
while(index>-1){
const j = priorities.shift();
let flag = true;
for(let i = 0; i< priorities.length;i++){
if(priorities[i] > j){
priorities.push(j);
index===0?index=priorities.length-1:index--;
flag = false;
break;
}
}
if(flag){
index--;
answer++;
}
}
return answer;
}
📖 공부내용
some()
- 다른 사람 코드를 보다 some 함수를 보게되었다.
- 많은 사람들이 some 함수를 이용해 풀기에 왜 이 함수를 사용하는지 확인을 해보니
- 한 배열 안의 한 요소라도 해당 조건에 부합하면 true를 반환하는 함수이다.
- 프린터 문제에서 나는 이 조건을 몰라 for 반복문을 이용해 풀었다.
- 만일 some 함수를 이용해 풀면
let flag = true; for(let i = 0; i< priorities.length;i++){ if(priorities[i] > j){ priorities.push(j); index===0?index=priorities.length-1:index--; flag = false; break; } } if(flag){ index--; answer++; }
- 이러했던 기존의 코드가 아래와 같이 바꿀 수 있다.
const flag = priorities.some(v=>v > j) if(flag){ priorities.push(j); index = index===0?priorities.length-1:index-1; }else{ index--; answer++; }
every()
- some 과 유사하지만 다른 every 이라는 함수가 있다.
- some 은 한 요소라도 조건에 부합하면 true를 반환하지만, every 함수는 모든 요소가 조건에 부합해야 한다.
const test = [0, 1, 2, 3]; console.log(test.every(v=>v>0)) // false
댓글남기기