전체 글 139

프로그래머스SQL_특정 세대의 대장균 찾기

■ 사용 문법 서브 쿼리, IS NULL ■ 사용 방법서브쿼리를 이용해 자식 ID를 찾아 3세대 까지 이동하였다. 다만, 내 방식에는 반복이 계속되었는데 3세대가 아니라 10세대를 구하라고 했다면 풀기 힘들 것이다. 찾아보니 WITH RECURSIVE 를 사용하여 재귀 문제를 풀 수 있었다.   ■ 코드-- 코드를 작성해주세요SELECT C.IDFROM ECOLI_DATA AS C, ( SELECT A.ID FROM ECOLI_DATA AS A, (SELECT ID FROM ECOLI_DATA WHERE PARENT_ID IS NULL) AS B WHERE A.PARENT_ID = B.ID ) AS DWHERE C.PA..

개발/SQL 2024.05.05

프로그래머스SQL_대장균의 크기에 따라 분류하기 2

■ 사용 문법 RANK OVER혹은 NTILE  ■ 사용 방법우선 SIZE_OF_COLONY를 RANK함수로 순위를 나눠주고 이후 백분율을 구해주었다. 그리고 기준에 따라 랭크를 입력하게 해주었다. 내가 푼 방식은 굉장히 복잡하고 정신없었는데, 이것을 쉽게 해준 것이 NTILE 함수다. NTILE은 파티션을 설정할 수 있어 파티션 갯수에 따라 순위를 나누어준다. ■ 코드SELECT C.ID, (CASE WHEN C.PERCENTAGE 25 THEN 'HIGH' WHEN C.PERCENTAGE 50 THEN 'MEDIUM' ELSE 'LOW'END) AS 'COLONY_NAME'FROM ( SELECT A.ID, B.COLONY_RANK, ..

개발/SQL 2024.05.04

프로그래머스_달리기 경주

■ 해결 방법callings에 있는 값을 players에 순회해서 찾으려면 50,000 * 1,000,000의 시간복잡도가 소요된다. 따라서 O(n) 이하의 시간 복잡도로 풀 수 있는 방법을 찾아야 한다. 나는 players의 있는 값들을 순위를 매겨주었다. { mumu : 1, soe : 2, poe : 3, kai : 4, mine : 5} 이런식으로 해준 다음 callings에 불린 값과 그 앞의 값의 순서를 바꿔주는 형태로 진행했다. 이 때 주의해야 할 것은 players의 순서만 바꾸어 주는 것이 아닌, 순위도 값이 변경해주어야 하는 것이다.  ■ 코드 function solution(players, callings) { var answer = []; let playersDict =..

개발/알고리즘 2024.05.03

프로그래머스_개인정보 수집 유효기간

■ 해결 방법문자열을 잘 가지고 놀아야 하는 문제이다.  계산된 개인정보 약관과 현재 날짜를 비교를 하면 되는데, 구조화를 잘 해놓기만 하면 쉽게 풀 수 있다. ■ 코드 function solution(today, terms, privacies) { var answer = []; let map = new Map(); for(key in terms){ map.set(terms[key].substr(0, 1),Number(terms[key].split(' ')[1])) } for(key in privacies){ let year = Number(privacies[key].substr(0,4)) let month = Number(privacies..

개발/알고리즘 2024.05.02

프로그래머스SQL_대장균들의 자식의 수 구하기

■ 사용 문법 LEFT JOIN, IFNULL, GROUP BY ■ 사용 방법1. ECOLI_DATA 테이블을 GROUP BY를 해줘 PARENT_ID의 갯수를 구해준다.2. 이렇게 만들어진 테이블을 ECOLI_DATA와 LEFT JOIN을 해준다. LEFT JOIN을 해주는 이유는 모든 ID에 대한 자식의 수를 구해줘 하므로 갯수가 0인 것도 나와야 한다. 기존에 있는 INNER JOIN으로 할 경우 교집합만 출력이 되므로 모든 ID가 있는 ECOLI_DATA의 값이 다 나올 수 있도록 LEFT JOIN을 해준다. 3. 갯수가 NULL 인것은 IFNULL을 통해 0으로 널처리를 해준다.  ■ 코드-- 코드를 작성해주세요SELECT ID, IFNULL(CNT, 0) AS CHILD_COUNTFROM EC..

개발/SQL 2024.05.02

그로스에 대한 나의 생각

그로스란 단어를 처음 접했던 것은 스타트업에서 일할 때 였다. 스타트업에서 개발 직무로 시작했지만, 결국 내가 해야 할 것은 제품을 만들어 내야 한다는 것을 깨닫고, 제품 개발에 관련된 것은 왠만하면 동행하고 배우려고 했다.그러다 보니 각 분야의 전문가를 만나게 되었는데, 그 분들의 이야기를 들으며 자연스럽게 그로스를 이해하게 되었다.   그로스란 단어는 직관적으로 마케터 분야에서 가장 많이 쓰는 것 같다. 그러나 제품의 성장과 관련된 모든 직무는 그로스와 뗄레야 뗄 수 없다고 생각한다. 그로스는 지표를 보고 그 지표를 통해서 제품을 성장시키는 작업이기 때문이다.  그로스는 굉장히 논리적인 방법이다. 왜냐하면 유저가 남긴 데이터를 기반으로 제품을 분석하고 개선해나가기 때문이다. 하지만 유저가 남긴 데이터..

기획 2024.05.01

프로그래머스_[PCCP 기출문제] 1번 / 붕대 감기

■ 해결 방법health 감소에 영향을 주는 상황은 attacks이 있을 때 발생한다. 그러므로 health가 감소하는 상황을 이용해 health를 구한다. 최대 체력이 정해져 있기 때문에, 체력 감소 + 붕대로 체력 회복 패턴을 반복한다. 연속 성공 했을 때, 추가 회복량을 주는 것만 중간에 조건을 끼워서 계산하면 비교적 쉽게 해결할 수 있다.  ■ 코드 function solution(bandage, health, attacks) { var answer = 0; let max_health = health; health = health - attacks[0][1]; for(let i = 1; i = bandage[1]) extraPoint = Math.floor(duration /..

개발/알고리즘 2024.05.01

프로그래머스SQL_서울에 위치한 식당 목록 출력하기

프로그래머스SQL_조건에 맞는 ■ 사용 문법 GROUP BY, JOIN, LIKE, ROUND ■ 사용 방법먼저 조인을 하여 REVIEW_SCORE을 볼 수 있도록 하나의 테이블로 만든다. 이후 REST_ID로 GROUP을 지어 평균 점수를 SELECT 해준다. 그리고 문제에 '서울' 이라고 되어 있기 때문에, 문자열에 서울이 포함된 것으로 하되 서울시가 주소이므로 '%서울%' 대시 '서울%'을 이용해 문자열을 찾는다.  ■ 코드-- 코드를 입력하세요SELECT A.REST_ID, REST_NAME, FOOD_TYPE, FAVORITES, ADDRESS, ROUND(AVG(B.REVIEW_SCORE), 2) AS SCOREFROM REST_INFO AS AJOIN REST_REVIEW AS B ON A...

개발/SQL 2024.04.30