https://programmers.co.kr/learn/courses/30/lessons/12899
조건
제한 시간 : 1시간 이내
한 번 풀었던 문제였다.
처음 풀 때는 시간을 넉넉히 잡고 푸는 데에만 초점을 두고 풀어서 풀긴 했다.
규칙을 찾기 위해서 계속 써 내려가면서 접근을 했고, 결국 풀었다
이번에는 시간 제한을 두고 풀었다. 하지만, 시간내에 풀지 못했고 접근방식이 잘못 됐었다. 예외처리 해줘야하는 상황이 많아져서 그만 풀고 기존에 풀었던 내 방식을 다시 참고했다.
실패했던 접근방식은
HashMap 을 가지고 10진법을 3진법으로 변환 한 뒤? 각 숫자를 String.charAt 을 통하여 값을 하나씩 뽑아와서
hs.put('0', '4');
hs.put('4', '2');
hs.put('2', '1');
hs.put('1', '4');
이런 식으로 미리 값을 넣어두고, 변환을 해줄 생각을 하였음.
변환하는 방식은
charAt(i + 1) 이 0 일경우 i 번째에 위치한 값을 HashMap 접근하여 value 값으로 변환하는 방식이다.
ex)
9(10)를 3진법으로 변환
-> 100(3)
-> 40
-> 24
결과는 24
이런 식으로 로직을 설계했지만, 0이 연달아 나올 경우에서 예외상황이 발생했고, 로직은 더 복잡해져서 기존 풀이방법을 참고하였다.
Java
import java.util.*;
class Solution {
public String solution(int n) {
StringBuilder convert124Scale = new StringBuilder();
while(n != 0) {
int remainder = n % 3;
if (remainder == 0) {
remainder = 4;
convert124Scale.append(remainder);
n = (n / 3) - 1;
}else {
convert124Scale.append(remainder);
n /= 3;
}
}
return convert124Scale.reverse().toString();
}
}
'PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스 *Java] - 가장 큰 수 (순열로 접근x -> 런타임 에러 발생) (0) | 2022.07.09 |
---|---|
[프로그래머스 *Java] - 더 맵게 (0) | 2022.07.07 |
[프로그래머스 *Java] - 기능개발 (0) | 2022.07.05 |
[프로그래머스 *Java] - 오픈채팅방 (0) | 2022.05.12 |
[프로그래머스 *Java] - 수식 최대화 (0) | 2022.05.12 |