5/29 TIL

·2024년 5월 29일

오늘도 강의를 듣고 알고리즘, SQL을 했다.
천천히 강의를 이해하면서 들으면 제한시간 내에 과제를 시작하지 못할것같아 일단 빠르게 훑고 넘어가고, 강의자료, 구글링을 통해 과제 제출한 후 천천히 들으면서 실습하기로 했다.


오늘의 알고리즘 문제는 약수의 개수와 덧셈 이었다.

두 정수 left와 right가 매개변수로 주어집니다. 
left부터 right까지의 모든 수들 중에서, 
약수의 개수가 짝수인 수는 더하고, 
약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.

제한사항
1 ≤ left ≤ right ≤ 1,000

문제는 위와 같다.

만약 i가 제곱근을 가지고 있다면 약수의 개수가 홀수이고, 그렇지 않다면 약수의 개수가 짝수이다.

Math.sqrt(i)를 통해 i의 제곱근을 계산하고, 강제 형변환 (int)를 통해 제곱근 결과를 정수로 변환한다.

sqrt * sqrt == i로 정수 제곱근을 제곱하여 원래 수와 같은지 확인하고, 같으면 완전 제곱수이므로 약수의 개수가 홀수이다. 그 이외의 경우는 약수의 개수가 짝수이므로 아래와 같이 코드를 짤 수 있다.

class Solution {
    public int solution(int left, int right) {
        int answer = 0;
        
        for (int i = left; i <= right; i++) {
            int sqrt = (int) Math.sqrt(i);
            if (sqrt * sqrt == i) {
                answer -= i;
            } else {
                answer += i;
            }
        } 
        
        
        return answer;
    }
}

오늘의 SQL 문제는 있었는데요 없었습니다 이다.

문제는 아래와 같다.

관리자의 실수로 일부 동물의 입양일이 잘못 입력되었습니다. 
보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 
이때 결과는 보호 시작일이 빠른 순으로 조회해야합니다.

ANIMAL_ID가 중복되는 컬럼이므로 ANIMAL_ID를 통해 JOIN 해줍니다.
보호 시작일 > 입양일이어야 하므로 WHERE A.DATETIME > B.DATETIME을 넣어주고,
보호 시작일이 빠른 순으로 조회하라고 하였으므로 ORDER BY A.DATETIME를 써준다.

제출한 코드는 아래와 같다.

SELECT B.ANIMAL_ID, B.NAME
FROM ANIMAL_OUTS B JOIN ANIMAL_INS A ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.DATETIME > B.DATETIME
ORDER BY A.DATETIME
profile
응애개발자

0개의 댓글