๊ธฐ๋ก๋ฐฉ

BOJ_1874 : ์Šคํƒ ์ˆ˜์—ด ๋ณธ๋ฌธ

CodingTest/Java

BOJ_1874 : ์Šคํƒ ์ˆ˜์—ด

Soom_1n 2022. 11. 7. 16:50

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

1874๋ฒˆ: ์Šคํƒ ์ˆ˜์—ด

1๋ถ€ํ„ฐ n๊นŒ์ง€์— ์ˆ˜์— ๋Œ€ํ•ด ์ฐจ๋ก€๋กœ [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ˆ˜์—ด [4, 3, 6, 8, 7, 5, 2, 1]์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • ์Šคํƒ์˜ pop, push ์—ฐ์‚ฐ๊ณผ ํ›„์ž… ์„ ์ถœ ๊ฐœ๋…์„ ์ •ํ™•ํ•˜๊ฒŒ ์•Œ๊ณ  ์žˆ๋Š”์ง€ ๋ฌป๋Š” ๋ฌธ์ œ์ด๋‹ค.
  • ์Šคํƒ์— ๋„ฃ๋Š” ์ž์—ฐ์ˆ˜ ๊ฐ’์€ ์˜ค๋ฆ„ ์ฐจ์ˆœ ์ •๋ ฌ์ด๋‹ค.
    • ํ˜„์žฌ ์ˆ˜์—ด ๊ฐ’ >= ์ž์—ฐ์ˆ˜
      • ์ž์—ฐ์ˆ˜๊ฐ€ ํ˜„์žฌ ์ˆ˜์—ด ๊ฐ’๊ณผ ๊ฐ™์•„์งˆ ๋•Œ ๊นŒ์ง€ ์ž์—ฐ์ˆ˜๋ฅผ 1์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ ์Šคํƒ์— pushํ•œ๋‹ค.
      • ๋งˆ์ง€๋ง‰์€ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด 1๋ฒˆ popํ•œ๋‹ค.
    • ํ˜„์žฌ ์ˆ˜์—ด ๊ฐ’ < ์ž์—ฐ์ˆ˜
      • popํ•ด์„œ ์Šคํƒ์˜ ๊ฐ€์žฅ ์œ„ ๊ฐ’์„ ํ™•์ธํ•œ๋‹ค.
        • ๊บผ๋‚ธ ๊ฐ’์ด ํ˜„์žฌ ์ˆ˜์—ด ๊ฐ’์ด ์•„๋‹ˆ๋ผ๋ฉด, ํ›„์ž…์„ ์ถœ ์›๋ฆฌ์— ๋”ฐ๋ผ์„œ ์ˆ˜์—ด์„ ํ‘œ๊ธฐํ•  ์ˆ˜ ์—†๋‹ค. NO์ถœ๋ ฅ.
        • ํ˜„์žฌ ์ˆ˜์—ด ๊ฐ’์ด๋ผ๋ฉด ๊ทธ๋Œ€๋กœ ์กฐ๊ฑด๋ฌธ์„ ๋‚˜์˜จ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

import java.io.*;
import java.util.Stack;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuffer sb = new StringBuffer();

        int n = Integer.parseInt(br.readLine());

        Stack<Integer> stack = new Stack<>();
        int num = 1;
        boolean result = true;
        for (int i = 0; i < n; i++){
            int su = Integer.parseInt(br.readLine());
            if (su >= num){
                while (su >= num){
                    stack.push(num++);
                    sb.append("+\n");
                }
                stack.pop();
                sb.append("-\n");
            }
            else {
                int pop = stack.pop();

                if (pop > su) {
                    System.out.println("NO");
                    result = false;
                    break;
                }
                else {
                    sb.append("-\n");
                }
            }
        }
        if (result) System.out.println(sb.toString());
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • Stack ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด์„œ ์Šคํƒ์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ž…๋ ฅ ๋ฐ›์€ ์ˆ˜์—ด ๊ฐ’์„ ์ด์šฉํ•ด ์Šคํƒ ํ‘œํ˜„์ด ๋˜๋Š”์ง€ ๊ณ„์‚ฐํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์ด์ „์— python์œผ๋กœ ํ’€์—ˆ๋˜ ๋ฌธ์ œ์ธ๋ฐ, ๋‹ค์‹œ java๋กœ ํ’€์–ด๋ณด๋‹ˆ ์ƒˆ๋กœ์› ๋‹ค.
  • java์˜ ์ž๋ฃŒ๊ตฌ์กฐ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์ต์ˆ™์ง€ ์•Š์€๋ฐ ์ข‹์€ ์—ฐ์Šต์ด ๋˜์—ˆ๋‹ค.
  • ํ•œ ๋ฒˆ์— ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด StringBuffer๋„ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, ์ด์ „์—๋Š” StringBuilder๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ทธ ์ฐจ์ด์ ์ด ๋ฌด์—‡์ธ๊ฐ€ ํฌ์ŠคํŒ…์„ ์ฐพ์•„๋ณด์•˜๋‹ค.
    • String๊ณผ StringBuffer/StringBuilder์˜ ์ฐจ์ด์ ์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถˆ๋ณ€์„ฑ์ธ์ง€ ๊ฐ€๋ณ€์„ฑ์ธ์ง€์ด๋‹ค.
      • String์€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ž์—ด์„ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.
    • StringBuffer/StringBuilder๋Š” ๋ฌธ์ž์—ด์ด ๊ธธ์–ด์ง€๋ฉด, ๊ทธ ๋งŒํผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋Š˜๋ ค์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.
    • StringBuffer/StringBuilder์˜ ์ฐจ์ด์ ์€ ๋™๊ธฐํ™”(Synchronization)์ด๋‹ค.
      • StringBuilder๋Š” ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์ง€๋งŒ ์†๋„๋Š” StringBuffer๋ณด๋‹ค ์„ฑ๋Šฅ์ด ์ข‹๋‹ค.
        ๋”ฐ๋ผ์„œ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๋ฌธ์ž์—ด์˜ ์ˆ˜์ •์ด ๋นˆ๋ฒˆํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.
      • StringBuffer๋Š” ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•˜์—ฌ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋„ ์•ˆ์ „ํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.
        ๋”ฐ๋ผ์„œ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๋ฌธ์ž์—ด์˜ ์ˆ˜์ •์ด ๋นˆ๋ฒˆํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.
    • ์ด ๋ฌธ์ œ ํ’€์ด์—์„œ๋Š” StringBuilder๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๋” ์„ฑ๋Šฅ์ด ์ข‹์•˜์„ ๊ฒƒ์ด๋‹ค.

728x90

'CodingTest > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BOJ_2164 : ์นด๋“œ2  (0) 2022.11.07
BOJ_17298 : ์˜คํฐ์ˆ˜  (0) 2022.11.07
BOJ_11003 : ์ตœ์†Ÿ๊ฐ’ ์ฐพ๊ธฐ  (0) 2022.11.03
BOJ_12891 : DNA ๋น„๋ฐ€๋ฒˆํ˜ธ  (0) 2022.11.03
BOJ_1120 : ๋ฌธ์ž์—ด  (0) 2022.11.02