[프로그래머스(Programmers)][Java,Python] (Lv2) 뒤에 있는 큰 수 찾기

728x90

 

https://school.programmers.co.kr/learn/courses/30/lessons/154539

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

1. Java

/* DP (Dynamic Programming) (동적계획법) */
class Solution {
    public int[] solution(int[] numbers) {
        int len = numbers.length;
        int[] answer = new int[len];
        for ( int i = 0; i < len; ++i ) {
            answer[i] = -1;
        }
        int max = 0;
        for ( int i = len-1; i >= 0; --i ) {
            if ( max < numbers[i] ) {
                max = numbers[i];
                continue;
            }
            for ( int j = i+1; j < len; ++j ) {
                if ( numbers[i] < numbers[j] ) {
                    answer[i] = numbers[j];
                    break;
                } else if ( numbers[i] == numbers[j]
                         || numbers[i] < answer[j] ) {
                    answer[i] = answer[j];
                    break;
                }
            }
        }
        return answer;
    }
}
/* Stack (스택) */
import java.util.*;
class Solution {
    public int[] solution(int[] numbers) {
        int len = numbers.length;
        int[] answer = new int[len];
        for ( int i = 0; i < len; ++i ) {
            answer[i] = -1;
        }
        Stack<Integer> stack = new Stack<>();
        for ( int i = 0; i < len; ++i ) {
            while ( stack.size() > 0 && numbers[stack.peek()] < numbers[i] ) {
                answer[stack.pop()] = numbers[i];
            }
            stack.push(i);
        }
        return answer;
    }
}

 

2. Python

def solution(numbers):
    n = len(numbers)
    answer = [-1 for i in range(n)]
    m = 0
    for i in range(n-1, -1, -1) :
        if m < numbers[i] :
            m = numbers[i]
            continue
        for j in range(i+1, n) :
            if numbers[i] < numbers[j] :
                answer[i] = numbers[j]
                break
            elif numbers[i] == numbers[j] or numbers[i] < numbers[j] :
                answer[i] = answer[j]
                break
    return answer
def solution(numbers):
    n = len(numbers)
    answer = [-1 for i in range(n)]
    stack = []
    for i in range(0, n) :
        while len(stack) > 0 and numbers[stack[-1]] < numbers[i] :
            answer[stack.pop()] = numbers[i]
        stack.append(i)
    return answer

 

반응형