๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 6198_์˜ฅ์ƒ ์ •์› ๊พธ๋ฏธ๊ธฐ

๋ฟŒ์•ผ._. 2022. 3. 29. 23:26

Gold V

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/6198)

<์˜ฅ์ƒ ์ •์› ๊พธ๋ฏธ๊ธฐ>

๋ฌธ์ œ 

 

๋„์‹œ์—๋Š” N๊ฐœ์˜ ๋นŒ๋”ฉ์ด ์žˆ๋‹ค.
๋นŒ๋”ฉ ๊ด€๋ฆฌ์ธ๋“ค์€ ๋งค์šฐ ์„ฑ์‹คํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‹ค๋ฅธ ๋นŒ๋”ฉ์˜ ์˜ฅ์ƒ ์ •์›์„ ๋ฒค์น˜๋งˆํ‚นํ•˜๊ณ  ์‹ถ์–ด ํ•œ๋‹ค.
i๋ฒˆ์งธ ๋นŒ๋”ฉ์˜ ํ‚ค๊ฐ€ hi์ด๊ณ , ๋ชจ๋“  ๋นŒ๋”ฉ์€ ์ผ๋ ฌ๋กœ ์„œ ์žˆ๊ณ  ์˜ค๋ฅธ์ชฝ์œผ๋กœ๋งŒ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
i๋ฒˆ์งธ ๋นŒ๋”ฉ ๊ด€๋ฆฌ์ธ์ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๋นŒ๋”ฉ์˜ ์˜ฅ์ƒ ์ •์›์€ i+1, i+2,.... , N์ด๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ์ž์‹ ์ด ์œ„์น˜ํ•œ ๋นŒ๋”ฉ๋ณด๋‹ค ๋†’๊ฑฐ๋‚˜ ๊ฐ™์€ ๋นŒ๋”ฉ์ด ์žˆ์œผ๋ฉด ๊ทธ๋‹ค์Œ์— ์žˆ๋Š” ๋ชจ๋“  ๋นŒ๋”ฉ์˜ ์˜ฅ์ƒ์€ ๋ณด์ง€ ๋ชปํ•œ๋‹ค.
์˜ˆ) N=6, H = {10, 3, 7, 4, 12, 2}์ธ ๊ฒฝ์šฐ

1๋ฒˆ ๊ด€๋ฆฌ์ธ์€ 2, 3, 4๋ฒˆ ๋นŒ๋”ฉ์˜ ์˜ฅ์ƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
2๋ฒˆ ๊ด€๋ฆฌ์ธ์€ ๋‹ค๋ฅธ ๋นŒ๋”ฉ์˜ ์˜ฅ์ƒ์„ ํ™•์ธํ•  ์ˆ˜ ์—†๋‹ค.
3๋ฒˆ ๊ด€๋ฆฌ์ธ์€ 4๋ฒˆ ๋นŒ๋”ฉ์˜ ์˜ฅ์ƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
4๋ฒˆ ๊ด€๋ฆฌ์ธ์€ ๋‹ค๋ฅธ ๋นŒ๋”ฉ์˜ ์˜ฅ์ƒ์„ ํ™•์ธํ•  ์ˆ˜ ์—†๋‹ค.
5๋ฒˆ ๊ด€๋ฆฌ์ธ์€ 6๋ฒˆ ๋นŒ๋”ฉ์˜ ์˜ฅ์ƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
6๋ฒˆ ๊ด€๋ฆฌ์ธ์€ ๋งˆ์ง€๋ง‰์ด๋ฏ€๋กœ ๋‹ค๋ฅธ ๋นŒ๋”ฉ์˜ ์˜ฅ์ƒ์„ ํ™•์ธํ•  ์ˆ˜ ์—†๋‹ค.

๋”ฐ๋ผ์„œ, ๊ด€๋ฆฌ์ธ๋“ค์ด ์˜ฅ์ƒ์ •์›์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์ด ์ˆ˜๋Š” 3 + 0 + 1 + 0 + 1 + 0 = 5์ด๋‹ค.

 

 

์ž…๋ ฅ

 

์ฒซ ๋ฒˆ์งธ ์ค„์— ๋นŒ๋”ฉ์˜ ๊ฐœ์ˆ˜ N์ด ์ž…๋ ฅ๋œ๋‹ค.(1 ≤ N ≤ 80,000)
๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ N+1๋ฒˆ์งธ ์ค„๊นŒ์ง€ ๊ฐ ๋นŒ๋”ฉ์˜ ๋†’์ด๊ฐ€ hi ์ž…๋ ฅ๋œ๋‹ค. (1 ≤ hi ≤ 1,000,000,000)

 

์ถœ๋ ฅ 

 

๊ฐ ๊ด€๋ฆฌ์ธ๋“ค์ด ๋ฒค์น˜๋งˆํ‚น์ด ๊ฐ€๋Šฅํ•œ ๋นŒ๋”ฉ์˜ ์ˆ˜์˜ ํ•ฉ์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

๋ฌธ์ œ ํ’€์ด

-  ์ดˆ๊ธฐ ์ฝ”๋“œ: ์‹œ๊ฐ„ ์ดˆ๊ณผ

if __name__=='__main__':
    n=int(input())

    stack=[]
    answer=0

    for i in range(n):
        h=int(input())
        stack.append(h)

    for i in range(n):
        for j in range(i+1,n):
            if stack[i]>stack[j]:
                answer+=1
            else:
                break
    print(answer)

 

๋ฌธ์ œ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์ด stack์ธ์ง€ ์•Œ๊ณ  ์žˆ์—ˆ์ง€๋งŒ ์ด์ค‘ for๋ฌธ์œผ๋กœ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š๋‚˜ ์ƒ๊ฐํ•˜์—ฌ ํ’€์—ˆ๋‹ค๊ฐ€ ๋ฐ”๋กœ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฐœ์ƒํ•œ ์ฝ”๋“œ

 

์‚ฌ์‹ค ๋ฐ”๋กœ stack์œผ๋กœ ํ’€๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ ํ’€ ๋ฐฉ๋ฒ•์ด ์ƒ๊ฐ ์•ˆ ๋‚˜์„œ ํ•œ์ฐธ ์ƒ๊ฐํ–ˆ๋‹ค.

์ƒ๊ฐํ•˜๋‹ค ์ƒ๊ฐํ•˜๋‹ค ๊ฒฐ๊ตญ ๊ฒ€์ƒ‰์˜ ํž˜์„ ๋นŒ๋ ธ๋‹ค.

 

์ƒ๊ฐํ•˜๋Š” ๊ด€์ ์„ ๋ฐ”๊พธ์ž -!

ํ˜„์žฌ ๊ฑด๋ฌผ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฑด๋ฌผ์˜ ์ˆ˜๋ฅผ ์„ธ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ž์‹ ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฑด๋ฌผ์„ ์„ธ๋Š” ๋ฐฉ๋ฒ•์ด์—ˆ๋‹ค.

 

 

 - my solution (Python)

if __name__=='__main__':
    n=int(input())

    arr=[]
    answer=0

    for i in range(n): # ๋นŒ๋”ฉ ๋†’์ด
        h=int(input())
        arr.append(h)

    stack=[]
    for i in range(n):
        while stack:
            if stack[-1]<=arr[i]: # ์ž์‹ ์˜ ๋นŒ๋”ฉ ๋†’์ด๋ณด๋‹ค ๋‚ฎ๋‹ค๋ฉด
                stack.pop()
            else:
                break
        stack.append(arr[i])
        answer+=len(stack)-1

    print(answer)

 

 

- my solution (JAVA)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class _6198_์˜ฅ์ƒ์ •์›๊พธ๋ฏธ๊ธฐ {

	public static void main(String[] args) throws IOException{
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		
		int n=Integer.parseInt(br.readLine()); // ๋นŒ๋”ฉ์˜ ์ˆ˜
		int [] arr=new int [n];
		long answer=0;
		
		for(int i=0; i<n; i++) {
			arr[i]=Integer.parseInt(br.readLine());
		}
		
		Stack<Integer> stack=new Stack<>();
		for(int i=0; i<n; i++) {
			while(stack.size()!=0) {
				if(stack.peek()<=arr[i]) {
					stack.pop();
				}else {
					break;
				}
			}
			stack.add(arr[i]);
			answer+=stack.size()-1;
		}
		System.out.println(answer);
	}
}

 

  • ๋นŒ๋”ฉ์˜ ์ˆ˜, ๋นŒ๋”ฉ์˜ ๋†’์ด ์ž…๋ ฅ
  • ๋นŒ๋”ฉ์„ ์ˆœํ™˜
    : stack์— ๊ฐ’์ด ์žˆ๋‹ค๋ฉด
    -> ํ˜„์žฌ ๋นŒ๋”ฉ์˜ ๋†’์ด๊ฐ€ stack์— ์žˆ๋Š” ๋งˆ์ง€๋ง‰ ๋นŒ๋”ฉ์˜ ๋†’์ด๋ณด๋‹ค ๋†’๋‹ค๋ฉด
     = stack์— ์žˆ๋Š” ๋นŒ๋”ฉ์€ ํ˜„์žฌ ๋นŒ๋”ฉ์„ ๋ณผ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ stack์—์„œ pop
    : stack์— ํ˜„์žฌ ๋นŒ๋”ฉ์„ ์ถ”๊ฐ€
    : stack์—๋Š” ํ˜„์žฌ ๋นŒ๋”ฉ์„ ์ œ์™ธํ•œ ์ž์‹ ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋นŒ๋”ฉ๋“ค์ด ์กด์žฌํ•˜๋ฏ€๋กœ stack์˜ ๊ธธ์ด -1์„ answer์— ๋”ํ•จ
  • answer ์ถœ๋ ฅ

 

 

โ“ JAVA์—์„œ ์™œ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”๊ฐ€?

ํŒŒ์ด์ฌ๊ณผ ๋กœ์ง์ด ๊ฐ™์€๋ฐ ์™œ ํ‹€๋ ธ๋‚˜ ํ•ด์„œ ์ฐพ์•„๋ณด๋‹ˆ... ๋‹ต์ด intํ˜•์„ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ์–ด ๋ฐœ์ƒํ•œ ๋ฌธ์ œ์˜€๋‹ค.

ํŒŒ์ด์ฌ์—์„œ๋Š” ๊ณ ๋ คํ•˜์ง€ ์•Š์•˜๋˜ ๋ถ€๋ถ„... answer์„ longํ˜•์œผ๋กœ ๋ฐ”๊ฟ”์„œ ์ œ์ถœํ•˜๋‹ˆ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

 


์ƒ๊ฐ๐Ÿค”

 

์ด ๋ฌธ์ œ๋Š” ๊ฒ€์ƒ‰์„ ํ†ตํ•ด์„œ๋„ ์ดํ•ดํ•˜๊ธฐ ํž˜๋“ค์–ด ํ•œ์ฐธ ์ƒ๊ฐํ•œ ๋ฌธ์ œ์˜€๋‹ค.

๊ทธ๋ž˜๋„ ๊ฒฐ๊ตญ ์ดํ•ดํ•˜๊ธด ํ–ˆ์ง€๋งŒ ๊น”๋”ํ•˜์ง€๋Š” ์•Š์•˜๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

 


 

 

 

'๐ŸŒžAlgorithm > ๐Ÿ”ฅBaekjoon' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Baekjoon] 2468_์•ˆ์ „ ์˜์—ญ  (0) 2022.04.01
[Baekjoon] 2178_๋ฏธ๋กœ ํƒ์ƒ‰  (0) 2022.03.31
[Baekjoon] 2493_ํƒ‘  (0) 2022.03.28
[Baekjoon] 1068_ํŠธ๋ฆฌ  (0) 2022.03.25
[Baekjoon] 3190_๋ฑ€  (0) 2022.03.23