Home 백준 스택 문제 - 01
Post
X

백준 스택 문제 - 01

10828번 문제 - 스택

백준 10828번 문제


풀이

  • 배열을 이용해 Stack 구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
const filePath = process.platform !== "linux" ? "./test.txt" : "dev/stdin";

let input = require("fs").readFileSync(filePath).toString().trim().split("\n");

class Stack {
  constructor() {
    this._arr = [];
  }

  push(item) {
    this._arr.push(item);
  }

  pop() {
    return this._arr.length ? this._arr.pop() : -1;
  }

  size() {
    return this._arr.length;
  }

  empty() {
    return this._arr.length ? 0 : 1;
  }

  top() {
    return this._arr.length ? this._arr[this._arr.length - 1] : -1;
  }
}

let stack = new Stack();
let result = [];

for (let i = 1; i <= input[0]; i++) {
  let arr = input[i].trim().split(" ");

  switch (arr[0]) {
    case "push":
      stack.push(arr[1]);
      break;

    case "top":
      result.push(stack.top());
      break;

    case "size":
      result.push(stack.size());
      break;

    case "empty":
      result.push(stack.empty());
      break;

    case "pop":
      result.push(stack.pop());
      break;

    default:
      break;
  }
}

console.log(result.join("\n"));

28278번 문제 - 스택 2

백준 28278번 문제


풀이

  • 배열을 이용해 Stack 구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
const filePath = process.platform !== "linux" ? "./test.txt" : "dev/stdin";

let input = require("fs").readFileSync(filePath).toString().trim().split("\n");

class Stack {
  constructor() {
    this._arr = [];
  }

  push(item) {
    this._arr.push(item);
  }

  pop() {
    return this._arr.length ? this._arr.pop() : -1;
  }

  size() {
    return this._arr.length;
  }

  empty() {
    return this._arr.length ? 0 : 1;
  }

  top() {
    return this._arr.length ? this._arr[this._arr.length - 1] : -1;
  }
}

let stack = new Stack();
let result = [];

for (let i = 1; i <= input[0]; i++) {
  let arr = input[i].trim().split(" ");

  switch (arr[0]) {
    case "1":
      stack.push(arr[1]);
      break;

    case "5":
      result.push(stack.top());
      break;

    case "3":
      result.push(stack.size());
      break;

    case "4":
      result.push(stack.empty());
      break;

    case "2":
      result.push(stack.pop());
      break;

    default:
      break;
  }
}

console.log(result.join("\n"));

10773번 문제 - 제로

백준 10773번 문제


풀이

  • 배열을 이용해 Stack 구현
  • Array 객체의 reduce 메서드 활용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
const filePath = process.platform !== "linux" ? "./test.txt" : "dev/stdin";

let input = require("fs").readFileSync(filePath).toString().trim().split("\n");

class Stack {
  constructor() {
    this._arr = [];
  }

  push(item) {
    this._arr.push(item);
  }

  pop() {
    return this._arr.length ? this._arr.pop() : -1;
  }

  size() {
    return this._arr.length;
  }

  empty() {
    return this._arr.length ? 0 : 1;
  }

  top() {
    return this._arr.length ? this._arr[this._arr.length - 1] : -1;
  }
}

let stack = new Stack();

for (let i = 1; i <= input[0]; i++) {
  let data = Number(input[i]);

  data ? stack.push(data) : stack.pop();
}

let result = stack._arr.reduce((acc, x) => {
  return acc + x;
}, 0);

console.log(result);

9012번 문제 - 괄호

백준 9012번 문제


풀이

  • 문자열의 각 문자 반복에 for … of 사용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
const filePath = process.platform !== "linux" ? "./test.txt" : "dev/stdin";

let input = require("fs").readFileSync(filePath).toString().trim().split("\n");

class Stack {
  constructor() {
    this._arr = [];
  }

  push(item) {
    this._arr.push(item);
  }

  pop() {
    return this._arr.length ? this._arr.pop() : -1;
  }

  size() {
    return this._arr.length;
  }

  peek() {
    return this._arr.length ? this._arr[this._arr.length - 1] : -1;
  }
}

let stack = new Stack();

for (let i = 1; i <= input[0]; i++) {
  stack._arr.length = 0;

  let strArr = input[i].trim().split("");

  for (let x of strArr) {
    x == "("
      ? stack.push(x)
      : stack.peek() == "("
      ? stack.pop()
      : stack.push(x);
  }

  console.log(stack.size() ? "NO" : "YES");
}

9093번 문제 - 단어 뒤집기

백준 9093번 문제


풀이

  • 스택에 쌓아 가다가 ' '(빈칸)을 기준으로 pop하여 결과값에 저장
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
const filePath = process.platform !== "linux" ? "./test.txt" : "dev/stdin";

let input = require("fs").readFileSync(filePath).toString().trim().split("\n");

class Stack {
  constructor() {
    this._arr = [];
  }

  push(item) {
    this._arr.push(item);
  }

  pop() {
    return this._arr.length ? this._arr.pop() : -1;
  }

  size() {
    return this._arr.length;
  }

  top() {
    return this._arr.length ? this._arr[this._arr.length - 1] : -1;
  }
}

let stack = new Stack();

for (let i = 1; i <= input[0]; i++) {
  stack._arr.length = 0;
  let strArr = input[i].trim();

  let result = [];

  for (let x of strArr) {
    if (x == " ") {
      while (stack.size()) {
        result.push(stack.pop());
      }

      result.push(x);
    } else {
      stack.push(x);
    }
  }

  while (stack.size()) {
    result.push(stack.pop());
  }

  console.log(result.join(""));
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.