[프로그래머스 C++] 마법의 엘리베이터
[프로그래머스 C++] 마법의 엘리베이터
https://school.programmers.co.kr/learn/courses/30/lessons/148653
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
해결전략
구현
정답 코드
#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++] 괄호 변환 (1) | 2023.11.22 |
[프로그래머스 C++] [3차] 방금그곡 (2) | 2023.11.21 |
댓글
이 글 공유하기
다른 글
-
[프로그래머스 C++] 행렬 테두리 회전하기
[프로그래머스 C++] 행렬 테두리 회전하기
2023.12.06[프로그래머스 C++] 행렬 테두리 회전하기 https://school.programmers.co.kr/learn/courses/30/lessons/77485 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해결전략 구현, 브루트 포스 Brute Force 행렬 회전, 시뮬레이션 정답 코드 #include #include using namespace std; vector v; vector answer; void Rotate(int x1, int y1, int x2, int y2, int r, int c) { int minNum = 2147000000; ve… -
[프로그래머스 C++] 줄 서는 방법
[프로그래머스 C++] 줄 서는 방법
2023.11.29 -
[프로그래머스 C++] 수식 최대화
[프로그래머스 C++] 수식 최대화
2023.11.23[프로그래머스 C++] 수식 최대화 https://school.programmers.co.kr/learn/courses/30/lessons/67257 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해결전략 순열 Permutation, 조합 Combination 문자열 do while(next_permutation(v.begin(), v.end())) 정답 코드 #include #include #include using namespace std; vector v; // 숫자 vector oper; // 연산자 long long answer; // 최종 결과… -
[프로그래머스 C++] 괄호 변환
[프로그래머스 C++] 괄호 변환
2023.11.22
댓글을 사용할 수 없습니다.