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
- 클라우드에서 도커 실행하기
- 백준 11659
- Spring Web MVC
- 코딩테스트
- 11659
- 싱글톤패턴
- java
- String.valueOf()
- 버블정렬
- 코드스테이츠 백엔드
- GCP
- vm인스턴스생성
- 코드스테이츠
- Spring MVC 구성요소
- 투포인터알고리즘
- 인텔리제이
- MySQL
- 재귀와반복문
- 성능테스트툴
- List.of
- 구간합구하기
- 스택
- 재귀함수
- Spring MVC 동작원리
- OOP
- 자바
- 프로그래머스
- Array.asList
- 백준
- 알고리즘
Archives
- Today
- Total
순간을 기록으로
[자바] 3진법 뒤집기 본문
문제
https://programmers.co.kr/learn/courses/30/lessons/68935
느낀점
오랜만에 진법 문제를 푸니깐 낯선 느낌이었다. while문을 이용해서 10진법에서 특정 진법으로 바꾸는 방법을 배웠다. 그리고 특정진법에서 바로 10진법으로 값을 바꾸는 Integer.parseInt(String s, int radix)을 새로 알게 되었다.
풀이
// 1.10진법을 3진법으로 바꾼다
// 2.3진법 문자열을 뒤집는다
// 3.뒤집어진 3진법을 10진법으로 바꾼다.
class Solution {
public int solution(int n) {
String str = "";
// 1.10진법을 3진법으로 바꾼다
while(n>0){ // 몫이 0이 나올 때까지 반복한다
str = (n%3) + str; // 나머지를 문자열 앞에 붙인다.
n = n/3; // 새로 구한 몫을 새로운 값으로 한다
}
// 2. 3진법 문자열을 뒤집는다(StringBuilder클래스 reverse()메소드 이용)
StringBuilder sb = new StringBuilder(str);
str = sb.reverse().toString();
int decimal = 0;
for(int i=0 ; i<str.length(); i++) {
int digit = str.charAt(i) - '0'; // 숫자문자 - '0' = 진짜 숫자
decimal += (digit) * Math.pow(3, str.length()-(i+1));
}
return decimal;
}
}
십진법 45를 3진법으로 바꾸려면 45를 몫이 0이 될 때까지 3으로 나누고 나온 나머지를 반대로 적어주면 된다.
45 / 3하면 몫:15 나머지 0
15 / 3하면 몫:5 나머지 0
5 / 3하면 몫:1 나머지 2
1 / 3하면 몫:0 나머지 1
이렇게 나오면 몫이 0일 때 반복을 멈추고 나머지를 거꾸로 붙여주면 해당 진법의 값으로 바뀐다.
3진법을 이렇게 구하고 구한 진법을 뒤집을 때에는 StringBuilder 클래스의 reverse() 메소드를 사용한다.
해당 메소드를 사용하기 위해 String 자료형을 StringBuilder 자료형으로 바꿔야 되는데. StringBuilder 객체를 생성할 때 실인자로 String 형을 넣으면 만들 수 있다.
마지막으로 특정 진법에서 10진법으로 바꾸는 방법은 위의 코드 방법처럼 하는게 있고 다른 풀이를 보니 더 간단힌 방법이 있었다. Integer.parseInt(Stirng s, int radx)를 사용하면 특정 진법에서 10진법으로 바꿀 수 있다.
'Problem Solving' 카테고리의 다른 글
[프로그래머스] 내적 (0) | 2021.12.02 |
---|---|
백준 자바 2748 피보나치 수2 (0) | 2021.11.12 |
[코딩테스트] 상위 n개 레코드 (0) | 2021.11.11 |
[JAVA] 좌표 압축 18870번 (0) | 2021.11.10 |
[프로그래머스] 이름이 없는 동물의 아이디 (0) | 2021.11.09 |
Comments