์šฐ๊ทœ์ด์ธ์šฐ์œค
Eager To Learn ๐ŸŒŒ
์šฐ๊ทœ์ด์ธ์šฐ์œค
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿก ํ™ˆ
  • ๐Ÿš€ ๊นƒํ—ˆ๋ธŒ
  • โ›… ํƒœ๊ทธ ํด๋ผ์šฐ๋“œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (217)
    • ๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm ๊ธฐ๋ฒ• (1)
      • ๋ฐ”ํ‚น๋… (21)
    • ๋ธ”๋กœ๊ทธ ์ด์‚ฌ (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • ์ž๋ฃŒ๊ตฌ์กฐ (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • ๊ฐœ๋ฐœ์„œ์  (15)
      • ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ (1)
      • ์˜ค๋ธŒ์ ํŠธ - ์กฐ์˜ํ˜ธ (7)
      • ์นœ์ ˆํ•œ SQL ํŠœ๋‹ (7)
    • ํšŒ๊ณ  (2)
hELLO ยท Designed By ์ •์ƒ์šฐ.
์šฐ๊ทœ์ด์ธ์šฐ์œค

Eager To Learn ๐ŸŒŒ

๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS/JAVA

[JAVA] ๋ฐฑ์ค€ 2493๋ฒˆ ใ€ํƒ‘ใ€‘

2022. 12. 18. 22:28


์ด ๋ฌธ์ œ๋Š”, ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด์„ํ•˜๋ฉด ํƒ‘์ด ์ผ๋ ฌ๋กœ ์žˆ์„ ๋•Œ, ์ž์‹ ์˜ ์™ผ์ชฝ์— ์žˆ๋Š” ํƒ‘ ์ค‘ ์ž์‹ ๊ณผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํƒ‘์˜ ์œ„์น˜๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋‹ค. (์—†์„ ์‹œ 0)

 

์ด ๋ฌธ์ œ๋ฅผ ์ ‘๊ทผํ•  ๋•Œ์—๋Š”,

 

ํ˜„์žฌ ํƒ‘ ์œ„์น˜ ์™ผ์ชฝ์—, ํ˜„์žฌ ํƒ‘๊ณผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šฐ๋ฉด์„œ ๋†’์€ ํƒ‘์˜ ์œ„์น˜๋ฅผ ์ฐพ์ง€ ๋ง๊ณ , 

 

ํ˜„์žฌ ํƒ‘๊ณผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šฐ๋ฉด์„œ ๋†’์€ ํƒ‘์˜ ๋†’์ด๋ฅผ ๋จผ์ € ์ฐพ์•„๋ณด๋Š” ๊ฒƒ์ด ์ดํ•ดํ•˜๊ธฐ ์ข‹๋‹ค.

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.valueOf(br.readLine());
        int[] tops = Arrays.stream(br.readLine().split(" ")).mapToInt(s -> Integer.valueOf(s)).toArray();
        Stack<Integer> stack = new Stack<>();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < N; i++) {
            int top = tops[i];
            while (!stack.isEmpty()) {
                if (stack.peek() < top) {
                    stack.pop();
                } else {
                    sb.append(stack.peek() + " ");
                    break;
                }
            }
            if(stack.isEmpty()) {
                sb.append(0 + " ");
            }
            stack.push(top);
        }
        System.out.println(sb);
    }
}

 

์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๋กœ ๋‚ด ์™ผ์ชฝ์— ์žˆ์œผ๋ฉด์„œ ๋‚˜๋ณด๋‹ค ๋†’์€ ํฐ ํƒ‘์˜ ๋†’์ด๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์˜ˆ์ œ ๊ธฐ์ค€, 

6 9 5 7 4 ๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ

 

0 0 9 9 7 ์ด ์ถœ๋ ฅ๋˜๋Š” ์ฝ”๋“œ์ด๋‹ค.

 

for ๋ฌธ ์•ˆ์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ–ˆ๋Š”์ง€ ์‚ดํŽด๋ณด๋ฉด,

 

stack์—๋Š” ์ ์–ด๋„ 1๊ฐœ์˜ ํƒ‘์˜ ๋†’์ด๊ฐ€ ์ž…๋ ฅ๋œ๋‹ค.

 

 

 

1. ๋†’์ด๊ฐ€ 6์ธ 1๋ฒˆ์งธ ํƒ‘

1๋ฒˆ์งธ ํƒ‘์€ ์™ผ์ชฝ์— ์–ด๋– ํ•œ ํƒ‘๋„ ์—†์œผ๋ฏ€๋กœ sb์— 0์ด ๊ธฐ๋ก๋˜๋ฉฐ ๋†’์ด 6์ด stack์— ์ž…๋ ฅ๋œ๋‹ค.

 

ํ˜„์žฌ stack = [ 6 ]

 

 

2. ๋†’์ด๊ฐ€ 9์ธ 2๋ฒˆ์งธ ํƒ‘

2๋ฒˆ์งธ ํƒ‘์€ stack์— ์ž…๋ ฅ๋œ 6๊ณผ ๋น„๊ต๋ฅผ ํ•ด๋ณธ๋‹ค.

6๋ณด๋‹ค ๋†’์ด๊ฐ€ ๋†’์œผ๋ฏ€๋กœ ์†ก์‹ ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ์กฐ๊ฑด๋ฌธ์— ๋”ฐ๋ผ stack์„ pop ํ•œ๋‹ค.

pop์„ ํ•˜๋Š” ์ด์œ ๋Š”, ์–ด์ฐจํ”ผ ์ดํ›„์— 3๋ฒˆ์งธ 4๋ฒˆ์งธ.... ํƒ‘๋“ค์€ ๋†’์ด๊ฐ€ 9์ธ ํƒ‘์ด 6์„ ๋ง‰๊ธฐ ๋•Œ๋ฌธ์— ๊ณ ๋ คํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ•œ๋งˆ๋””๋กœ, ํ˜„์žฌ ํƒ‘ ๋†’์ด์ธ 9๋ณด๋‹ค  ๋†’์ด๊ฐ€ ๋‚ฎ์€ ๋†’์ด๊ฐ€ 6์ธ ํƒ‘์€ ๊ธฐ๋กํ•  ์ด์œ ๊ฐ€ ์ „ํ˜€ ์—†๋‹ค.

 

๊ทธ๋ ‡๊ฒŒ, 6์„ popํ•˜๋Š” ์ˆœ๊ฐ„ stack์€ ๋น„๊ฒŒ๋˜๊ณ , ์†ก์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ํƒ‘์ด ์—†์œผ๋ฏ€๋กœ sb์— 0์ด ๊ธฐ๋ก๋˜๋ฉฐ ๋†’์ด 9๊ฐ€ stack์— ๊ธฐ๋ก๋œ๋‹ค.

 

ํ˜„์žฌ stack = [ 9 ]

 

 

3. ๋†’์ด๊ฐ€ 5์ธ 3๋ฒˆ์งธ ํƒ‘

3๋ฒˆ์งธ ํƒ‘์€ stack์— ์ž…๋ ฅ๋œ 9์™€ ๋น„๊ต๋ฅผ ํ•ด๋ณธ๋‹ค.

9๊ฐ€ 5๋ณด๋‹ค ๋†’์œผ๋ฏ€๋กœ, ์†ก์‹ ๋  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ sb์— ๋†’์ด 9๋ฅผ ๊ธฐ๋กํ•œ ๋’ค, while๋ฌธ์„ ๋น ์ ธ๋‚˜์˜จ๋‹ค.

 

ํ˜„์žฌ stack = [ 9 ]

 

๋‚˜์ค‘์— 6~8์ธ ํƒ€์›Œ๊ฐ€ ๋‚˜ํƒ€๋‚  ์‹œ, ๋†’์ด๊ฐ€ 9์ธ ํƒ€์›Œ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— stack์— ๋ณด์กดํ•ด๋‘”๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ๋†’์ด 5์ธ ํƒ‘๋„ stack์— ์ž…๋ ฅํ•ด์•ผํ•œ๋‹ค. ์ด์œ ๋Š” ๋’ค์— ๋†’์ด๊ฐ€ 4๋‚˜ 3์ธ ํƒ‘์ด ๋‚˜ํƒ€๋‚  ์‹œ ์†ก์‹  ํƒ‘์ด ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

ํ˜„์žฌ stack = [ 9 5 ]

 

 

4. ๋†’์ด๊ฐ€ 7์ธ 4๋ฒˆ์งธ ํƒ‘

4๋ฒˆ์งธ ํƒ‘์€ ๋จผ์ € stack์— ์ž…๋ ฅ๋œ 5๊ณผ ๋น„๊ต๋ฅผ ํ•ด๋ณธ๋‹ค.

๋†’์ด๊ฐ€ 7์ธ ํƒ‘์ด 5๋ณด๋‹ค ํฌ๋ฏ€๋กœ 5์€ ์Šคํƒ์—์„œ ์ œ์™ธํ•œ๋‹ค.

์ œ์™ธ์‹œํ‚ค๋Š” ์ด์œ ๋Š” 2๋ฒˆ์งธ ๋‹จ๊ณ„์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋†’์ด๊ฐ€ 7์ธ ํƒ‘์ด 6์„ ๊ฐ€๋ฆด ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋†’์ด๊ฐ€ 6์ธ ํƒ€์›Œ์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ์ „ํ˜€ ํ•„์š”ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

ํ˜„์žฌ stack = [ 9 ]

 

๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ stack์— ์ž…๋ ฅ๋œ 9์™€ ๋น„๊ต๋ฅผ ํ•ด๋ณธ๋‹ค.

๋†’์ด๊ฐ€ 7์ธ ํ˜„์žฌ ํƒ‘๋ณด๋‹ค ํฌ๋ฏ€๋กœ ์†ก์‹ ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ sb์— ๋†’์ด 9๋ฅผ ๊ธฐ๋กํ•˜๊ณ  while ๋ฌธ์„ ๋น ์ ธ๋‚˜์˜จ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ ํƒ‘์˜ ๋†’์ด์ธ 7์„ stack์— ๊ธฐ๋กํ•œ๋‹ค.

 

ํ˜„์žฌ stack = [ 9 7 ]

 

5. ๋†’์ด๊ฐ€ 4์ธ 5๋ฒˆ์งธ ํƒ‘

5๋ฒˆ์งธ ํƒ‘์€ stack์— ์ž…๋ ฅ๋œ 7๊ณผ ๋น„๊ต๋ฅผ ํ•ด๋ณธ๋‹ค.

๋†’์ด๊ฐ€ 7์ธ ํƒ‘์ด ๋” ๋†’์œผ๋ฏ€๋กœ ์†ก์‹ ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ sb์— ๋†’์ด 7์„ ๊ธฐ๋กํ•˜๊ณ  while๋ฌธ์„ ๋น ์ ธ๋‚˜์˜จ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ ํƒ‘์ธ 4๋ฅผ stack์— ๊ธฐ๋กํ•œ๋‹ค.

 

์ตœ์ข… stack = [9 7 4]

 

์ตœ์ข… ์Šคํƒ ์ƒํƒœ๋Š” ์œ„์™€ ๊ฐ™์„ ๊ฒƒ์ด๊ณ  ๊ทธ๋™์•ˆ ์ž…๋ ฅํ•ด๋‘” sb๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด

 

[0 0 9 9 7] ์ด ๋‚˜์˜จ๋‹ค.

 

์ •๋‹ต์€, ์†ก์‹ ๋˜๋Š” ํƒ€์›Œ์˜ ๋†’์ด๊ฐ€ ์•„๋‹Œ ํƒ€์›Œ์˜ ์œ„์น˜๋ฅผ ์ถœ๋ ฅํ•ด์•ผํ•œ๋‹ค.

 

์œ„ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ดํ•ดํ–ˆ๋‹ค๋ฉด, ์œ„์น˜๋ฅผ ๋ฝ‘์•„๋‚ด๋Š” ๊ฒƒ์€ ์–ด๋ ต์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.

 

์œ„์น˜๋ฅผ ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” class๋ฅผ ์ƒˆ๋กœ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด int[] ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

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

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.valueOf(br.readLine());
        int[] tops = Arrays.stream(br.readLine().split(" ")).mapToInt(s -> Integer.valueOf(s)).toArray();
        Stack<int []> stack = new Stack<>();
        StringBuilder sb = new StringBuilder();

        for(int i = 0; i < N; i++) {
            int top = tops[i]; // ํ˜„์žฌ ํƒ‘์˜ ๋†’์ด
            while(!stack.empty()) {
                if(stack.peek()[1] < top) { //ํƒ‘ ๋†’์ด ๋น„๊ต
                    stack.pop();
                }
                else {
                    sb.append(stack.peek()[0] + " "); //ํƒ‘ ์œ„์น˜ ์ถ”๊ฐ€
                    break;
                }
            }
            if(stack.isEmpty()) {
                sb.append(0+" ");
            }
            stack.push(new int[] {i+1, top}); // (ํƒ‘์˜ ์œ„์น˜, ํƒ‘์˜ ๋†’์ด)
        }
        System.out.println(sb);
    }
}

 

    '๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS/JAVA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [JAVA] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ํ•ด์‹œ -ใ€๋ฒ ์ŠคํŠธ์•จ๋ฒ”ใ€‘
    • [JAVA] ๋ฐฑ์ค€ 4179๋ฒˆ ใ€๋ถˆ!ใ€‘
    • [JAVA] ๋ฐฑ์ค€ 2146๋ฒˆ ใ€๋‹ค๋ฆฌ ๋งŒ๋“ค๊ธฐใ€‘
    • [JAVA] ๋ฐฑ์ค€ 1158๋ฒˆ ใ€์š”์„ธํ‘ธ์Šค ๋ฌธ์ œใ€‘
    ์šฐ๊ทœ์ด์ธ์šฐ์œค
    ์šฐ๊ทœ์ด์ธ์šฐ์œค
    ๊ฐœ๋ฐœ์ž ๊ฟˆ๋‚˜๋ฌด

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”