TIL 제출하기(매일 23:59 까지)
❤️🔥TIL : Today I Learned
매일 저녁, 공부를 마무리하면서 제출해주세요.
하루에 1%씩만 나아가도 4개월 동안 쌓이면 꽤 덩치가 커진답니다 :)
\[TIL을 쓰는 이유\]
1\. 스스로 어제보다 한 발 더 나아갔다는 것을 자각하기
2\. TIL을 쓰기 위해서라도, 오늘 반드시 단 하나라도 배우기
3\. 꾸준히 기록을 남기는 습관 가지기
알고리즘 코드카타
문제 설명
자연수 n
이 주어졌을 때, n
을 어떤 자연수 x
로 나누었을 때 나머지가 1이 되는 가장 작은 자연수 x
를 구하는 문제입니다. 즉, n % x == 1
을 만족하는 가장 작은 x
를 찾아야 합니다. 답이 항상 존재함은 증명될 수 있으며, 문제의 제한 조건을 통해 적절한 해를 구할 수 있습니다.
제한 사항
3 ≤ n ≤ 1,000,000
입출력 예
n | result |
---|---|
10 | 3 |
12 | 11 |
입출력 예 설명
입출력 예 #1
n = 10
일 때, 10을 3으로 나눈 나머지가 1입니다. 3보다 작은 자연수 중에서는 조건을 만족하는 수가 없으므로,x = 3
이 답이 됩니다.
입출력 예 #2
n = 12
일 때, 12를 11로 나눈 나머지가 1입니다. 11보다 작은 자연수 중에서는 조건을 만족하는 수가 없으므로,x = 11
이 답이 됩니다.
해결 방법
이 문제는 x
를 1부터 n-1
까지 차례대로 검사하면서, n % x == 1
을 만족하는 가장 작은 x
를 찾는 방식으로 해결할 수 있습니다. for
반복문을 사용해 1부터 차례대로 확인하면, 조건을 만족하는 값을 찾는 즉시 반복을 종료하고 그 값을 반환하면 됩니다.
코드
자바로 작성된 코드는 다음과 같습니다:
public class Solution {
public static int solution(int n) {
// 1부터 n-1까지 탐색하며 n % x == 1을 만족하는 가장 작은 x를 찾음
for (int x = 2; x < n; x++) {
if (n % x == 1) {
return x;
}
}
return -1; // 문제의 조건 상 이 값은 실행되지 않음
}
public static void main(String[] args) {
// 예시 테스트
System.out.println(solution(10)); // 3
System.out.println(solution(12)); // 11
}
}
풀이 과정
- 변수 설정:
x
를 2부터n-1
까지 차례대로 증가시키면서 확인합니다.x = 1
은 나머지가 1이 될 수 없기 때문에 제외합니다. - 반복문:
for
문을 이용해n % x == 1
인 값을 찾습니다. 찾으면 바로 그 값을 반환합니다. - 반환: 조건을 만족하는 가장 작은
x
를 찾으면 반환하고, 찾지 못할 경우-1
을 반환하지만, 문제에서 항상 해가 존재한다고 했으므로 실제로는 이 경우는 발생하지 않습니다.
동작 설명
n = 10
일 때:x = 2
일 때는 나머지가 0입니다.x = 3
일 때는 나머지가 1이므로, 답은 3입니다.
n = 12
일 때:x = 2
부터x = 10
까지는 나머지가 1이 아닙니다.x = 11
일 때 나머지가 1이므로, 답은 11입니다.
SQL 코드카타
문제 설명
ANIMAL_INS
테이블은 동물 보호소에 들어온 동물들의 정보를 저장하는 테이블입니다. 이 테이블에서 동물의 종, 이름, 성별 및 중성화 여부 정보를 동물의 아이디 순으로 조회하는 SQL 쿼리를 작성해야 합니다. 또한, 동물의 이름이 없는 경우(NULL
), 해당 이름을 "No name"
으로 표시해야 합니다.
테이블 구조
- ANIMAL_ID: 동물의 고유 ID (VARCHAR, NOT NULL)
- ANIMAL_TYPE: 동물의 생물 종 (VARCHAR, NOT NULL)
- DATETIME: 보호소에 들어온 날짜 및 시간 (DATETIME, NOT NULL)
- INTAKE_CONDITION: 동물이 들어왔을 때의 상태 (VARCHAR, NOT NULL)
- NAME: 동물의 이름 (VARCHAR, NULL 가능)
- SEX_UPON_INTAKE: 동물의 성별 및 중성화 여부 (VARCHAR, NOT NULL)
문제 요구 사항
- 동물의 생물 종, 이름, 성별 및 중성화 여부를 동물의 아이디 순으로 조회합니다.
- 이름이 없는 경우(
NULL
), 이름을"No name"
으로 표시합니다.
예시
ANIMAL_INS
테이블에 다음과 같은 데이터가 있다고 가정합니다:
ANIMAL_ID | ANIMAL_TYPE | DATETIME | INTAKE_CONDITION | NAME | SEX_UPON_INTAKE |
---|---|---|---|---|---|
A350276 | Cat | 2017-08-13 13:50:00 | Normal | Jewel | Spayed Female |
A350375 | Cat | 2017-03-06 15:01:00 | Normal | Meo | Neutered Male |
A368930 | Dog | 2014-06-08 13:20:00 | Normal | NULL | Spayed Female |
결과는 다음과 같아야 합니다:
ANIMAL_TYPE | NAME | SEX_UPON_INTAKE |
---|---|---|
Cat | Jewel | Spayed Female |
Cat | Meo | Neutered Male |
Dog | No name | Spayed Female |
해결 방법
이 문제를 해결하기 위해 SQL의 IFNULL()
또는 COALESCE()
함수를 사용하여 NULL
값을 "No name"
으로 변환할 수 있습니다. 두 함수 모두 NULL
값을 처리할 때 유용합니다. 그 후, ANIMAL_ID
기준으로 정렬하여 원하는 결과를 도출합니다.
SQL 코드
아래는 문제 요구 사항을 만족하는 SQL 쿼리입니다:
SELECT ANIMAL_TYPE,
COALESCE(NAME, 'No name') AS NAME,
SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
풀이 과정
COALESCE()
함수:NAME
컬럼의 값이NULL
인 경우"No name"
으로 대체합니다.COALESCE()
함수는 첫 번째 인자가NULL
이면 두 번째 인자를 반환합니다.- 컬럼 선택:
ANIMAL_TYPE
,NAME
,SEX_UPON_INTAKE
컬럼을 선택하여 출력합니다. - 정렬: 동물의
ANIMAL_ID
를 기준으로 오름차순 정렬합니다.
동작 설명
COALESCE(NAME, 'No name')
:NAME
컬럼의 값이NULL
이면"No name"
을 반환하고, 그렇지 않으면 기존의NAME
값을 반환합니다.ORDER BY ANIMAL_ID
: 동물의ANIMAL_ID
에 따라 결과를 오름차순으로 정렬하여 출력합니다.
느낀점
'TIL > 스파르타 코드카타' 카테고리의 다른 글
[내일배움캠프] 사전캠프 코드카타 30번 문제 (0) | 2024.09.03 |
---|---|
[내일배움캠프] 사전캠프 코드카타 29번 문제 (0) | 2024.09.03 |
[내일배움캠프] 사전캠프 코드카타 14번 문제 (0) | 2024.08.10 |
[내일배움캠프] 사전캠프 코드카타 13번 문제 (0) | 2024.08.10 |
[내일배움캠프] 사전캠프 코드카타 12번 문제 (0) | 2024.08.10 |