https://programmers.co.kr/learn/courses/30/lessons/68935
문제 설명
- 자연수 n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return
제한 사항
- n은 1 이상 100,000,000 이하인 자연수입니다.
자꾸 런타임 에러가 뜨길래 질문하기 답변을 보니까 계산 도중 int형 변수의 값이 너무 커져서 long을 써야 한다길래 무작정 반환형을 long으로 바꿔버렸다. 하지만 이렇게 하면 안된다..!
풀이 방법을 설명해보자면,
- 숫자 n을 3으로 나눈 나머지 값을 문자열로 변환시켜 문자열 변수에 계속 더했다.
- 반복문을 통해 얻은 str 변수를 앞 뒤 반전시킬 필요 없이 long으로 형 변환시켜준다.
- 형 변환시킨 변수 num을 일의 자리부터 3진법으로 계산해준다.
예를 들어 num이 21일 경우,
answer = 0+ (21%10=1)*3^0 , i=0+1; num=21/10=2
answer = 1+ (2%10=2)*3^1 , i=1+1; num=2/10=0
이므로 answer = 7이다.
내 코드
class Solution {
public long solution(int n) {
int answer = 0;
String str = "";
while(n>0){
str += Integer.toString(n%3);
n/=3;
}
long num = Long.parseLong(str);
int i=0;
while(num>0){
answer += (long)((num%10)*Math.pow(3,i));
i++;
num/=10;
}
return answer;
}
}
검색해보니까 문자열을 숫자형으로 변환할 때 두 번째 인자에 진수 값을 입력하면 알아서 해당 진수에 맞춰 Integer형으로 반환해준다고 한다!..
그래서 다시 풀었더니 성공
다른 풀이
class Solution {
public int solution(int n) {
int answer = 0;
String str = "";
while(n>0){
str += Integer.toString(n%3);
n/=3;
}
answer = Integer.parseInt(str,3);
return answer;
}
}
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[Java] 프로그래머스 > 콜라츠 추측 (0) | 2022.02.04 |
---|---|
[Java] 프로그래머스 > 2016년 (0) | 2022.02.02 |
[Java] 프로그래머스 > 문자열 내 마음대로 정렬하기 (0) | 2022.02.01 |
[Java] 프로그래머스 > 문자열 내림차순으로 배치하기 (0) | 2022.01.30 |
[Java] 프로그래머스 > 문자열 내 p와 y의 개수 (0) | 2022.01.30 |
댓글