Banner

My Tech Blog (코딩테스트)

오늘의 명언
📑 1. 문제설명💡 2. 접근방식일단 숫자 사이의 규칙을 찾아주었다.  노트에 해서 좀 지저분한데brown + yellow를 해 준 뒤 그 숫자의 약수를 모두 찾아낸다. 약수들의 중간값이 찾고자 하는 숫자이다.대신, 입출력 예를 보면 더 큰 숫자가 가로이고 더 짧은 숫자가 세로다. brownyellowreturn102[4, 3]81[3, 3]2424[8, 6] 여기서 brown + yellow 해 주면 각각10+2 = 128 + 1 = 924 + 24 = 48 12의 약수 [1, 2, 3, 4, 6, 12]9의 약수 [1, 3, 9] 48의 약수 [1, 2, 3, 4, 6, 8, 12, 16, 24, 48] 중 정답은 약수의 갯수가 짝수면 가운데 있는 숫자 두 개 이다. (출력은 큰 숫자 먼저 해야 ..
📑 1. 문제설명 입출력 예 설명 예제 #1[1, 7]으로는 소수 [7, 17, 71]를 만들 수 있습니다.예제 #2[0, 1, 1]으로는 소수 [11, 101]를 만들 수 있습니다.11과 011은 같은 숫자로 취급합니다.💡 2. 접근방식(1) 소수 판별하는 메서드 isPrime 만들기public static boolean isPrime(int num) {        if (num   Math.sqrt()주어진 함수로 제곱근 만드는 메서드 Square root를 줄여서 sqrt소수인지 판별하는 방식 : 에라토스테네스의 체 (2) 순열 생성하는 메서드 generatePeremutations 만들기// 순열을 생성하는 재귀 메서드public void generatePermutations(String p..
1. 문제 설명2. 접근방식ECOLI_DATA는 부모-자식간의 계층 관계를 이루고 있기 때문에 각 세대별로 자식이 없는 개체의 수를 출력하려면 재귀 CTE를 사용해서 대장균의 세대generation)를 계산해 주어야 한다. WITH RECURSIVE 블록을 먼저 지정 해 주고, 블록 바깥에서 세대별로 자식이 없는 개체수를 조회하는 쿼리를 짜 주면 된다. WITH RECURSIVE 블록은 또 두 부분으로 나뉘는데, 먼저, PARENT_ID IS NULL인 조건으로 데이터를 조회해서 1세대(AS GENERATION)를 규정 해 준다. 두 번째로 할 일은, 이 1세대 컬럼을 기준으로 +1을 해서 계층 구조를 조회 하는 것이다. 즉, 부모 개체로부터 자식의 세대 수를 계산 해 주는 것이다. Generation ..
어려워서 미루다가 못 푼 문제가 2개 있었다. Lv4 문제 1개랑 Lv5 문제 1개이다. 난이도 최상인 만큼, 문제 읽기도 전에 풀기가 두려운 마음이 있었다. 이 문제는 왠지 오랫 동안 노트북 앞에 앉아서 머리 많이 쓰고 고민해 봐야 될 것 같아서 하기싫었다. MySQL에서는 START WITH CONNECT BY가 안된다는 거 알고부터는 또 새로운거 배우기 싫어서 미뤘는데 오늘 얼른 끝내버리고 자야지1. 문제설명2. 접근방식처음에는 어려워 보여서 문제를 읽고 뭘 구해야 하는지 생각의 흐름을 한글로 받아 적어 봤다. PARENT_ID가 NULL이면 1세대이다. PARENT_ID가 NULL인 ID를 부모로 가지는 행이 2세대 이다. PARENT_ID가 NULL인 ID를 부모로 가지는 행의 ID를 부모로 가..
1. 문제 설명 2. 접근 방법문제를 보고 든 생각은 `연관 컬럼이 없을 때는 테이블을 어떻게 조인하는가?` -> 그래서 카테시안 곱이 떠올랐다.모든 조합을 생성하는 경우를 카테시안 곱(Cartesian Product)이라고 하는데 CROSS JOIN 해 주는 것이다.일단 여기까지만 작성 하고 쿼리를 실행시켜 보기로 했다. 테이블이 옆으로 붙었다.  여기서 날짜별로 GROUP BY 해 보고 뭔가 해 보려고 했는데 중간에 기가 막힌 생각이 났다.테이블을 옆이 아니라 아래로 붙이면 되겠다. 그럼 UNION ALL을 써 보는게 어떨까?그래서 아래로 데이터를 붙이는게 좋겠다고 생각했다.그리고 중복값을 없애면 안되기 때문에 UNION이 아니라 UNION ALL... 설마...!!  SELECT SALES_DATE..
난이도 3이라 어려울 줄 알았는데 너무 쉬워서 그냥 코드만 포스팅합니다. 대장균의 크기에 따라 분류하기 1 정답코드SELECT ID, SIZEFROM ( SELECT ID, CASE WHEN SIZE_OF_COLONY > 1000 THEN 'HIGH' WHEN SIZE_OF_COLONY 대장균의 크기에 따라 분류하기 2 문제대장균 개체의 크기를 내림차순으로 정렬했을 때 상위 0% ~ 25% 를 'CRITICAL', 26% ~ 50% 를 'HIGH', 51% ~ 75% 를 'MEDIUM', 76% ~ 100% 를 'LOW' 라고 분류합니다. 대장균 개체의 ID(ID) 와 분류된 이름(COLONY_NAME)을 출력하는 SQL 문을 작성해주세요. 이때 결과는 개체의 ID 에 대해 오름..
1. 문제설명 2. 접근방식이렇게 까지 오래 붙잡고 있을 문제가 아닌데 오늘은 하기 싫어서 ㅋㅋㅋ...게으름 좀 피워봤다. 처음에는 ECOLI_DATA 테이블 내에서 PARENT_ID(부모)가 있는 데이터들의 ID값을 카운트 해 주면 되는거다 라고 생각 해서 틀렸다. 결과창을 보니 자식이 있는 부모들만 출력이 되고 자식이 없는 부모들의 ID값은 조회가 되지 않았기 때문이다.  그래서 LEFT JOIN을 해 주어야 겠다고 생각했다.코드를 이렇게 고쳤는데 이렇게 했는데도 결과는 같다.이렇게 고치면서 부모 테이블이 ID 값을 ID로 SELECT하고, 자식 테이블의 PARENT_ID를 카운팅 해 주었다. 틀린 이유는 WHERE 절 때문이었다.자식이 없는 부모도 카운팅을 해야 하기 때문에WHERE E.PARENT..
1. 문제 설명문제분화된 연도(YEAR), 분화된 연도별 대장균 크기의 편차(YEAR_DEV), 대장균 개체의 ID(ID) 를 출력하는 SQL 문을 작성해주세요. 분화된 연도별 대장균 크기의 편차는 분화된 연도별 가장 큰 대장균의 크기 - 각 대장균의 크기로 구하며 결과는 연도에 대해 오름차순으로 정렬하고 같은 연도에 대해서는 대장균 크기의 편차에 대해 오름차순으로 정렬해주세요.2. 접근방법 가장 큰 대장균의 크기를 구해줘야 하므로 MAX(SIZE_OF_COLONY)를 해 줘야 할 것 같고 연도별로 구해야 하니까 윈도우 함수써 줘서 연도로 파티셔닝 해 주어야 한다. 일단 이 작업을 먼저 한 후에 해당 결과를 가지고 다시 데이터를 추출 해 주고 ORDER BY 정렬을 해 주어야 겠다고 생각했다.  먼저, ..
상단으로