이 영역을 누르면 첫 페이지로 이동
시간의화살 블로그의 첫 페이지로 이동

시간의화살

페이지 맨 위로 올라가기

시간의화살

행복하세요

[백준] 17298 오큰수 -Java / Python

  • 2022.02.14 17:08
  • Algorithm/Baekjoon

 

 

 

그냥 읽고 손 가는대로 풀면 시간초과로 오답이 된다.

빠르게 처리할 수 있는 방법을 생각해 보자.

 

스택을 잘 활용하면 빠르게 처리할 수 있다.

일단 수를 담는 스택과 인덱스를 저장하는 스택을 만들자.

 

입력값을 배열에 넣어준 후에 차례대로 값을 검사한다.

 

값을 검사하면서 현재 검사하고 있는 값이 이전의 값보다 작으면 스택에 인덱스와 값을 넣어 준다.

만약 현재 검사하고 있는 값이 스택의 가장 윗부분의 값보다 크면 스택에서 값을 뺀다. 이 작업을 스택의 가장 윗부분의 값이 더 커질 때 까지 반복한다.

 

위의 작업이 끝나면, 마지막 처리로 스택에 남아있는 인덱스를 -1로 채워준다.

 

스택을 이렇게 활용하는 방법도 있다.. 기억해두자.

 

 

 

Java

 

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));
		StringBuilder sb = new StringBuilder();

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

		StringTokenizer st = new StringTokenizer(br.readLine(), " ");

		Stack<Integer> stack = new Stack<>();
		Stack<Integer> stackidx = new Stack<>();

		int[] arr = new int[N];
		int[] ans = new int[N];

		for(int i=0; i<N; i++){
			arr[i] = Integer.parseInt(st.nextToken());
		}
		
	
		for(int i=0; i< N; i++){
			while(stack.size()>0 && stack.peek() < arr[i]){
				ans[stackidx.peek()] = arr[i];
				stack.pop();
				stackidx.pop();
			}
			stack.push(arr[i]);
			stackidx.push(i);
		}

		while(stackidx.size()>0){
			ans[stackidx.peek()] = -1;
			stackidx.pop();
		}

		ans[N-1] = -1;

		for(int i=0; i<N; i++){
			sb.append(ans[i]).append(" ");
		}

		

		System.out.print(sb);
	}

	
}

 

 

Python

 

 

파이썬도 자바와 같은 방법으로 풀었다.

 

from collections import deque
import sys

N = int(sys.stdin.readline())
arr = list(map(int,sys.stdin.readline().split(" ")))
ans = [-1] * N

st = []
stidx = []

for i in range(N):
  while st and st[-1] < arr[i]:
    ans[stidx[-1]] = arr[i]
    st.pop()
    stidx.pop()
  st.append(arr[i])
  stidx.append(i)

while stidx:
  ans[stidx[-1]] = -1
  stidx.pop()

ans[N-1] = -1

for i in ans:
  print(i, end=" ")

 

 

반응형

'Algorithm > Baekjoon' 카테고리의 다른 글

[백준] 7662 이중 우선순위 큐 -Java  (0) 2022.02.16
[백준] 4358 생태학 -Java / Python  (0) 2022.02.15
[백준] 1991 트리 구조 -Java / Python  (0) 2022.02.14
[백준] 1655 가운데를 말해요 - Java / Python  (0) 2022.02.13
[백준] 11286 절댓값 힙 - Java / Python  (1) 2022.02.13

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [백준] 7662 이중 우선순위 큐 -Java

    [백준] 7662 이중 우선순위 큐 -Java

    2022.02.16
  • [백준] 4358 생태학 -Java / Python

    [백준] 4358 생태학 -Java / Python

    2022.02.15
  • [백준] 1991 트리 구조 -Java / Python

    [백준] 1991 트리 구조 -Java / Python

    2022.02.14
  • [백준] 1655 가운데를 말해요 - Java / Python

    [백준] 1655 가운데를 말해요 - Java / Python

    2022.02.13
다른 글 더 둘러보기

정보

시간의화살 블로그의 첫 페이지로 이동

시간의화살

  • 시간의화살의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (607)
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • Java (19)
      • JavaScript (15)
      • C (25)
      • C++ (12)
      • Python (1)
      • PHP (2)
    • Computer Science (69)
      • Operating System (18)
      • Computer Network (17)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Github Actions (0)
      • Amazon Web Service (8)
    • Machine Learning (28)
      • AI Introduction (28)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • Solutions (14)
    • Life Logs (0)
    • 낙서장 (25)

최근 글

나의 외부 링크

메뉴

  • 홈

정보

13months의 시간의화살

시간의화살

13months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © 13months.

티스토리툴바