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 |
Tags
- Java
- 스프링 컨테이너
- 코딩테스트
- 백준 javascript
- 리눅스마스터 1급 정리
- 자바
- 백준 java
- 개발자 회고록
- 리눅스마스터 3과목
- 연습문제
- 카카오
- Linux
- 스프링 빈
- 명령어
- GoingBus
- 고잉버스
- 자바스크립트 코딩의 기술
- Kotlin
- 리눅스마스터1급
- java 백준 1차원 배열
- map
- Memoir
- 반복문
- 리눅스
- 코테
- 문자열
- 프로그래머스
- toCharArray
- JavaScript
- 월간코드챌린지
Archives
- Today
- Total
hoon's bLog
Java 프로그래머스 3진법 뒤집기 자바 본문
반응형
문제출처 : https://programmers.co.kr/learn/courses/30/lessons/68935
[나의 풀이]
- 최초 값 n에 대해 3진법으로 변환하여 String으로 저장하는 로직(while문)
- 앞뒤 반전을 위한 로직(for문)
- 반전한 3진법 String을 한자리씩 잘라 10진법으로 변환(for문)
public class Solution03 {
public int solution(int n) {
int answer = 0;
String org = ""; //원래 입력한 10진법
String chg = "";
while(n > 0){ //3진법 만드는 로직
org = (n%3) + org; //3 나눈 나머지 스트링으로 더하기
n /= 3; //3 나눈채로 저장하고 반복
}
for (int i=0; i<org.length(); i++){
chg = org.substring(i, i+1) + chg; //위치별로 자른 스트링값을 순차적으로 뒤쪽부터 저장
}
for (int j=0; j<chg.length(); j++){
int tmp =0;
//스트링 앞자리부터 Integer로 변환
tmp = Integer.parseInt(chg.substring(j, j+1));
//0*3^3 + 0*3^2 + 2*3^1 + 1*3^0 = 7
answer += tmp * (int) Math.pow(Double.parseDouble("3"), Double.parseDouble(String.valueOf(chg.length()-j-1)));
}
return answer;
}
}
반복문이 덕지덕지한 미친 코드...
과연 다른 분들은 어떻게 하셨을까??
[다른사람의 풀이-1]
class Solution {
public int solution(int n) {
int answer = 0;
String num = "";
while(n > 0) { //애초에 거꾸로 String을 저장함으로써 for문 하나 절약...
num = n%3 + num;
n /= 3;
}
for(int i = 0; i < num.length(); i++) {
//getNumericValue 메서드를 통해 num의 char형 숫자를 int형으로 바꾸어 곱해준다!!!!!
answer += Math.pow(3, i) * Character.getNumericValue(num.charAt(i));
}
return answer;
}
}
[다른사람의 풀이-2]
class Solution {
public int solution(int n) {
String a = "";
while(n > 0){ //여기까지는 동일
a = (n % 3) + a;
n /= 3;
}
//StringBuilder.reverse를 사용하여 뒤집기....
a = new StringBuilder(a).reverse().toString();
return Integer.parseInt(a,3);
}
}
정리
- n진법으로 만드는 로직은 반드시 기억할 것!
- 문자열을 뒤집는데는 여러 방식들이 존재하나 반복문의 반복을 피할 것!
개인피셜 난이도 : ★☆☆☆☆
1레벨이라 그런지 아직 난이도의 큰 어려움은 없다.
하지만 다른 사람들의 풀이는 이게 난이도 1의 생각일까 싶을 정도로 단순하고 간결하다!
(아마 이 분들은 난이도 1로도 생각 안하실듯...)
다른 사람들의 코드 분석을 통한 내 코드 리뷰는 언제나 처참한 것 같다....
이 처참함의 역치를 점점 낮춰 가는 것이... 이 세계에서 살아남는 길인듯하다...
끝!
728x90
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
Java 프로그래머스 없는 숫자 더하기 자바 (0) | 2022.06.12 |
---|---|
Java 프로그래머스 3진법 뒤집기 자바 (0) | 2022.06.11 |
Java 프로그래머스 음양 더하기 자바 (0) | 2022.06.11 |
Java 프로그래머스 내적 자바 (0) | 2022.06.10 |
Java 프로그래머스 두 개 뽑아서 더하기 자바 (0) | 2022.06.03 |