본문 바로가기
2023년 이전/Codility

Lesson7 StoneWall

by JeongUPark 2020. 6. 7.
반응형

자세한 문제는 여기서 확인

 

이 문제는 문제를 이해하는데 많은 시간을 소모했고 구글링을 통해서 문제를 이해하려해도 문제가 이해가 되지 않았습니다.

 

아무튼 이 문제의 핵심은 

  • 현재 높이 보다 이전 블럭이 낮아질때까지 계속 제거 해 나감.
  • 현재 높이랑 이전 블럭이 같으면 같은 블럭으로 통합 가능 하기 때문에 그냥 유지함.

위 2개 입니다.

 

문제에서 주어진 예제로 설명하자면

 

H[0] = 8, H[1] = 8, H[2] = 5, H[3] = 7, H[4] = 9, H[5] = 8, H[6] = 7, H[7] = 4, H[8] = 8 일 경우 

 

8  count 1

{8, 8} 이때는 높이가 같기 때문에 count는 그래도 입니다.

{8, 8}, 5 인데 5가 8보다 작기 때문에 8을 뺸다. 그리고 새로운 5가 들어갔기 때문에 count는 2

5, 7 count 3

5, 7, 9 count 4

5, 7, 8 count 5

5, {7, 7} count 5

4 count 6

4, 8 count 7 이 됩니다.

 

문제를 이해하면 어려운 code는 아니기 때문에 code를 만들면

 

fun solution(H: IntArray): Int {
    val stack = mutableListOf<Int>()

    var count = 0

    for(i in H.indices){
        while(!stack.isEmpty() && stack.peek() > H[i]){
            stack.pop()
        }
        if(stack.isEmpty()  || stack.peek() < H[i]) {
            stack.push(H[i])
            count++
        }
    }

    return count
}
fun MutableList<Int>.push(num:Int){
    this.add(num)
}
fun MutableList<Int>.pop() : Int{ 
    val result = this.last()
    this.removeAt(this.size-1) 
    return result 
}
fun MutableList<Int>.peek() : Int = this.last()

 

 

반응형

'2023년 이전 > Codility' 카테고리의 다른 글

Lesson 10 - MinPerimeterRectangle  (0) 2020.01.27
Lesson 6 - NumberOfDicIntersection  (0) 2020.01.20
Lesson7 - fish  (0) 2020.01.20
Lesson 7 - Nesting  (0) 2020.01.07
Lesson10 - Peaks  (0) 2020.01.06