TIL 제출하기(매일 23:59 까지)
❤️🔥TIL : Today I Learned
매일 저녁, 공부를 마무리하면서 제출해주세요.
하루에 1%씩만 나아가도 4개월 동안 쌓이면 꽤 덩치가 커진답니다 :)
[TIL을 쓰는 이유]
1. 스스로 어제보다 한 발 더 나아갔다는 것을 자각하기
2. TIL을 쓰기 위해서라도, 오늘 반드시 단 하나라도 배우기
3. 꾸준히 기록을 남기는 습관 가지기
알고리즘 코드카타
놀이기구 이용료 계산 문제 해결하기
이번 포스트에서는 놀이기구를 여러 번 탈 때 필요한 총 이용료를 계산하고, 현재 가지고 있는 금액에서 얼마나 모자라는지 계산하는 문제를 해결해보겠습니다.
문제 설명
새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원인데, 놀이기구를 N번째 이용할 때는 원래 이용료의 N배를 받기로 하였습니다. 예를 들어, 처음 이용료가 100원이라면 2번째에는 200원, 3번째에는 300원으로 요금이 인상됩니다.
놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 반환하는 함수 solution을 완성하세요. 단, 금액이 부족하지 않으면 0을 반환하세요.
제한사항
- 놀이기구의 이용료 price: 1 ≤ price ≤ 2,500
- 처음 가지고 있던 금액 money: 1 ≤ money ≤ 1,000,000,000
- 놀이기구의 이용 횟수 count: 1 ≤ count ≤ 2,500
입출력 예
pricemoneycountresult
3 | 20 | 4 | 10 |
---|
입출력 예 설명
입출력 예 #1: 이용 금액이 3인 놀이기구를 4번 타고 싶은 고객이 현재 가진 금액이 20이라면, 총 필요한 놀이기구의 이용 금액은 30 (= 3+6+9+12) 이 되어 10만큼 부족하므로 10을 반환합니다.
해결 방법
이 문제를 해결하기 위해서는 다음과 같은 단계를 밟아야 합니다.
- 놀이기구를 count번 타는 동안 필요한 총 금액을 계산합니다.
- 총 금액에서 가지고 있는 금액 money를 뺀 값을 반환합니다.
- 만약 필요한 금액이 가지고 있는 금액보다 적거나 같으면 0을 반환합니다.
아래는 이 문제를 해결하기 위한 Java 코드입니다.
public class Solution {
public long solution(int price, int money, int count) {
long totalCost = 0;
// 총 필요한 금액 계산
for (int i = 1; i <= count; i++) {
totalCost += price * i;
}
// 필요한 금액에서 현재 금액을 뺀 값을 반환
long shortage = totalCost - money;
return shortage > 0 ? shortage : 0;
}
public static void main(String[] args) {
Solution sol = new Solution();
System.out.println(sol.solution(3, 20, 4)); // 10
}
}
코드 설명
- long totalCost = 0;을 선언하여 총 필요한 금액을 저장할 변수를 초기화합니다.
- for 루프를 사용하여 놀이기구를 count번 타는 동안 필요한 총 금액을 계산합니다.
- 총 금액에서 현재 가지고 있는 금액 money를 뺀 값을 shortage에 저장하고, 부족한 금액이 0보다 크면 그 값을 반환하고, 그렇지 않으면 0을 반환합니다.
SQL 코드카타
입양을 간 동물 중 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회하는 SQL문을 작성하기 위해서는 ANIMAL_INS 테이블과 ANIMAL_OUTS 테이블을 조인한 후, 보호 기간을 계산하고 이를 기준으로 정렬하여 상위 두 마리를 선택하면 됩니다.
테이블 구조
- ANIMAL_INS
- ANIMAL_ID: VARCHAR(N), 동물 ID
- ANIMAL_TYPE: VARCHAR(N), 생물 종
- DATETIME: DATETIME, 보호 시작일
- INTAKE_CONDITION: VARCHAR(N), 보호 시작 시 상태
- NAME: VARCHAR(N), 이름
- SEX_UPON_INTAKE: VARCHAR(N), 성별 및 중성화 여부
- ANIMAL_OUTS
- ANIMAL_ID: VARCHAR(N), 동물 ID
- ANIMAL_TYPE: VARCHAR(N), 생물 종
- DATETIME: DATETIME, 입양일
- NAME: VARCHAR(N), 이름
- SEX_UPON_OUTCOME: VARCHAR(N), 성별 및 중성화 여부
SQL 쿼리
SELECT
INS.ANIMAL_ID,
INS.NAME
FROM
ANIMAL_INS INS
JOIN
ANIMAL_OUTS OUTS
ON
INS.ANIMAL_ID = OUTS.ANIMAL_ID
ORDER BY
OUTS.DATETIME - INS.DATETIME DESC
LIMIT 2;
쿼리 설명
- SELECT 문: ANIMAL_INS 테이블의 ANIMAL_ID와 NAME 컬럼을 선택합니다.
- FROM 문: ANIMAL_INS 테이블을 기준으로 ANIMAL_OUTS 테이블과 조인합니다.
- JOIN 문: 두 테이블을 ANIMAL_ID로 조인합니다.
- ORDER BY 문: OUTS.DATETIME - INS.DATETIME을 기준으로 내림차순 정렬합니다. 여기서 보호 기간은 입양일과 보호 시작일의 차이로 계산됩니다.
- LIMIT 문: 상위 2개의 결과만 선택합니다.
실행 결과
위의 SQL 쿼리를 실행하면, 주어진 예시 데이터에서 다음과 같은 결과를 얻을 수 있습니다:
ANIMAL_IDNAME
A362707 | Girly Girl |
---|---|
A370507 | Emily |
이 쿼리를 통해 입양을 간 동물 중 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 정확히 조회할 수 있습니다.
느낀점
'TIL > 스파르타 코드카타' 카테고리의 다른 글
[내일배움캠프] 본캠프 코드카타 16번 문제 (0) | 2024.09.11 |
---|---|
[내일배움캠프] 사전캠프 코드카타 36번 문제 (0) | 2024.09.03 |
[내일배움캠프] 사전캠프 코드카타 34번 문제 (0) | 2024.09.03 |
[내일배움캠프] 사전캠프 코드카타 33번 문제 (0) | 2024.09.03 |
[내일배움캠프] 사전캠프 코드카타 32번 문제 (0) | 2024.09.03 |