일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
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
코딩테스트 연습 - 3진법 뒤집기
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수
programmers.co.kr
기존 코드 (성공)
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