
문제
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
처음 마주쳤을때 먼저 어떻게 구할까를 생각하게 되었고 10으로 몫을 구해서 배열에 하나씩 반복하자 라는 생각으로 작성을 시작했다.
for(int i = 0; i<length; i++){
if(n>=10){
b = n%10;
answer[i]=(int)b;
n = n/10;
}else if(n>0 && n<10){
b = n%10;
answer[i] = (int)b;
}
}
하지만 그다음이 문제 였는데 입력된 값의 자릿수를 알아야 반복을 할수 있을텐데 였다.
찾아본 결과 Math 함수를 이용하는 방법을 알게 되었다.
Math.log10()을 이용하는 것인데 이 함수는 받아 온 값이 10승수를 계산 하는 것이다
long length = (long)(Math.log10(n)+1);
int[] answer = new int[(int)length];
+1을 한 이유는 예시의 값은 5자리 이다 하지만 Math.log를 하면 4가 나오게 된다
그 이유는 첫자리는 10의 0승이기 때문에 0부터 4승까지 이므로 4가 출력되어 +1을 더하게 되었다.
문제 설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
루트를 구하는 법 = Math.sqrt()
long x = (long)Math.sqrt(n);
// long 타입의 매개변수를 받았을때
제곱을 구하는 법 = Math.pow({제곱할 수},{몇 제곱 할지 정하기})
if(Math.pow(x,2) == n){
answer = (long)Math.pow(x+1,2);
} else{
answer = -1;
}
문제 설명
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
long answer = 0;
long b;
long length = (long)(Math.log10(n)+1);
String[] a = new String[(int)length];
for(int i=0; i<length; i++){
b = n%10;
a[i] = Integer.toString((int)b);
n = n/10;
}
위와 비슷하게 배열에 하나씩 저장하였다 이번에는 String으로 변환해서 넣게 되었는데
StringBuilder를 사용하기 위해서이다
StringBuilder는 변경 가능한 문자열을 만들어 주기 때문에, String을 합치는 작업을 이용해볼려한다.
사용법 : StringBuilder의 객체를 생성한 후, append()의 인자로 연결하고자 하는 문자열을 넣어서 StringBuilder의 객체를 통해 호출한다. 그리고 출력 시에는 toString()을 붙여야 하고, String 변수에 넣을 때도 마찬가지다.
배열 정렬을 위해 사용하는 함수이다. 배열을 상대로 sort() 함수를 호출하면 해당 배열 내의 값들이 오름차순으로 정렬된다.
결과
Arrays.sort(a);
StringBuilder sb = new StringBuilder();
for(String list : a) sb.append(list);
return Long.parseLong(sb.reverse().toString());
테스트 문제중에 써야되는 함수를 알지 못하고 이런 느낌의 동작을 하면 되지않을까? 하는 구상만 되었고 동작을 하는 함수를 찾아야했다. 좀더 여러 함수들을 알아보고 써보는 시간을 종종 가져서 지식을 늘려봐야겠다.