내가 개발해볼게!!
[PRO] 프로그래머스 148653번: 마법의 엘리베이터 본문
https://school.programmers.co.kr/learn/courses/30/lessons/148653
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제

난이도
Level 2
Sol
입력받은 층수 storey의 가장 작은 자리수부터 차례대로 처리한다
- 현재 자리수가 0, 1, 2, 3, 4라면 0이 될 때까지 -1을 반복하는 것이 횟수 측면에서 이득이다
- 해당 자리수가 5라면 다음 자릿수를 보고 판단한다
2-1. 다음 자리수가 0, 1, 2, 3, 4라면 다음 자리수에서 -1 버튼을 누르는 횟수를 감소시키기 위해 해당 자리수에서 -1을 반복한다
2-2. 다음 자리수가 5 이상이라면 다음 자리수에서 +1 버튼을 누르는 횟수를 감소시키기 위해 해당 자리수에서 +1을 반복하고, 다음 자리수에 1을 더해준다 - 해당 자리수가 6, 7, 8, 9라면 10이 될 때까지 +1을 반복하고, 다음 자리수에 1을 더해준다
static int solution(int storey) { // storey 층에서 0층으로 내려가는 데 필요한 마법의 돌의 최소 개수 answer
int answer = 0;
// 작은 자릿수부터 차례대로 정리. 매번 나머지를 계산하면 번거로움이 있으니 배열에 각 자리의 수를 저장
// int형의 배열로 저장하기 위해 int -> String -> char[] -> int[]의 전환 과정을 거친다
String s = String.valueOf(storey);
char[] c = s.toCharArray();
int[] input = new int[c.length];
for(int i=0; i<c.length; i++){
input[i] = c[i] - 48;
}
for(int i=input.length - 1; i >= 0; i--){
int now = input[i];
if(now >= 6){ // 해당 자릿수가 6, 7, 8, 9라면 0이 될 때까지 +1을 해주는 것이 이득
answer += (10 - now);
if(i-1 < 0){
answer++;
} else {
input[i-1]++;
}
}
else if(now <= 4){ // 해당 자릿수가 1, 2, 3, 4라면 0이 될 때까지 -1을 해주는 것이 이득
answer += now;
}
else if(now == 5){ // 해당 자릿수가 5라면 다음 자릿수를 보고 판단
if(i-1 < 0){ // 해당 자릿수가 마지막 자릿수라면
answer += now;
} else{
if(input[i-1] < 5){
answer += now;
} else {
answer += now;
input[i-1]++;
}
}
}
}
return answer;
}
'Algorithm > Programmers' 카테고리의 다른 글
[PRO] 프로그래머스 155651번: 호텔 대실(Java) (0) | 2023.09.06 |
---|