Banner

My Tech Blog (코딩테스트)

오늘의 명언
📑 1. 문제설명💡 2. 접근방식이 문제 핵심은 조건에 따라서 STATUS 라는 컬럼에 다른 결과값을 보여주는 것이다자바에서 조건문으로 IF나 CASE문 쓰는 것처럼 MySQL 에서는 SELECT 절에 CASE 문을 써 줄 수 있다.CASE WHEN 컬럼명 = '조건' THEN '결과값' 해 주면 조건에 따라 다른 결과가 도출된다.그리고 CASE 문을 끝낼 때는 END AS 별칭을 사용한다 만약에 나열한 조건에 해당하지 않는 경우의 기본 값을 주고 싶다면 WHEN 대신 ELSE 절에 기본값을 세팅해 주면 된다. ⭐ 3. 정답코드계속 틀려서 출력은 잘 되는데 왜 틀리나 했더니 MySQL 에서 기본값은 오름차순이었다처음에 내림차순이 기본값이라 생각하고 생략했음ORDER BY BOARD_ID;만 썼더니 계..
📑 1. 문제설명💡 2. 접근방식WHERE절이랑 HAVING 절 쓰임이 너무너무 헷갈린다.  왜 HAVING을 사용하는가? 이 문제에서는 평균 대여 기간(AVG)을 계산한 후 해당 값이 7 이상인 그룹만 필터링해야 한다.평균을 계산하려면 먼저 CAR_ID 별로 그룹화를 해야한다.이후에 조건을 적용할 수 있는 절이 바로 HAVING이다.즉, WHERE 절로는 그룹화 이후의 집계 결과를 필터링할 수 없기 때문에 반드시 HAVING을 사용해야 한다. 언제 WHERE절을 써야 하고, 언제 HAVING 절을 써야 하는지 정말 헷갈린다.이건 SQL 쿼리문 실행 순서와 관련이 있다.FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BYHAVING은 GROUP BY 이후 실행..
📑 1. 문제설명💡 2. 접근방식완전탐색은 안되는 이유문제에서 number≤1,000,000으로 최대 백만자리 숫자가 될 수 있다. number 값이 너무 커서 완전 탐색은 현실적으로 불가능하다. k는 1 이상 len(number) - 1 이하예를 들어, 숫자가 1,000,000자리라면 최대 999,999개의 숫자를 제거해야 한다. 왜 그리디 알고리즘을 써야 하는가?숫자를 한 번만 순회하면서 적절한 숫자를 선택하거나 제거한다. 숫자가 백만 자리여도 1,000,000번의 비교만 하면 되기 때문에 효율이 좋다.문제의 핵심 = '앞에서부터 뒤로 큰 숫자 유지'앞자리부터 순서대로 숫자를 선택하며 큰 숫자를 유지하는 방식으로 풀어야 한다.나는 이중포문으로 풀었는데 다른 분들이 풀이한 걸 보니 스택을 사용해 더..
📑 1. 대소문자 바꿔서 출력하기import java.util.Scanner;public class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String a = sc.next(); System.out.println(swapCase(a)); } public static String swapCase(String str) { StringBuilder result = new StringBuilder(); for(char c:str.toCharArray()) { if(Character.isUpperCase(c) ) { resu..
📑 1. 문제설명💡 2. 접근방식문제에서 주어진 매개변수- 수열을 나타내는 정수 배열 `sequence`- 부분 수열의 합을 나타내는 정수 `k` 조건을 만족하는 부분 수열의 시작 인덱스와 마지막 인덱스를 배열로 return하는 solution 함수를 작성하는 문제 투포인터, 슬라이딩 윈도우 알고리즘으로 푼다.- start: 윈도우의 시작 인덱스- end: 윈도우의 끝 인덱스 (or 다음 탐색할 위치) `투포인터`하나의 포인터는 배열의 시작을, 다른 하나는 배열의 끝을 가리키며 시작특정 조건을 만족하는 구간을 찾는것이다. `슬라이딩 윈도우 알고리즘`부분 배열, 부분 문자열 문제에서 자주 사용되는 알고리즘으로 조건을 만족하는 구간을 찾거나, 고정된 크기 구간의 합계, 최대값, 최소값 등을 구할 때 유..
📑 1. 문제설명💡 2. 접근방식 조이스틱을 양 옆으로 이동하는 좌우 이동 횟수(move) 조이스틱 좌우로 이동하면서 알파벳 변경를 위해 상하 이동 하는 횟수(answer) 두 개를 answer에 누적하면서 더해줘야 한다. 여기서 문제되는 것은 단방향이 아니아 양쪽(좌,우)로 조이스틱이 움직일 수 있기 때문에 가장 빠른 경로를 찾아야 한다는 것이다. 이 때 연속된 AAA의 개수를 계산 해 주어야 한다.  ✅ 알파벳 변경 현재 인덱스에서 A를 빼준 값  vs Z부터 시작해서 현재 인덱스를 빼준 값 + 1두 개를 비교해서 더 작은 값을 선택해 준다.전자는 스틱을 정방향▼ A부터 순차적으로 Z로 내려가면서 바꾸는 거고후자는 스틱을 먼저 역방향▲으로 1칸 돌려서 Z를 만든 다음에 반대로 해당 알파벳을 찾아가..
📑 1. 문제설명💡 2. 접근방식문제에서 주어진 것n : 전체 학생의 수lost : 체육복 도난당한 학생들의 번호들  (배열) reserve : 여벌 가져온 학생 번호들 (배열)체육복은 앞,뒤 번호 학생 에만 빌려줄 수 있음.도난 당한 학생들은 여분이 없어서 체육복 빌려줄 수 없음.1. `lost`와 `reserve` 배열 정렬 2. 체육수업에 참여할 수 있는 학생의 수 = 체육복이 있거나 빌릴 수 있는 학생들의 수 `체육복을 도난 당하지 않은 학생의 수` + `도난당했지만 예비로 들고 온 학생의 수` + `도난당했지만 체육복을 빌릴 수 있는 학생의 수`이 모든 학생들의 수를 누적해서 answer 변수에 담아 준다.  ✅ 체육복을 도난 당하지 않은 학생의 수= 전체 학생의 수 - 체육복을 도난당한 학..
📑 1. 문제설명💡 2. 접근방식FILE_PATH 출력 예시를 보고 '/home/grep/src/' + F.BOARD_ID + '/' + F.FILE_ID + F.FILE_NAME + F.FILE_EXT이렇게 문자열이 결합된 구조라는 걸 알 수 있었다. CONCAT으로 해당 문자열을 모두 결합 해 준다. 처음에는 헷갈려서 + 연산자로 했는데 ,로 결합을 해 줘야 한다.  두 테이블 조인할 때는 BOARD_ID 컬럼을 기준으로 조인 해 준다. WHERE 절에서 서브쿼리를 쓴다. 먼저 USED_GOODS_BOARD를 조회수 컬럼(VIEW) 기준으로 내림차순 해 주고 그 중 가장 높은 것만 가져와야 하니까 LIMIT1 을 걸어준다.  마지막으로 FILE_ID로 내림차순 정렬하면 끝~! 쉽다⭐ 3. 정답코드..
상단으로