1. 문제 설명
2. 문제 풀이 핵심이라 생각하는 점
- 엘리베이터 버튼은 절댓값이 10c (c ≥ 0 인 정수) 형태인 정수들이라는 점
- 더해서 10을 만들던지 / 빼서 0을 만들던지 해야 하는데
- 10을 만들면 위의 자릿수는 +1 된다는 점과 값이 5일 때의 처리가 관건
- 5보다 작다면 빼서 0을 만드는 것이 최소 횟수 일 것이고
- 5보다 크다면 더해서 10을 만드는 것이 최소 횟수 일 것이다.
- 5일 때는? - 한 자릿수 높은 값을 체크해보아야한다. ( 일의 자리면 십의 자릿수 체크 )
- 한 자릿수 높은 값이 5보다 크거나 같다면? 10을 만들어 주는 것이 좋다. ( 수 증가로 더하는 횟수 감소 )
- 한 자릿수 높은 값이 5보다 작다면? 0을 만들어 주는 것이 좋다. ( 빼는 횟수 감소 )
3. 정답 코드 확인 및 활용 메소드 체크
3-1 : 정답 코드 확인
class Solution {
public int solution(int storey) {
int answer = 0;
//0층에 도달하면 종료
while(storey != 0) {
//1의 자릿수의 값이 5보다 크다면-같다면-작다면에 따라 처리
if(storey%10 > 5 ) {
answer += (10 -(storey%10));
storey += 10;
}else if(storey%10 == 5 && storey%100 != 0 && storey%100 >= 50) {
answer += 5;
storey += 10;
}else {
answer += storey%10;
}
storey /= 10;
}
return answer;
}
}
4. 공부하고 싶은 다른 분의 풀이
- 재귀 함수... 너란 녀석..
- 공부하자.
class Solution {
public int solution(int storey) {
if (storey <= 5) return storey;
int r = storey % 10;
int q = storey / 10;
return Math.min(r + solution(q), 10 - r + solution(q + 1));
}
}
'Programmers > JAVA' 카테고리의 다른 글
[ 프로그래머스 ] 가장 가까운 같은 글자 - Java (0) | 2023.01.13 |
---|---|
[ 프로그래머스 ] JadenCase 문자열 만들기 - Java (0) | 2023.01.10 |
[ 프로그래머스 ] 숫자 문자열과 영단어 - Java (0) | 2023.01.06 |
[ 프로그래머스 ] 비밀지도 - Java (0) | 2023.01.06 |
[ 문자열 중복제거 ] , [ 문자배열 중복제거 ] (0) | 2022.12.31 |