[프로그래머스][SQL][Lv05] 멸종위기의 대장균 찾기 풀이ecoli_data 테이블의 데이터를 재귀적으로 탐색하여, 각 id의 세대를 계산한 후, 마지막 세대에 속한 항목들을 세어 세대별로 출력하는 방식으로 진행했다. 1. WITE RECURSIVE 문재귀적 CTE(Common Table Expression)를 사용하여 데이터의 부모-자식 관계를 따라 세대를 계산하는 부분이다.SELECT id, parent_id, 1 AS gen FROM ecoli_dataWHERE parent_id IS NULLparent_id가 NULL인 데이터를 선택한다, 즉, parent_id가 없는 최상위 항목들이며, 이 항목들은 gen값이 1인, 즉 1세대다.SELECT e.id, ..
[프로그래머스][SQL][Lv04] 특정 세대의 대장균 찾기 풀이처음에 생각 한 방법은 1세대(1,2)에 포함되어있는 2세대(3,4,5)를 추출하여 임시테이블을 생성 후SELECT t1.* FROM ecoli_data t1 JOIN ecoli_data t2 ON t1.parent_id = t2.idWHERE t2.parent_id IS NULL2세대에 포함되어있는 ID(6,7)를 검색하는 방식으로 쿼리를 작성했다.WITH temp AS ( SELECT t1.* FROM ecoli_data t1 JOIN ecoli_data t2 ON t1.parent_id = t2.id WHERE t2.parent_id IS NULL)SELECT e.id FROM..
[프로그래머스][SQL][Lv03] 대장균들의 자식의 수 구하기 풀이먼저 ecoli_data의 id와 parent_id를 left join 해준다.select * from ecoli_data p left join ecoli_data c on p.id = c.parent_id그 후 p 테이블의 id로 group by 해주면 원하는 결과를 얻을 수 있다. 정답select p.id, count(c.id) as child_count from ecoli_data p left join ecoli_data c on p.id = c.parent_id group by p.id order by p.id
[프로그래머스][SQL][Lv03] 물고기 종류 별 대어 찾기 풀이 ID 컬럼은 group by가 불가능하기 때문에, where 절에서 서브쿼리를 사용해 종류별 가장 큰 물고기와 일치하는 종류와 길이를 검색한다. 정답 SELECT id, fish_name, length FROM fish_info JOIN fish_name_info USING (fish_type) WHERE (fish_type, length) IN ( SELECT fish_type, MAX(length) FROM fish_info GROUP BY fish_type) ORDER BY id;
[프로그래머스][SQL][Lv02] 조건에 맞는 사원 정보 조회하기(서브쿼리) 풀이 FROM 절의 서브 쿼리를 사용하여 score 데이터가 있는 동적인 테이블을 생성한다. 먼저 사원 별로 2022년도의 평가 점수를 검색 한다. SELECT SUM(score) AS score, emp_no FROM hr_grade GROUP BY emp_no 위 쿼리를 FROM 절의 서브쿼리로 사용한 뒤, hr_employees 테이블과 임시 테이블의 emp_no가 같은 데이터만 검색할 수 있도록 조건을 걸어준다. 점수를 기준으로 내림차순으로 정렬 뒤 limit으로 1순위를 뽑아낼 수 있다. 정답 SELECT s.score, e.emp_no, emp_name, position, email FROM hr_employees ..
[프로그래머스][SQL] 조건에 맞는 개발자 찾기 풀이프로그래밍 스킬 코드가 2진수로 이루어져있기 때문에비트 연산자를 사용하여 판별을 할 수 있다. & 연산자: A & B 일 때, A 비트의 값이 0이면 B 비트 값에 상관없이 0A 비트의 값이 1이면 B 비트의 값에 따라 0 또는 1A 와 B 의 비트 값이 모두 1일 때만 1 정답SELECT id, email, first_name, last_nameFROM developersWHERE skill_codes & (SELECT code FROM skillcodes WHERE name = 'Python')OR skill_codes & (SELECT code FROM skillcodes WHERE name = 'C#')ORDER BY id;
[프로그래머스][Python][Lv0] 코딩테스트 입문 (5) 너무 어려웠던 문제들 😢😢 1. 겹치는 선분의 길이 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 선분 3개가 평행하게 놓여 있습니다. 세 선분의 시작과 끝 좌표가 [[start, end], [start, end], [start, end]] 형태로 들어있는 2차원 배열 lines가 매개변수로 주어질 때, 두 개 이상의 선분이 겹치는 부분의 길이를 return 하도록 solution 함수를 완성해보세요. lines가 [[0, 2], [-3, -1], [-2, 1]]일 때 그림으로 나타내면 다음과..
[알고리즘] DFS(깊이 우선 탐색), BFS(너비 우선 탐색) 1. 깊이 우선 탐색 (DFS, Depth-First Search) : 최대한 깊이 내려간 뒤, 더이상 깊이 갈 곳이 없을 경우 옆으로 이동 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다. 스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면, 그 인접 노드를 스택에 넣고 방문 처리를 한다. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다. 위의 과정을 더이상 수행할 수 없을 때까지 반복한다. 2. 너비 우선 탐색 (BFS, Breadth-First Search) : 최대한 넓게 이동한 다음, 더 이상 갈 수 없을 때 아래로 이동 탐색 시작 노드를 큐에 삽입하고 방문 처리를 한다. 큐에서 노드를 꺼내 해당 노드의 인접..
1. 문자열 밀기 문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 A와 B가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면 밀어야 하는 최소 횟수를 return하고 밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요. def solution(A, B): return (B * 2).find(A) 한칸 씩 밀어 가능한 문자 == B를 반복했을 때 B에 A가 포함이되어야 함 find() 함수를 사용하면 문자열이 포함되어 있을 때, 첫 번째 문자열의 위치를 반환한다. 2. 다항식 더하기 한 개 이상의 항의 합으로 이루어진 식을 다항식이라고 합니다. 다항..
[프로그래머스][Python][Lv0] 코딩테스트 입문 (3) 1. 영어가 싫어요 영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 numbers가 매개변수로 주어질 때, numbers를 정수로 바꿔 return 하도록 solution 함수를 완성해 주세요. def solution(numbers): nums = ['zero','one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'] for idx, num in enumerate(nums): numbers = numbers.replace(num, str(idx)) return int(numbers) 2. 구슬을 나누는 경우의 수 머쓱이는 구슬을 친구들에게 나..
[프로그래머스][Python][Lv0] 코딩테스트 입문 (2) 1. 주사위의 개수 머쓱이는 직육면체 모양의 상자를 하나 가지고 있는데 이 상자에 정육면체 모양의 주사위를 최대한 많이 채우고 싶습니다. 상자의 가로, 세로, 높이가 저장되어있는 배열 box와 주사위 모서리의 길이 정수 n이 매개변수로 주어졌을 때, 상자에 들어갈 수 있는 주사위의 최대 개수를 return 하도록 solution 함수를 완성해주세요. from functools import reduce def solution(box, n): lst = [i//n for i in box] return reduce(lambda x,y: x*y, lst) 박스의 가로, 세로, 높이의 길이를 모두 n으로 나눈 후 곱하면 최대 개수를 구할 수 있다. r..
[프로그래머스][Python][Lv0] 코딩테스트 입문 (1) 코딩테스트 입문 | 프로그래머스 스쿨 코딩테스트에 처음 도전하는 사람들을 위한 입문 문제 모음. 쉬운 문제부터 하나씩 도전해 보면서 코딩테스트에 자신감도 붙이고 문제 해결 능력을 키워보세요! school.programmers.co.kr 1. 옷가게 할인 받기 머쓱이네 옷가게는 10만 원 이상 사면 5%, 30만 원 이상 사면 10%, 50만 원 이상 사면 20%를 할인해줍니다.구매한 옷의 가격 price가 주어질 때, 지불해야 할 금액을 return 하도록 solution 함수를 완성해보세요. def solution(price): discount_rates = {500000: 0.8, 300000: 0.9, 100000: 0.95, 0: 1}..