본문 바로가기

자료구조+알고리즘/BOJ

[BOJ-24511_silver3] queuestack (javascript)

https://www.acmicpc.net/problem/24511

 

24511번: queuestack

첫째 줄에 queuestack을 구성하는 자료구조의 개수 $N$이 주어진다. ($1 \leq N \leq 100\,000$) 둘째 줄에 길이 $N$의 수열 $A$가 주어진다. $i$번 자료구조가 큐라면 $A_i = 0$, 스택이라면 $A_i = 1$이다. 셋째 줄

www.acmicpc.net

[유형]

- 자료구조

- 스택

- 덱

- 큐

 

 

 

 

[풀이]

 

 

N = 4 : 자료구조 4개

A = 0 1 1 0 : 각 자료구조의 종류 === Queue 혹은 Stack !! (문제에도 적혀있다 ....)

B = 1 2 3 4 : 현재 각 자료구조에 들어있는 수 

M = 3 : 넣을 수의 갯수

C = 2 4 7 : 넣을 수 

 

 

x = 2, 4., 7 A 형태 B 현재요소
  0 = 큐 1
  1 = 스택 2
  1 = 스택 3
  0 = 큐 4

 

스택인 것 들은 어차피 원소의 값이 바뀌지 않고 처리해줘야 할 게 없기 때문에 넘어가면 된다.

큐인 것들만 쌋 모아주고 별도의 큐를 만들어준 다음에 하나씩 append 하고 popleft 하는 거로 생각하면 된다.

 

1번 예제를 보면,

[1,4] 라는 큐에서 2, 4, 7 이 차례로 들어온다.

1 4 에서 2를 새로 추가해서 [2 1 4] 로 만들어주고 다음 4는 맨 마지막을 pop 해서 리턴된다

1차 리턴 결과는 [2 2 3 1]

 

큐 자료구조에서 하나씩 추가하면서 밀어내는 것이 결국 처리될 하나의 공통 로직이다.

 

 

[코드] ! 틀림  -> 왜 틀렸는지 알 려 주실 분....??

const fs = require('fs');
const [n, A, B, M, C] = fs
  .readFileSync('./input.txt')
  .toString()
  .trim()
  .split('\n')
  .map((i) => i.split(' ').map(Number));
let N = Number(n);

let queue = [];

for (let i = 0; i < N; i++) {
  if (A[i] === 0) queue.push(B[i]); //[1,4]
}

queue.sort((a, b) => b - a); //reverse

const result = [];

for (let j of C) {
  queue.push(j);
  result.push(queue.shift());
}
console.log(result.join(' ').toString());

 

 

왜 계속 틀릴까.. 

728x90
반응형