일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Android
- androidstudio
- bitmap
- BOJ
- Canvas
- CS
- Database
- DBeaver
- DP
- Ecilpse
- Eclipse
- firebase
- git
- github
- GooglePlayServices
- gradle
- IDE
- IntelliJ
- java
- json
- kotlin
- level2
- linux
- mariadb
- MYSQL
- Paint
- permission
- python
- Sorting
- sourcetree
Archives
will come true
[프로그래머스 / Level1] 3진법 뒤집기 (Java) 본문
728x90
문제
https://programmers.co.kr/learn/courses/30/lessons/68935
기존 코드 (성공)
public int solution(int n) {
int answer = 0;
StringBuffer sb = new StringBuffer();
while(n > 0){
sb.append(n % 3); //45 -> 0021 (실제 3진수 값은 1200, 원래라면 뒤집어야 3진수값)
n /= 3;
}
sb.reverse(); //0021 -> 1200
//3진수값 1200을 뒤집은 0021의 10진수 값을 얻어야 하기에, 뒤집지 않은 1200의 앞에서 부터를 3^0, 3^1, ..자리로 취급
for(int i=0; i<sb.length(); i++){
answer += ((int)sb.charAt(i) - '0') * (Math.pow(3, i));
}
return answer;
}
학습 내용
10진수 → n진수
몫이 n보다 작아질 때까지 n으로 나누는 걸 반복. 매 나눗셈에서 산출된 나머지 값을 역순으로 이어붙인 것이 n진수 값
n진수 String → 10진수 int
메서드 | 설명 |
Integer.parseInt(String s, int radix) | radix진수인 s값을 10진수 int값으로 변환 |
public int parseTrit(int n) {
String trit = "";
while(n > 0) {
trit = (n % 3) + trit; //먼저 나온 나머지 값이 뒤로 가야함
n /= 3;
}
return Integer.parseInt(trit, 3);
}
개선 코드 (성공)
public int solution2(int n) {
String trit = "";
//3진법 결과의 거꾸로를 10진수로 변환
while(n > 0) {
trit += (n % 3);
n /= 3;
}
return Integer.parseInt(trit, 3);
}
- 정상적인 3진법 결과는 앞의 나눗셈에서 나온 나머지값이 뒤로 가야 하기 때문에 trit = (n%3) + trit 지만,
본 문제는 3진법을 반대로 뒤집은 값을 10진수로 변환하는 것이기 때문에 trit += (n%3)
728x90
'Algorithm' 카테고리의 다른 글
[프로그래머스 / Level1] 2016년 (Java) (0) | 2021.10.31 |
---|---|
[프로그래머스 / Level1] 다트 게임 (Java) (0) | 2021.10.31 |
[프로그래머스 / Level1] 문자열 다루기 (Java) (0) | 2021.10.30 |
[프로그래머스 / Level1] 소수 찾기 (Java) (0) | 2021.10.30 |
[프로그래머스 / Level1] 시저 암호 (Java) (0) | 2021.10.29 |
Comments