문제 설명
왼쪽 또는 오른쪽으로만 빠져나갈 수 있는 원통형 파이프 안에 숫자가 쓰인 공이 일렬로 들어있습니다. 명령에 따라 공을 하나씩 뺄 때, 공이 빠져나오는 순서를 구하려고 합니다.
양방향 중 한 방향으로 공을 하나씩 뺄 수 있기 때문에, 명령받은 공이 다른 공 사이에 있어 바로 빠져나오지 못하는 경우도 있습니다. 양쪽 끝에 있는 두 개의 공만 명령에 따라 바로 뺄 수 있습니다. 명령을 받았지만 바로 뺄 수 없는 공은 보류 상태가 되며, 뺄 수 있는 조건이 되면 다음 명령보다 우선하여 빠져나오게 됩니다.
아래 그림은 파이프 안에 들어있는 공의 순서를 나타냅니다.
명령이 [6, 2, 5, 1, 4, 3]으로 주어진 경우, 다음과 같이 공이 빠져나오게 됩니다.
1. 6번 공은 오른쪽 끝에 있으므로 바로 빠져나옵니다.
2. 2번 공은 다른 공 사이에 있기 때문에 바로 나가지 못하고 보류 상태가 됩니다.
3. 5번 공은 6번 공이 빠져나갔기 때문에 오른쪽 끝에 있으므로 바로 빠져나옵니다.
4. 1번 공은 왼쪽 끝에 있으므로 바로 빠져나옵니다. 보류 상태였던 2번 공이 이제 빠져나올 수 있기 때문에 뒤이어 2번 공이 빠져나옵니다.
5. 4번 공은 오른쪽 끝에 있으므로 바로 빠져나옵니다.
6. 3번 공은 마지막 공이기 때문에 어느 쪽으로든 나올 수 있습니다.
공이 빠져나온 순서는 [6, 5, 1, 2, 4, 3]입니다.
파이프에 들어있는 공의 번호를 나타내는 배열 ball과 공을 빼는 명령을 담은 배열 order가 매개변수로 주어집니다. 공이 빠져나오는 순서를 배열에 담아 return 하도록 solution 함수를 완성해주세요.
제한사항
- ball의 길이(=공의 개수)는 1 이상 300,000 이하입니다.
- ball의 모든 원소는 1 이상 1,000,000 이하인 자연수입니다.
- ball에는 같은 숫자가 중복해서 들어있지 않습니다.
- order의 길이는 ball의 길이와 같습니다.
- order의 원소는 ball의 원소와 일대일 대응입니다.
ball | order | Result |
[1, 2, 3, 4, 5, 6] | [6, 2, 5, 1, 4, 3] | [6, 5, 1, 2, 4, 3] |
[11, 2, 9, 13, 24] | [9, 2, 13, 24, 11] | [24, 13, 9, 2, 11] |
- 입출력 예 #1
문제 예시와 같습니다.
- 입출력 예 #2
첫 번째 명령부터 세 번째 명령에 해당하는 공은 모두 바로 뺄 수 없기 때문에 보류 상태가 됩니다. 24번 공이 빠져나오면
보류 상태였던 공이 연이어 나오게 됩니다.
제출답안
function solution(ball, order) {
var answer = [];
let ballList = ball;
if(ballList.length > 1) {
while(ballList.length > 0) {
console.log('ballList: ', ballList);
for(let i=0; i<order.length; i++) {
if(ballList[0] === order[i]) {
answer.push(ballList[0]);
ballList.shift();
break;
}
if(ballList.slice(-1)[0] === order[i]) {
answer.push(ballList.slice(-1)[0]);
ballList.pop();
break;
}
}
}
} else {
answer.push(ball[0]);
}
return answer;
'Algorithm Test' 카테고리의 다른 글
재정렬 배열 반환 (0) | 2022.08.16 |
---|---|
입출금 response code 반환 (0) | 2022.08.16 |
신규 아이디 추천 (0) | 2022.07.18 |
숫자 문자열과 영단어 (0) | 2022.07.14 |
생년월일 Validation (0) | 2022.05.04 |