Chapter02/코딩테스트

[ 코딩테스트 ] 정수 내림차순으로 배치하기, 두 정수 사이의 합, 정수 제곱근 판별

EmmaDev_v 2025. 3. 10. 15:40

주말에 넘 머리 비우고있었나

집중 안되서 오늘은 질보다 양으로,, ,,,ㅠ

 

 

 

문제 설명

함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.

제한 조건
n은 1이상 8000000000 이하인 자연수입니다.


입출력 예

n return
118372  873211

 

 

나의 풀이

-> long 을 문자열 배열에 담고, 오름차순으로 정렬한 뒤에 내림차순으로 뒤집기

import java.util.Arrays;

class Solution {
    public long solution(long n) {
        char[] arr = String.valueOf(n).toCharArray();
        Arrays.sort(arr);
        
        StringBuilder sb = new StringBuilder(new String(arr)).reverse();

        return Long.parseLong(sb.toString());
    }
}

 

 

 

 

 


 

 

 

문제 설명
두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.

제한 조건
a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
a와 b의 대소관계는 정해져있지 않습니다.


입출력 예

a b return
3 5 12
3 3 3
5 3 12

 

 

 

나의 풀이

-> 그냥 for문 돌려서 차례대로 쌓으면되는거아님? 삼초컷이구만 

class Solution {
    public long solution(int a, int b) {
        long answer = 0;

        for(int i = a; i< b; i++){
            answer+=i;
        }

        return answer;
    }
}

 

 

응ㅋ 아님 ㅋ 

 

 

수정할 부분 

a와 b의 대소관계는 정해져있지않다고 써있음! 얘네부터 정렬해야함.  문제 잘 읽자 

 

 

class Solution {
    public long solution(int a, int b) {
        long answer = 0;

        int start = Math.min(a, b);
        int end = Math.max(a, b);

        for (int i = start; i <= end; i++) {
            answer += i;
        }

        return answer;
    }
}

 

 

 


 

 

 

문제 설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.

제한 사항
n은 1이상, 50000000000000 이하인 양의 정수입니다.


입출력 예

n return
121 144
3 -1




입출력 예 설명


입출력 예#1
121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.

입출력 예#2
3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.

 

 

 

나의 풀이

-> 생각할거 딱히 없이 시키는대로 단계별로 하면 될듯? 

 

 

class Solution {
    public long getSquareRootSign(long n) {
        double sqrt = Math.sqrt(n);
        return sqrt > 0 ? getSquaredIncrementedRoot(sqrt) : -1;
    }

    public long getSquaredIncrementedRoot(double sqrt){
        sqrt ++;
        return (long) Math.pow(sqrt,2);
    }
}

 

 

 


다른 사람들 풀이 보니까 메서드 이름도 바꾸길래

나도 네이밍까지 고심해서 해봤는데 

왜 틀린 ㅋ 건ㅋ 뎅 ㅗㅠㅠㅗ?

 

 

class Solution {
    public long getSquareRootSign(long n) {
        double sqrt = Math.sqrt(n);
        return sqrt % 1 ==0 ? getSquaredIncrementedRoot(sqrt) : -1;
    }

    public long getSquaredIncrementedRoot(double sqrt){
        sqrt ++;
        return (long) Math.pow(sqrt,2);
    }
}

 

조건에 양수를 넣엇었당

-> 정수로 바꿈 

 

 

나 열받게하려고 둘이 짝짜꿍 햇냐고ㅠ

아니지 내가 문제를 똑바로 읽었어야지

 

 

두개 조건 다 넣어서 수정!!!

class Solution {
    public long solution(long n) {
         double sqrt = Math.sqrt(n);
        return (sqrt >0 && sqrt % 1 == 0) ? getSquaredIncrementedRoot(sqrt) : -1;
    }

    public long getSquaredIncrementedRoot(double sqrt){
        sqrt ++;
        return (long) Math.pow(sqrt,2);

    }
}

 

 

 

 

 

양심리스네 오늘 ㅠ,,

반응형