-
프로그래머스 - 프린터 (JavaScript)etc/coding test 2020. 4. 20. 21:59
문제: https://programmers.co.kr/learn/courses/30/lessons/42587
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 해결 과정
중요도가 높은 순서대로 인쇄하는 프린터기를 만든다.
매개변수로
현재 대기목록에 있는 문서의 중요도가 순서대로 담긴 배열 priorities,
내가 인쇄를 요청한 문서의 위치인 location을 받는다.
내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 return
규칙은
1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.
2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면
J를 대기목록의 가장 마지막에 넣습니다.
3. 그렇지 않으면 J를 인쇄합니다.1. priorities를 순환한다. (내가 원하는 문서가 출력될 때까지)
2. priorities의 0번째 인덱스를 꺼낸다.
나머지 대기열에 0번째 요소보다 중요도가 높은 문서가 있는지 확인한다.
2-1) 대기열에 더 높은 중요도를 가진 문서가 있다. -> 방금 꺼낸 문서를 맨 뒤로 보낸다. (location의 변화)
2-2) 현재 문서의 중요도가 가장 높다 -> 출력
2-2-1) 현재 문서가 인쇄를 요청한 문서다(target) 반복문을 종료하고 answer를 반환한다.
2-2-2) 문서가 하나 출력되서 location의 위치가 앞으로 한 칸 땡겨진다.
코드
function solution(priorities, location) { var answer = 0; let target = location; // 반복문 - 모든 문서가 출력될 때까지 while(priorities.length>0){ // 현재 0번 인덱스의 문서가 중요도가 가장 높은지 확인 if(priorities.some(paper=>paper>priorities[0])){ // 1. 중요도가 더 높은 문서가 있을 경우 -> 맨 뒤로 보낸다. priorities.push(priorities[0]); priorities.shift(); if(target===0){ target = priorities.length-1 }else{ target--; } }else{ // 2. 중요가 가장 높은 경우는 -> 출력합니다. priorities.shift(); answer++; if(target===0){ break; }else{ target--; } } } return answer; }
생각해보고 싶은 점
location이 변하기 때문에 target에 담았는데 초기값을 알 필요가 없으니 그냥 location으로 쓰는 게 나은가?
다른 방법을 생각해보면
중요도가 가장 높은 문서를 찾는다 그 문서의 앞쪽을 잘라서 뒤로 붙이고, 인쇄한다. (이걸 반복)
둘 중에 뭐가 더 나은 방법이지??
출처:
프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
'etc > coding test' 카테고리의 다른 글
프로그래머스 - 탑 (JavaScript) (0) 2020.04.26 프로그래머스 - 타겟 넘버 (JavaScript) (0) 2020.04.23 프로그래머스 - 괄호 변환 (JavaScript) (0) 2020.04.19 프로그래머스 - 크레인 인형뽑기 게임 (JavaScript) (0) 2020.04.18 nthFibonacci - 피보나치 수열의 n번째 숫자 찾기 (0) 2020.02.15