Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- bfs
- 구현
- 문자열
- 해시맵
- HTTP
- 도커
- spring boot
- 구름LEVEL
- 자료구조
- 스프링
- 백엔드
- 해결
- 배열
- Linux
- spring
- 스프링부트
- 이직
- 프로그래머스
- 명령어
- 스타트업
- 스프링 부트
- Java
- HashMap
- dfs
- 코딩테스트
- 개발자
- docker
- 인텔리제이
- 주니어
- IntelliJ
Archives
- Today
- Total
마이의 개발 블로그
[프로그래머스] 마법의 엘리베이터 (Java) 본문
반응형
예외사항이 너무 많은데 테스트케이스 오픈이 안 되어있어 다른 사람들의 힌트를 참고하여 케이스를 하나씩 때려잡아야 했던 문제이다(코드참조 x). 그래서 그런지 5점이나 주긴 했는데 풀어놓고도 딱히 다른 문제풀이에 도움이 될 것 같진 않다는 인상을 많이 받았다.
- 주어진 숫자 storey를 오른쪽에서부터 한 자리씩 탐색함
- 자릿수가 0~4일 때는 빼서 내림하는게 유리함 (첫 번째 if문)
- 자릿수가 6~9일 때는 더해서 올림하는게 유리함 (두 번째 if문)
- 자릿수가 5일 때
1) 직전 자릿수(현재의 오른쪽 자릿수)가 6 이상일 경우 그 자리(6이상인 자리)에서 올림해서 현재 자릿수를 증가시키는게 유리함 (prev >= 6)
2) 직전 자릿수가 없는 경우(첫 번째 자리인 경우) 그 다음 자릿수(현재의 왼쪽 자릿수)가 5보다 큰 경우 올림하는 게 유리함 (prev == -1)
Note
- 중복을 제거하여 코드 길이를 짧게 작성할 수도 있었지만 내가 작성한 로직의 가시성을 고려하여 이대로 제출했다.
class Solution {
public int solution(int storey) {
int answer = 0;
int prev = -1;
while(storey > 0){
int digit = storey % 10;
if(digit < 5){
answer += digit;
}else if(digit > 5){
answer += 10 - digit;
storey += digit;
}else if(digit == 5){
answer += digit;
if(prev >= 6){
storey++;
}
if(prev == -1){
if((storey / 10) % 10 >= 5){
storey += digit;
}
}
}
storey /= 10;
prev = digit;
}
return answer;
}
}
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 카드 뭉치 (Java) (0) | 2023.02.18 |
---|---|
[프로그래머스] 큰 수 만들기 (Java) (0) | 2023.02.16 |
[프로그래머스] 소수 찾기 (Java) (0) | 2023.02.10 |
[프로그래머스] 가장 큰 수 (Java) (0) | 2023.02.08 |
[프로그래머스] 둘만의 암호 (Java) (0) | 2023.02.04 |
Comments