Coding History

2024. 06. 17 문제 풀이

BlackBirdIT 2024. 6. 18. 08:51

일단 바로 문제부터 보자.

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

class Solution {
    public long solution(long n) {

        for (long i = 1; i <= n; i++){
            if(n / i == Math.sqrt(n)){
                n = Math.sqrt(n);
                return n * n;
            }

        }

        return -1;
    }
}

풀고 있던거 그대로 복사해서 위의 코드는 당연히 정답이 아니고 자바 루트 코드를 활용해 보려고 했는데 타입 미스매치가 나서 못하고 있다.

class Solution {
    public long solution(long n) {
        long m = (long)Math.sqrt(n); //이렇게 하면 바로 long 타입으로 계산한다.
        if (m * m == n){
            long x = m + 1;
            return x * x;
        }
        return -1;
    }
}

일단 내 테스트 케이스는 통과했다. 저걸 우연히 찾았고, 저 방법을 찾으니까 바로 푸는 방법이 보였다. 아마 강사님이 제곱근을 하는 코드가 있다는 것을 귀뜸해주지 않았다면 한참 붙잡고 있었을 것 같다. 맨 처음 코드 꼬라지를 보면 제곱근 자체를 만들어보려는 시도속에서 저 코드를 알아내서 저 코드를 활용해보려고 덮어 쓰고 있었다..

아무튼 생각보다 너무 빨리 끝내서 한문제만 더 풀고 가는게 좋겠다.
난 아직 응애니까 다시 0레벨로 돌아가자구.

//정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요.
class Solution {
    public int[] solution(int n) {
        int[] answer = {};
        return answer;
    }
}

이런 문젠데 배열을 오름차순?? 이거 예전에 했던거다 반복문으로 홀수만 배열값에 넣으면 금방 끝날 것 같다.

class Solution {
    public int[] solution(int n) {
        // 홀수 개수 구하기
        int x = (n + 1) / 2;
        //홀수 개수 만큼 배열 생성
        int[] odd = new int[x];

        // 홀수 값 배열에 채우기
        for (int i = 0, num = 1; i < x; i++, num += 2) {
            odd[i] = num;
        }

        return odd;
    }
}

내가 실수로 배열을 초기화 해버려서 오래걸렸다. 배열 초기화해서 n값을 넣어도 0만 n값 개수만큼 나왔는데 그게 for 문을 잘못 써서 배열을 초기화 해버려서 그런거였다.. 그래서 앞에 홀수 값을 먼저 세는 코드는 추가해서 값을 넣고 for문을 수정했다.

for(int i = 0; i < odd.length; i++) {
        if(odd[i] % 2 == 1) {
            return odd;
        }

    }
    return odd;
}

이게 문제가 됐던 코드인데 여기서 조건문을 사용할 때 배열의 값을 채우지 않고 조건을 걸어서 그렇다.

그래서 이미 난 홀수 값을 저장했고, 그걸 활용해 보려고 for문에서 처음으로 변수를 두개씩 사용해봤다. 쉽지 않았다..(생각해보니까 오름차순 정렬은 쓰지도 않았다)

if문도 넣어서 해결해봤다.

class Solution {
    public int[] solution(int n) {
        // 홀수 개수 구하기
        int x = (n + 1) / 2;
        // 홀수 개수만큼 배열 생성
        int[] odd = new int[x];

        // 홀수 값을 배열에 채우기
        int num = 1; // 첫 번째 홀수 값
        for (int i = 0; i < odd.length; i++) {
            if (num % 2 != 0) { // num이 홀수인 경우에만 배열에 저장
                odd[i] = num;
            }
            num += 2; // 다음 홀수로 넘어감
        }

        return odd;
    }
}

암튼 이렇게 오늘 끝 제대로 밥을 못먹어서 너무 배고프다 얼른 집 가서 밥 먹어야지.