코딩테스트

[프로그래머스] 빈 배열에 추가, 삭제하기

liz_devel 2025. 1. 24. 12:26

🗒 문제


📝 나의 문제풀이

class Solution {
    fun solution(arr: IntArray, flag: BooleanArray): IntArray {
        val list = mutableListOf<Int>()
         arr.mapIndexed { i,v -> if(flag[i]){repeat(v*2){list.add(v)}
         }else{
             repeat(v){
                 list.removeAt(list.size-1)}
         }
    }
            return list.toIntArray()
}
}

 


📝 다른 사람의 문제 풀이

다른 사람의 문제 풀이는 좋아요 수가 높거나 많은 사람들이 푼 방법 기준으로 첨부하였습니다.

import java.util.*

class Solution {
    fun solution(arr: IntArray, flag: BooleanArray): Stack<Int> {
        val stack = Stack<Int>()

        for (i in arr.indices) {
            for (j in 0 until arr[i] * if (flag[i]) 2 else 1) {
                if (flag[i]) stack.push(arr[i]) else stack.pop()
            }
        }
        return stack
    }
}

🖊 문제 풀이 시 알면 좋을 것

mapIndexed와 반복문 비교

  • mapIndexed: 배열의 인덱스을 동시에 처리할 때 유용.
  • 반복문(for): 코드를 더 명확하고 효율적으로 작성할 수 있음.
val numbers = listOf(10, 20, 30)

// 인덱스와 값을 조합하여 변환
val result = numbers.mapIndexed { index, value -> 
    "Index $index: $value"
}

println(result) // [Index 0: 10, Index 1: 20, Index 2: 30]

repeat 함수

  • 특정 동작을 정해진 횟수만큼 반복 실행.
repeat(3) { println("Hello!") } // "Hello!"가 3번 출력

 

스택(Stack)의 특징

  • LIFO(Last-In-First-Out) 구조:
    • 마지막으로 추가한 요소를 가장 먼저 제거.
  • 주요 메서드:
    • push: 스택에 요소 추가.
    • pop: 스택의 마지막 요소 제거 및 반환.

 

MutableList와 Stack 비교

  • MutableList:
    • 일반적인 리스트처럼 사용.
    • add, removeAt, isEmpty 등 다양한 메서드 제공.
  • Stack:
    • 전통적인 스택 구조로 동작하며, 요소 추가/제거에 특화.

스택과 리스트 선택

  • 문제의 요구 사항에 따라 선택:
    • MutableList: 요소 추가/제거를 자유롭게 할 때.
    • Stack: LIFO 구조를 명확히 드러내야 할 때.
반응형