본문 바로가기
코딩테스트/프로그래머스 기초

[코딩테스트 Lv.0] 배열 만들기 4

by 블루데이제이 2025. 3. 25.
728x90
반응형
문제 설명

정수 배열 arr가 주어집니다. arr를 이용해 새로운 배열 stk를 만드려고 합니다.

변수 i를 만들어 초기값을 0으로 설정한 후 i가 arr의 길이보다 작으면 다음 작업을 반복합니다.

  • 만약 stk가 빈 배열이라면 arr[i]를 stk에 추가하고 i에 1을 더합니다.
  • stk에 원소가 있고, stk의 마지막 원소가 arr[i]보다 작으면 arr[i]를 stk의 뒤에 추가하고 i에 1을 더합니다.
  • stk에 원소가 있는데 stk의 마지막 원소가 arr[i]보다 크거나 같으면 stk의 마지막 원소를 stk에서 제거합니다.

위 작업을 마친 후 만들어진 stk를 return 하는 solution 함수를 완성해 주세요.

제한사항
● 1 ≤ arr의 길이 ≤ 100,000
    ○ 1 ≤ arr의 원소 ≤ 100,000
입출력 예
arr		result
[1, 4, 2, 5, 3]	[1, 2, 3]
입출력 설명
입출력 예 #1
각 작업을 마친 후에 배열의 변화를 나타내면 다음 표와 같습니다.
i	arr[i]	stk
0	1	[]
1	4	[1]
2	2	[1, 4]
2	2	[1]
3	5	[1, 2]
4	3	[1, 2, 5]
4	3	[1, 2]
-	-	[1, 2, 3]
따라서 [1, 2, 3]을 return 합니다.

내 풀이
Java
import java.util.*;
class Solution {
    public int[] solution(int[] arr) {
        int[] stk = {};
        List<Integer> list = new ArrayList<>();
        int i = 0;
        while(i < arr.length){
            if(list.isEmpty()){
                list.add(arr[i++]);                
            }else{
                if(list.get(list.size() - 1) < arr[i]){
                    list.add(arr[i++]);
                }else if(list.get(list.size() - 1) >= arr[i]){
                    list.remove(list.size() - 1);
                }
            }
        }
        stk = list.stream().mapToInt(Integer::intValue).toArray();
        return stk;
    }
}
C
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

// arr_len은 배열 arr의 길이입니다.
int* solution(int arr[], size_t arr_len) {
    // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
    int* stk = (int*)malloc(sizeof(int) * arr_len);
    
    int i = 0;    
    int k = 0;
    while(i < arr_len){
        if(stk == NULL){
            stk[k++] = arr[i++];
        }else{
            if(stk[k - 1] < arr[i]){
                stk[k++] = arr[i++];
            }else if(stk[k - 1] >= arr[i]){
                stk[k--] = '\0';
            }
        }
    }
    
    return stk;
}
Python
def solution(arr):
    stk = []
    i = 0
    while i < len(arr):
        if len(stk) <= 0:
            stk.append(arr[i])
            i += 1
        else:
            if stk[len(stk) - 1] < arr[i]:
                stk.append(arr[i])
                i += 1
            elif stk[len(stk) - 1] >= arr[i]:
                del stk[len(stk) - 1]
            
    return stk

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

 

프로그래머스

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

programmers.co.kr


 

[코딩테스트 Lv.0] 배열 만들기 1

문제 설명정수 n과 k가 주어졌을 때, 1 이상 n이하의 정수 중에서 k의 배수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.제한사항1 ≤ n ≤ 1,000,0001 ≤ k ≤

bluedayj.tistory.com

 

 

[코딩테스트 Lv.0] 배열 만들기 3

문제 설명정수 배열 arr와 2개의 구간이 담긴 배열 intervals가 주어집니다.intervals는 항상 [[a1, b1], [a2, b2]]의 꼴로 주어지며 각 구간은 닫힌 구간입니다. 닫힌 구간은 양 끝값과 그

bluedayj.tistory.com

 

 

[코딩테스트 Lv.0] 배열 만들기 5

문제 설명문자열 배열 intStrs와 정수 k, s, l가 주어집니다. intStrs의 원소는 숫자로 이루어져 있습니다.배열 intStrs의 각 원소마다 s번 인덱스에서 시작하는 길이 l짜리 부분 문자열

bluedayj.tistory.com

 

 

[코딩테스트 Lv.0] 배열 만들기 6

문제 설명0과 1로만 이루어진 정수 배열 arr가 주어집니다. arr를 이용해 새로운 배열 stk을 만드려고 합니다.i의 초기값을 0으로 설정하고 i가 arr의 길이보다 작으면 다음을 반복합

bluedayj.tistory.com

 

728x90
반응형