새로운 블로그로 이전 작업을 진행하고 있어 포스트가 새로 작성되고 있지 않습니다.

빠른 시일 내에 새로운 블로그로 인사드리겠습니다.

새로운 블로그 : https://unho.vercel.app/

본문 바로가기

프로그래머스60

[프로그래머스] 후보키 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 이해 및 접근 후보키의 조합을 구해야하므로 조합을 구하는 모듈을 사용했습니다. 유일성과 최소성을 확인하기 위하여 집합을 사용하였습니다. 2) 알고리즘 조합 3) 풀이 코드 사용 언어 - Python from itertools import combinations # 조합 구하기 위한 모듈 임포트 def solution(relation): R = len(relation) # DB 행의 개수 C = len(relation[0]) # DB 열의 개수 cols = set() # 유일성과 최소성을 만족하는 후보키 목록 for i in range(1, C+1): # 열이 선택되는 개수 combs = list(combinations(range(C), i)) # 열이 i개 선택했을.. 2022. 1. 9.
[프로그래머스] 동명 동물 수 찾기 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 이해 및 접근 이름이 없는 동물은 개수를 확인할 필요가 없으므로 WHERE 절에서 조건을 걸러냈습니다. 2) 풀이 코드 사용 언어 - MySQL SELECT name, COUNT(animal_id) AS cnt -- 출력 열 FROM animal_ins WHERE name IS NOT NULL -- 이름이 없는 경우는 필요 없으므로 GROUP BY name -- 이름을 그룹화 HAVING COUNT(animal_id) >= 2 -- 이름이 나온 횟수가 2회 이상을때 ORDER BY name; 📝 결과 및 학습한 내용 1) 어려웠던 내용 특별히 없습니다. 2) 새롭게 학습한 내용 특별히 없습니다. 🔗 문제 링크 - https://programmers.co.kr/lea.. 2022. 1. 7.
[프로그래머스] 이름에 el이 들어가는 동물 찾기 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 이해 및 접근 동물의 이름 일부에 el 이 들어가는 경우를 찾아야하므로 LIKE 사용하고, 앞 뒤로 % 사용 2) 풀이 코드 사용 언어 - MySQL SELECT animal_id, name -- 출력 열 FROM animal_ins WHERE animal_type = 'dog' AND name LIKE '%el%' -- 동물의 종류가 개이고, 이름에 el이 들어가는 경우 ORDER BY name; -- 정렬 📝 결과 및 학습한 내용 1) 어려웠던 내용 특별히 없습니다. 2) 새롭게 학습한 내용 특별히 없습니다. 🔗 문제 링크 - https://programmers.co.kr/learn/courses/30/lessons/59047 코딩테스트 연습 - 이름에 el이 .. 2022. 1. 1.
[프로그래머스] DATETIME에서 DATE로 형 변환 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 이해 및 접근 문제의 조건이 주어진대로 출력 2) 풀이 코드 사용 언어 - MySQL SELECT animal_id, name, DATE_FORMAT(datetime, '%Y-%m-%d') -- 데이터 타입 형 변환을 위해서 DATE_FORMAT 함수 사용 FROM animal_ins ORDER BY animal_id; -- 정렬 📝 결과 및 학습한 내용 1) 어려웠던 내용 날짜와 시간이 함께있는 데이터 타입에서 날짜만 뽑아서 출력하는 방식을 몰랐음 (1) 참고 사이트 블로그 DATE_FORMAT 함수를 사용하여 데이터 타입 데이터에서 원하는 데이터를 뽑을 수 있다는것을 배움 2) 새롭게 학습한 내용 DATE_TIME(날짜, 원하는 형식) : 날짜 데이터를 원하는 .. 2021. 12. 31.
[프로그래머스] 하노이의 탑 📖 문제 🧑🏻‍💻 풀이 과정 1) 문제 이해 및 접근 완전 탐색하여 최소의 값을 구하려 접근 조건이 까다로워 함수 구현이 어려움 재귀를 이용하여 접근 2) 알고리즘 재귀 3) 풀이 코드 사용 언어 - Python def hanoi(n, start, middle, end, answer): # 원반 개수(높이), 원반이 출발하는 기준 기둥, 중간 기둥, 목적지 기둥, 정답 리스트 if n == 1: # 현재 원반이 1층 높이(최상단이라 옮겨야 하는 경우) answer.append([start, end]) # 현재 기둥에서 목적지 기둥으로 옮김 return hanoi(n-1, start, end, middle, answer) # 지금 보고 있는 기둥에서 위에 원반선택, 목적지는 중간에 거쳐야 하는것으로 변경 .. 2021. 12. 27.
[프로그래머스] 우유와 요거트가 담긴 장바구니 문제 풀이 과정 1) 문제 이해 및 접근 우유와 요거트를 구매한 장바구니만 필요하므로 우유나 요거트를 구매한 장바구니들만 먼저 조회하여 서브 쿼리 생성 그 중에서 장바구니 아이디를 그룹으로 묶어서 두개를 모두 구입한것을 찾는 방식으로 접근 2) 풀이 코드 사용 언어 - MySQL SELECT CART_ID FROM ( SELECT DISTINCT CART_ID, NAME FROM CART_PRODUCTS WHERE NAME IN ('Milk', 'Yogurt') ) AS cp GROUP BY CART_ID HAVING COUNT(CART_ID) >= 2 ORDER BY CART_ID; 결과 및 학습한 내용 1) 어려웠던 내용 그룹으로 묶고, 우유와 요거트를 하나 이상씩 구입한 장바구니만 출력하도록 하는것.. 2021. 12. 25.
[프로그래머스] 오랜 기간 보호한 동물(1) 문제 풀이 과정 1) 문제 이해 및 접근 두개의 테이블에서 데이터가 필요하여 조인 사용하는 방식으로 접근했습니다. 2) 풀이 코드 사용 언어 - MySQL SELECT ai.NAME, ai.DATETIME -- 출력 열 FROM ANIMAL_INS AS ai -- 기준 테이블 LEFT JOIN ANIMAL_OUTS AS ao -- 조인할 테이블 ON ai.ANIMAL_ID = ao.ANIMAL_ID -- 조인 조건 WHERE ao.DATETIME IS NULL -- 입양 데이터가 없는 데이터들만 ORDER BY ai.DATETIME -- 가장 오래 보호소에 있었던 순서대로 정렬 LIMIT 3; -- 상위 세개의 데이터만 출력 결과 및 학습한 내용 1) 어려웠던 내용 특별히 없습니다. 2) 새롭게 학습한 .. 2021. 12. 24.
[프로그래머스] 오랜 기간 보호한 동물(2) 문제 풀이 과정 1) 문제 이해 및 접근 두개 테이블의 각 열을 비교하여 연산이 필요하므로 조인으로 접근하였습니다. 마지막에 상위 2개의 값이 필요하여 조인한 결과를 서브쿼리로 이용했습니다. 2) 풀이 코드 사용 언어 - Oracle SELECT ANIMAL_ID, NAME -- 출력 열 FROM ( SELECT ai.* FROM ANIMAL_INS ai, ANIMAL_OUTS ao WHERE ai.ANIMAL_ID = ao.ANIMAL_ID ORDER BY (ao.DATETIME - ai.DATETIME) DESC ) -- 서브쿼리 (두개의 테이블 조인하여 보호기간이 긴 순서대로 출력) WHERE ROWNUM 2021. 12. 20.
[프로그래머스] 트리 트리오 중간값 문제 풀이 과정 1) 문제 이해 및 접근 세개의 노드를 선택하여야 하므로, 모듈을 이용해 조합의 경우의 수를 구하는 방식으로 접근했습니다. 또한 모든 점에 대해서 어떤 점을 향하는 거리의 값이 필요하여 다익스트라를 이용하는 방식으로 생각했습니다. 그러나 노드의 개수가 너무 많아, 너무 많은 다익스트라 함수를 실행하여 시간 초과가 발생하였습니다. 이 문제를 해결하기 위해 고민하던 중 트리의 지름에 관한 문제를 접하고, 활용하게 되었습니다. 세개의 노드의 길이 중 최댓값을 구하면 되었으므로 트리의 지름을 구하고 트리의 지름 -1 의 길이를 구하는 방식으로 접근하였습니다. 2) 알고리즘 다익스트라 3) 풀이 코드 사용 언어 - Python (1) 다익스트라, 조합 이용한 접근 - 시간 초과 import hea.. 2021. 12. 20.
[프로그래머스] 없어진 기록 찾기 문제 풀이 과정 1) 문제 이해 및 접근 보호소에 들어온 동물 ID 리스트를 서브쿼리로 만든 후 그 리스트 안에 입양간 동물의 ID 값이 없는 경우를 찾는 방식으로 접근했습니다. 2) 풀이 코드 사용 언어 - Oracle SELECT ANIMAL_ID, NAME-- 출력 열 FROM ANIMAL_OUTS WHERE ANIMAL_ID NOT IN (-- 보호소에 들어온 동물 ID 리스트 안에 입양된 동물 ID 번호가 없으면 SELECT ANIMAL_ID FROM ANIMAL_INS ) ORDER BY ANIMAL_ID;-- 정렬 결과 및 학습한 내용 1) 어려웠던 내용 특별히 없었습니다. 2) 새롭게 학습한 내용 특별히 없었습니다. 문제 링크 - https://programmers.co.kr/learn/c.. 2021. 12. 19.
[프로그래머스] 헤비 유저가 소유한 장소 문제 풀이 과정 1) 문제 이해 및 접근 해당 테이블에서 유저별로 몇개의 데이터를 가지고 있는지에 따라 출력이 필요하므로 그룹화를 이용하여 접근했습니다. 그룹화를 했을때, 여러 데이터를 모두 출력할 수 없기에 서브쿼리를 이용했습니다. 2) 풀이 코드 사용 언어 - Oracle SELECT * -- 모든 열 출력 FROM PLACES -- 테이블 WHERE HOST_ID IN ( SELECT HOST_ID FROM PLACES GROUP BY HOST_ID HAVING COUNT(HOST_ID) >= 2 ) -- HOST_ID가 서브쿼리 결과에 속해 있는것만 필터링 -- 서브쿼리 => HOST_ID 그룹화를 하여 해당 그룹이 2개 이상의 데이터가 있는것만 필터링 ORDER BY ID; -- ID 순서대로 .. 2021. 12. 18.
[프로그래머스] 있었는데요 없었습니다 문제 풀이 과정 1) 문제 이해 및 접근 두개의 테이블에서 각자의 데이터가 필요하므로 JOIN 이용하였습니다. 일자의 빠른 순서를 비교연산자를 이용하여 구할 수 있으므로 간단한 조건문 이용하였습니다. 2) 풀이 코드 사용 언어 - Oracle SELECT ao.ANIMAL_ID, ao.NAME -- 보여줄 열 FROM ANIMAL_INS ai, ANIMAL_OUTS ao -- 조인할 두개의 테이블 WHERE ai.ANIMAL_ID = ao.ANIMAL_ID -- 두개의 테이블 조인 AND ai.DATETIME > ao.DATETIME -- 보호시작일 > 입양일 (입양일이 더 빠른 경우) ORDER BY ai.DATETIME; -- 보호시작일 빠른순 조회 결과 및 학습한 내용 1) 어려웠던 내용 Oracl.. 2021. 12. 17.