[프로그래머스 C++] 마법의 엘리베이터
[프로그래머스 C++] 마법의 엘리베이터
https://school.programmers.co.kr/learn/courses/30/lessons/148653
해결전략
구현
정답 코드
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int solution(int storey) {
vector<int> level; // 배열에 storey의 끝자리 수부터 순서대로 담는다
while(storey){
level.push_back(storey % 10);
storey /= 10;
}
int cnt = 0;
for (int i = 0; i < level.size(); i++) // 끝자리 수부터 차례대로 검사
{
if (level[i] == 10){
if (i == level.size() - 1) cnt += 1;
else
level[i + 1] += 1; // 앞자리 수에 +1
}
else if (5 < level[i] && level[i] < 10) {
cnt += 10 - level[i];
if (i == level.size() - 1) cnt += 1;
else
level[i + 1] += 1; // 앞자리 수에 +1
}
else if (5 == level[i]){
if (i < level.size() - 1 && 5 <= level[i + 1]) {
cnt += 10 - level[i];
if (i == level.size() - 1) cnt += 1;
else
level[i + 1] += 1; // 앞자리 수에 +1
}
else
cnt += level[i];
}
else {
cnt += level[i];
}
}
return cnt;
}
int main()
{
cout << solution(16) << "\n"; // 6
cout << solution(2554) << "\n"; // 16
cout << solution(5999) << "\n"; // 6
cout << solution(5556) << "\n"; //
cout << solution(6000) << "\n"; // 5
cout << solution(678) << "\n"; // 8
cout << solution(999) << "\n"; // 8
cout << solution(646) << "\n"; // 13
cout << solution(545) << "\n"; // 14
return 0;
}
어느 고수의 간결한 Version
#include<algorithm>
using namespace std;
// 주어진 숫자 각 자릿수를 최소화하는 데 필요한 비용을 계산하는 재귀 함수
int Calculate(int x)
{
if(x < 10) // 만약 문제에서 주어진 입력값이 10보다 작다면, 숫자를 그대로 두거나 0으로 변경하는 데 필요한 비용 중 작은 값을 반환
return min(x, 10-x+1);
// 현재 숫자의 일의 자릿수(a)와 일의 자릿수를 0으로 만드는 데 필요한 비용(b)를 계산
int a = x % 10;
int b = 10 - x % 10;
// 현재 숫자의 일의 자릿수를 그대로 두거나 0으로 변경하는 두 가지 경우를 고려하며, 이 중 더 작은 비용을 반환
return min(Calculate((x-a)/10)+a, Calculate((x+b)/10)+b);
}
int solution(int storey) {
return Calculate(storey);
}
'⭐ 코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 C++] 행렬 테두리 회전하기 (0) | 2023.12.06 |
---|---|
[프로그래머스 C++] 줄 서는 방법 (0) | 2023.11.29 |
[프로그래머스 C++] 수식 최대화 (0) | 2023.11.23 |
[프로그래머스 C++] 괄호 변환 (0) | 2023.11.22 |
[프로그래머스 C++] [3차] 방금그곡 (2) | 2023.11.21 |
댓글
이 글 공유하기
다른 글
-
[프로그래머스 C++] 행렬 테두리 회전하기
[프로그래머스 C++] 행렬 테두리 회전하기
2023.12.06 -
[프로그래머스 C++] 줄 서는 방법
[프로그래머스 C++] 줄 서는 방법
2023.11.29 -
[프로그래머스 C++] 수식 최대화
[프로그래머스 C++] 수식 최대화
2023.11.23 -
[프로그래머스 C++] 괄호 변환
[프로그래머스 C++] 괄호 변환
2023.11.22