[프로그래머스/Level2] 마법의 엘리베이터 (JAVA)
📖 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
💡 풀이 방식
• 그리디
5를 기점으로 누를 버튼을 다르게 한다.
- 4 이하의 숫자 : (-) 버튼을 누르는 게 빠르다. (내림)
- 5일 때, 앞자리의 숫자가 5 이상이면 올리도록 + 버튼을, 4 이하면 내리도록 - 버튼을 누르게 한다.
(예 : 2450 vs 2550. 2450은 2400 으로 내리는 것이 2500으로 올리는 것보다 빠르기 때문)
if(digit == 5) { // 🔔 [앞자리 숫자 비교]
if(storey % 10 >= 5) { // 앞자리 숫자가 5 이상이면, + 버튼 누르는 게 빠름
answer += (10 - digit);
storey++;
}
else { // 앞자리 숫자가 4 이하면, - 버튼 누르는 게 빠름
answer += digit;
}
}
- 6 이상의 숫자 : (+) 버튼을 누르는 게 빠르다. (올림)
💥 유의사항
- 일의 자리(오른쪽 뒤)부터 숫자를 10 단위로 만들기
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
import java.util.*;
class Solution {
public int solution(int storey) {
int answer = 0;
while(storey > 0) {
int digit = storey % 10;
storey /= 10;
if(digit == 5) { // 🔔 [앞자리 숫자 비교]
if(storey % 10 >= 5) { // 앞자리 숫자가 5 이상이면, 올림. (+ 버튼 누르는 게 빠름)
answer += (10 - digit);
storey++;
}
else { // 앞자리 숫자가 4 이하면, 내림. (- 버튼 누르는 게 빠름)
answer += digit;
}
}
else if(digit > 5) { // 5 이상이면 + 버튼 누르는 게 빠름
answer += (10 - digit);
storey++; // 🔔 다음 자릿수 + 1
}
else { // 4 이하면 - 버튼 누르는 게 빠름
answer += digit;
}
}
return answer;
}
}
|
cs |
➕ 다른 풀이 방식
- DFS 풀이 방식..
import java.lang.*;
class Solution {
int MIN = Integer.MAX_VALUE;
public int solution(int storey) {
int answer = 0;
int level = storey;
DFS(storey, answer, 0);
if (MIN != Integer.MAX_VALUE)
answer = MIN;
return answer;
}
public void DFS(int storey, int cnt, int n) {
if (cnt > MIN) return;
if (storey == 0) {
MIN = cnt;
return;
}
//System.out.println("1 storey=" +storey + ", cnt=" + cnt + ", n=" + n);
int remainder = storey % 10;
storey = storey / 10;
DFS(storey, cnt+remainder, n+1);
//System.out.println("2 storey=" +storey + ", cnt=" + cnt + ", n=" + n);
DFS(storey + 1, cnt + 10 - remainder, n+1);
}
}
💦 어려웠던 점
- 그리디를 오른쪽 뒤쪽(=일의 자리)부터 진행할 생각은 했는데 숫자가 5일 때 앞의 문자까지 고려할 생각을 하지 못 했다.
- 올림 처리할 때 변하는 숫자 처리 HOW...
🧐 새로 알게 된 내용
- 5일 때는 앞의 숫자를 기점으로 내림할지, 올림할지 결정하기
- 올림 처리할 때 앞자리 +1 하는 처리
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
✔ 친절한 설명..💚
프로그래머스 - 마법의 엘리베이터(Java, 자바)
문제 링크 문제 설명 마법의 세계에 사는 민수는 아주 높은 탑에 살고 있습니다. 탑이 너무 높아서 걸어 다니기 힘든 민수는 마법의 엘리베이터를 만들었습니다. 마법의 엘리베이터의 버튼은 특
hy-ung.tistory.com
마법의 엘리베이터 - 프로그래머스 LV2 Java 코딩테스트 연습
문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/148653 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁
mag1c.tistory.com
[프로그래머스] 마법의 엘리베이터
https://school.programmers.co.kr/learn/courses/30/lessons/148653# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞
aainy.tistory.com