🍎 How's the day going?
강의 듣게 되니깐 정리하긴 해야하는데.. 개인 과제 빨리 하고 싶어서.. 일단 강의 다 듣는 것만 목표로 하고, 오늘은 코드카타 관련 해서만 정리하자! 강의 듣는 것은 힘들

🍊코드카타 목록
- 카테고리 별 상품 개수 구하기
- 고양이와 개는 몇 마리 있을까
- 입양 시각 구하기(1)
- 진료 과목 총 예약 횟수 출력하기
- 12세 이하인 여자 환자 목록 출력하기
- 기사단원의 무기
- 로또의 최고 순위와 최저 순위
- 옹알이(2)
💡오늘 정리 목록
- SQL 문자열 함수 정리
- SQL 날짜/ 시간 함수 정리
- SQL CASE WHEN 정리
🚩오늘의 회고
코드카타
1) 카테고리 별 상품 개수 구하기
- 문자열 함수 left 사용, count 함수 사용 체크
-- 코드를 입력하세요
SELECT left(PRODUCT_CODE, 2) AS CATEGORY, COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY CATEGORY
ORDER BY CATEGORY
2) 고양이와 개는 몇 마리 있을까
- count 함수, 그룹화
-- 코드를 입력하세요
SELECT ANIMAL_TYPE , COUNT(*) AS count
FROM ANIMAl_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE
3) 입양 시각 구하기(1)
- 시간 관련 함수 HOUR, 그룹화
-- 코드를 입력하세요
SELECT HOUR(DATETIME) AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR HAVING HOUR >= 9 AND HOUR <20
ORDER BY HOUR ASC
4) 진료 과목 총 예약 횟수 출력하기
- where 함수, count, 그룹화
-- 코드를 입력하세요
SELECT MCDP_CD as 진료과코드, COUNT(*) AS 5월예약건수
FROM APPOINTMENT
WHERE MONTH(APNT_YMD) = 5
GROUP BY MCDP_CD
ORDER BY 5월예약건수, 진료과코드
5) 12세 이하인 여자 환자 목록 출력하기
- CASE WHEN 문제랑 밑 정렬 WHERE 문
-- 코드를 입력하세요
SELECT PT_NAME, PT_NO, GEND_CD, AGE,
CASE WHEN TLNO IS NULL THEN 'NONE'
ELSE TLNO END AS TLNO
FROM PATIENT
WHERE AGE <= 12 AND GEND_CD = 'W'
ORDER BY AGE DESC, PT_NAME ASC
6) 기사단원의 무기
- 약수를 구하는 함수 였는데, 시간 초과 관려 해서 신경 썻어야 하는 문제
- LIMIT 을 이용하고 SQRT 제곱근을 사용해서 시간을 줄였다.
class Solution {
public int solution(int number, int limit, int power) {
int answer=0;
for(int i=1;i<=number;i++){
int cnt = count(i,limit,power);
answer+=cnt;
}
return answer;
}
public int count(int number,int limit,int power){
if (number==1) return 1;
int cnt =0;
double s= Math.sqrt(number);
int k= (int)s;
if(s==k){
cnt-=1;
}
for(int i=1;i<=k;i++){
if(number%i==0) cnt+=2;
if(cnt>limit) return power;
}
return cnt;
}
}
-BEST 풀이 베스트 풀이가 좋아서 쓴다
- Best 풀이 방식은 미리 정해진 범위 까지 약수의 개수를 구하고 그걸 가져오는 방식을 취했다 굿굿
class Solution {
public int solution(int number, int limit, int power) {
int[] count = new int[number + 1];
for (int i = 1; i <= number; i++) {
for (int j = 1; j <= number / i; j++) {
count[i * j]++;
}
}
int answer = 0;
for (int i = 1; i <= number; i++) {
if (count[i] > limit) {
answer += power;
} else {
answer += count[i];
}
}
return answer;
}
}
7) 로또의 최고 순위와 최저 순위
- 기본 적으로 주어진 숫자가 얼마나 맞은 지 확인 후
- 0일 때 얻을 수 있는 추가 등수만 더해주면 되는 문제
- 그리고 등수에서 조건문 체크만 필요한 문제였다. 솔직히 3개 중에 젤 쉬웠다.
class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
int cnt=0;
int cnt0=0;
for(int i:lottos){
if(i==0) cnt0++;
for(int j:win_nums){
if(i==j) cnt++;
}
}
cnt0+=cnt;
if(cnt<2) cnt=1;
if(cnt0<2) cnt0=1;
int[] a = new int[2];
if(cnt0>6) cnt0=6;
a[0]=7-cnt0;
a[1]=7-cnt;
return a;
}
}
8) 옹알이(2)
- 처음에는 생각보다 고민을 많이 했는데
- 문제를 보면 주어진 단어 앞 글자가 4가지가 다 달라서 그것만 활용할 수 있으면 쉬운 문제였다.
import java.util.*;
class Solution {
public int solution(String[] babbling) {
HashMap<Character,String> words = new HashMap<>() {{
put('a',"aya");
put('y',"ye");
put('w',"woo");
put('m',"ma");
}};
int answer = 0;
for(String s: babbling) {
char prev='\u0000';
int i=0;
for(;i<s.length();) {
if(prev==s.charAt(i)) break;
String word = words.getOrDefault(s.charAt(i),"");
if(word.equals("")) break;
String curStr = s.substring(i,Math.min(s.length(),i+word.length()));
if(curStr.equals(word)) {
prev = s.charAt(i);
i+= word.length();
} else break;
}
if(i==s.length()) answer++;
}
return answer;
}
}
오늘 정리 목록
1) SQL 문자열 함수 정리
1. LEN(): 문자열의 길이를 반환합니다.
SELECT LEN('Hello'); -- 5
2. LEFT(): 문자열의 왼쪽에서 지정된 수만큼의 문자를 반환합니다.
SELECT LEFT('Hello', 3); -- 'Hel'
3. RIGHT(): 문자열의 오른쪽에서 지정된 수만큼의 문자를 반환합니다.
SELECT RIGHT('Hello', 3); -- 'llo'
4. SUBSTRING() 또는 SUBSTR(): 문자열의 일부를 반환합니다.
SELECT SUBSTRING('Hello', 2, 3); -- 'ell'
-- 또는
SELECT SUBSTR('Hello', 2, 3); -- 'ell'
5. UPPER(): 문자열을 모두 대문자로 변환합니다.
SELECT UPPER('hello'); -- 'HELLO'
6. LOWER(): 문자열을 모두 소문자로 변환합니다.
SELECT LOWER('HELLO'); -- 'hello'
7. LTRIM(): 문자열의 왼쪽에서 공백을 제거합니다.
SELECT LTRIM(' Hello'); -- 'Hello'
8. RTRIM(): 문자열의 오른쪽에서 공백을 제거합니다.
SELECT RTRIM('Hello '); -- 'Hello'
9. TRIM(): 문자열의 양쪽 끝에서 공백을 제거합니다.
SELECT TRIM(' Hello '); -- 'Hello'
10. REPLACE(): 문자열 내의 특정 문자 또는 문자열을 다른 문자 또는 문자열로 대체합니다.
SELECT REPLACE('Hello, World!', 'World', 'Universe'); -- 'Hello, Universe!'
11. CONCAT(): 문자열을 연결합니다.
SELECT CONCAT('Hello', ' ', 'World'); -- 'Hello World'
12. CONCAT_WS(): 문자열을 지정된 구분자로 연결합니다.
SELECT CONCAT_WS(', ', 'John', 'Doe'); -- 'John, Doe'
2) SQL 날짜/ 시간 함수 정리
1. GETDATE() 또는 CURRENT_TIMESTAMP: 현재 날짜와 시간을 반환합니다.
SELECT GETDATE();
-- 또는
SELECT CURRENT_TIMESTAMP;
2. DATEADD(): 날짜에 일, 주, 월, 연 등을 추가합니다.
SELECT DATEADD(day, 7, '2024-05-13'); -- '2024-05-20'
3. DATEDIFF(): 두 날짜 간의 차이를 구합니다. 일, 주, 월 등의 단위로 결과를 반환합니다.
SELECT DATEDIFF(day, '2024-05-01', '2024-05-13'); -- 12
4. DATEPART(): 날짜 또는 시간에서 지정된 부분(년, 월, 일 등)을 추출합니다.
SELECT DATEPART(year, '2024-05-13'); -- 2024
5 . YEAR(): 날짜에서 연도를 추출합니다.
SELECT YEAR('2024-05-13'); -- 2024
6 . MONTH(): 날짜에서 월을 추출합니다.
SELECT MONTH('2024-05-13'); -- 5
7 . DAY(): 날짜에서 일을 추출합니다.
SELECT DAY('2024-05-13'); -- 13
8 . FORMAT(): 날짜를 지정된 형식으로 포맷팅합니다. (주의: 이 함수는 모든 DBMS에서 지원되지 않을 수 있습니다.)
SELECT FORMAT('2024-05-13', 'yyyy/MM/dd'); -- '2024/05/13'
9 . DATE_FORMAT(): MySQL에서 사용되는 함수로, 날짜를 지정된 형식으로 포맷팅합니다.
SELECT DATE_FORMAT('2024-05-13', '%Y-%m-%d'); -- '2024-05-13'
3) SQL CASE WHEN 정리
CASE WHEN 구문은 SQL에서 조건부로 값을 반환하는 데 사용됩니다. 다른 프로그래밍 언어에서의 switch 또는 if-else 문과 유사한 역할을 합니다. 간단한 형태로는 다음과 같이 사용됩니다:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END
여기서 condition1, condition2 등은 각각의 조건이며, 해당 조건이 만족될 때 result1, result2 등이 반환됩니다. ELSE 절은 모든 조건이 만족되지 않을 때 반환할 기본값을 정의합니다.
조건은 비교 연산자나 논리 연산자를 사용하여 정의할 수 있습니다.
예제 : 이름, 나이(18미만은 마이너, 18이상 65 미만은 어덜트, 나머진 시니어) 속성 명은 AGE_GROPU으로 표기
SELECT
name,
CASE
WHEN age < 18 THEN 'Minor'
WHEN age >= 18 AND age < 65 THEN 'Adult'
ELSE 'Senior'
END AS age_group
FROM
person;
오늘의 회고
바쁘다.. 빨리 강의 듣고.. 개인 과제 준비해야함