상세 컨텐츠

본문 제목

[프로그래머스] 마법의 엘레베이터

Algorithm

by 쑤야. 2024. 3. 11. 09:08

본문

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

접근


첫 번재 테스트 케이스를 통해 5보다 클 경우, 올림 / 5보다 작거나 같을 경우 내림을 생각했다. 

 

두 번째 테스트 케이스의 경우 2550이 되었을 때, 2600과 2500으로 가는 경우 모두 5개의 돌을 추가로 사용하게 된다. 이후 숫자들을 모두 점검했을 때 해당 테스트 케이스는 이전과 같은 로직으로 올림으로 처리하는 것이 최소값이 되었지마, 다른 테스트 케이스를 생성해 점검이 필요했다. 55를 예시로 들 경우, 이전과 동일하게 50 → 0으로 가는 것보다 60 → 100 → 0 으로 가는 것이 더 최소값이 나온다. 45와 65는 이전과 동일한 로직으로 처리하는 것이 최소값이 나온다. 즉 현재 가리키고 있는 값이 5이고, 이전 값이 5보다 큰 경우에 예외 처리를 해주면 된다. 

 

5보다 큰 경우 올림 / 현재 가리키는 값이 5이고 이전 인덱스도 5보다 클 경우 올림 / 나머지의 경우는 내림

코드


func solution(_ storey:Int) -> Int {
    
    var storey = String(storey).map{ Int(String($0))! }
    var ans = 0
    for i in stride(from: storey.count-1, to: -1, by: -1){
        if storey[i] > 5 {
    	    ans += 10 - storey[i]
    	    if i == 0 {
                ans += 1
            } else {
                storey[i-1] += 1
            }
    	} 
        else if storey[i] == 5 && i > 0 && storey[i-1] >= 5 {
    		storey[i-1] += 1
    		ans += 5
    	} 
        else {
    		ans += storey[i]
    	}
    }
    return ans
}

관련글 더보기