잡초의 일지

[Swift] 프로그래머스 | 코딩테스트 연습 -> 스택/큐 -> 탑 본문

[코딩] 문제풀기/Swift

[Swift] 프로그래머스 | 코딩테스트 연습 -> 스택/큐 -> 탑

JabCho 2020. 7. 25. 03:31
728x90
반응형
SMALL
import Foundation

func solution(_ heights:[Int]) -> [Int] {
    var arr: [Int] = []
    var count: Int = 0
    for var i in 1...heights.count - 1 {        // i는 4부터 1까지
        i = heights.count - i
        for var j in 1...i {                    // j는 i-1부터 0까지
            j = i - j
            if heights[j] > heights[i] {
                arr.insert(j+1, at: 0)
                count = arr.count
                break
            }else{
                count += 1
            }
        }
        if arr.count != count {
            arr.insert(0, at: 0)
        }
    }
    arr.insert(0, at: 0)
    return arr
}

내껄 제출하고 나니까, 10줄정도는 더 짧은 코드가 많았다.

그래서 코드를 더 줄여보려고 한다.

import Foundation

func solution(_ heights:[Int]) -> [Int] {
    var res: [Int] = []
    for i in 0..<heights.count {        // i 는 0부터 4까지
        var numToAppend = 0
        if i == 0 {                     // heights의 첫 element는 무조건 0이기 때문.
            res.append(0)
            continue                    // 밑에꺼 다 무시하고 i += 1을 한다.
        }
        else {
            for j in 0..<i {            // j 는 0부터 i-1까지
                if heights[j] > heights[i] {
                    numToAppend = j + 1     // i-1까지 돌면서 가장 가까운 숫자중에 조건을 만족하는 숫자로 바뀐다.
                }
            }
        }
        res.append(numToAppend)           // 조건에 맞는 숫자를 res배열의 뒤에 더한다.
    }
    return res
}

몇줄 안줄긴 했지만, 난 직관적으로 풀려고 배열 뒤쪽부터 확인했는데, 앞부터 하는 방법도 생각해 보는 계기였다.

 

----------------------------------------------------------------------------------------------------------------------------

생각해보니까 , 스택/큐 섹션인데 스택이나 큐를 안쓴거 같아서 

스택/큐를 이용하면 어떻게 써야 할까 생각해 봤다.

 

----------------------------------------------------------------------------------------------------------------------------

 

 

 

 

 

 

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
728x90
반응형
LIST
Comments