알고리즘 문제풀이210 [백준] 7662 이중 우선순위 큐 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 값을 추가하고 최솟값과 최댓값을 삭제하는 연산이 존재하여 최소힙을 이용해 데이터를 다루도록 접근 최소힙과 최대힙 2개를 사용하려 했으나 각자의 리스트에서 어떤 값들이 이미 삭제된건지 판별하기 어려울것 같아서 최소힙 하나로 진행 최소힙에서 최댓값 삭제할때는 내장된 max 함수와 리스트의 remove 함수를 이용해 제거하는 방식으로 접근하였으나 시간초과로 실패 최소힙과 최대힙 두개를 사용하는대신 어떤게 삭제 되었는지 판별하는 로직 추가하여 접근 2) 알고리즘 최소힙 3) 풀이 코드 사용 언어 - Python import sys import heapq sys.stdin = open('input.txt') T = int(sys.stdin.readline()).. 2021. 12. 30. [HackerRank] Top Earners 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 총 수입 계산을 위해 연산 및 별칭 사용 서브쿼리와 Group by 를 이용하여 접근 시도를 하였으나, 어려움을 겪음 총 수입이 많은 순서대로 정렬 및 제한된 개수의 결과만 출력하도록 접근 COUNT(*) 사용시 원치않는 NULL 값이 포함될 수 있어 특정열을 카운트하도록 사용 2) 풀이 코드 사용 언어 - MySQL SELECT (months * salary) AS earnings, COUNT(name) -- 총 수입, 같은 수입을 가진 사람의 수 FROM employee GROUP BY earnings -- 총 수입을 그룹으로 묶음 ORDER BY earnings DESC -- 수입이 많은 순으로 정렬 LIMIT 1; -- 상위 1개만 출력 📝 결.. 2021. 12. 30. [HackerRank] The Blunder 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 평균을 구해야 하므로 AVG 활용 0을 없애기 위해 REPLACE 함수 사용 2) 풀이 코드 사용 언어 - MySQL SELECT CEIL(AVG(salary) - AVG(REPLACE(salary, '0' ,''))) -- 올림(0이 있을때 평균 - 0이 없을때 평균) FROM employees 📝 결과 및 학습한 내용 1) 어려웠던 내용 문자에서 특정 문자를 없애는 것에 어려움을 겪음 2) 새롭게 학습한 내용 어떠한 열의 특정 문자열을 대체 하기 위해서는 REPLACE 함수를 사용한다 REPLACE(컬럼명, 기존 문자열, 변경 문자열) 🔗 문제 링크 - https://www.hackerrank.com/challenges/the-blunder/pro.. 2021. 12. 29. [백준] 1747 소수&팰린드롬 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 소수를 구해야 하므로 '에라토스테네스의 체'를 이용하여 소수 판별 팰린드롬인 수를 구하기 위해 10으로 나눈 나머지 및 몫을 이용해 숫자 역으로 배치하여 판별 2) 알고리즘 에라토스테네스의 체 3) 풀이 코드 사용 언어 - Python import sys N = int(sys.stdin.readline()) # 특정 숫자 prime_num = [1] * 1003002 # 정답이 나올 수 있는 최대 숫자까지만 리스트 생성 prime_num[0] = prime_num[1] = 0 # 0, 1은 소수가 아니므로 for i in range(2, int(1003002**0.5) + 1): # 에라토스테네스의 체 if prime_num[i]: mul = 2 wh.. 2021. 12. 29. [HackerRank] The Report 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 등급 테이블에서 해당 범위 안에 속하면 등급을 매겨야 하므로 조인으로 데이터 결합 출력에서 등급이 특정 수준 이하이면 NULL 값을 출력해야하므로 CASE 절 사용 2) 풀이 코드 사용 언어 - MySQL, Oracle SELECT CASE WHEN g.grade >= 8 THEN s.name -- grade 가 8 이상만 이름 출력 ELSE NULL -- 8 이하는 NULL 값 END , g.grade, s.marks FROM students AS s JOIN grades AS g ON (s.marks >= g.min_mark AND s.marks 2021. 12. 28. [백준] 6497 전력난 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 마을마다 모두 하나씩 길이 연결되어 있어야하고, 그 길의 유지비용이 가장 적게 할 수 있는 경우를 구해야 하므로 '최소 신장 트리' 알고리즘으로 접근 2) 알고리즘 최소 신장 트리 (Minimum Spanning Tree) 3) 풀이 코드 사용 언어 - Python import sys import heapq sys.stdin = open('input.txt') def kruskal(start): # 힙을 이용한 크루스칼 알고리즘 구현 global min_cost heap = [(0, start)] # 최초 시작 지점 초기화 while heap: node = heapq.heappop(heap) if not visited[node[1]]: # 아직 연결되.. 2021. 12. 28. [HackerRank] Average Population of Each Continent 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 대륙별 인구의 평균이 필요하므로 조인, 대륙별 그룹화를 하여 데이터 출력으로 접근 2) 풀이 코드 사용 언어 - MySQL SELECT country.continent, FLOOR(AVG(city.population)) -- 대륙별 모든 도시들의 인구수 평균(정수 이하 버림) FROM city LEFT JOIN country ON city.countrycode = country.code -- 조인 GROUP BY country.continent -- 대륙별로 그룹화 HAVING country.continent IS NOT NULL; -- 대륙 정보가 없는것은 제외 📝 결과 및 학습한 내용 1) 어려웠던 내용 대륙 정보가 없는 경우에도 출력을 했었으나,.. 2021. 12. 27. [프로그래머스] 하노이의 탑 📖 문제 🧑🏻💻 풀이 과정 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. [HackerRank] African Cities 문제 풀이 과정 1) 문제 이해 및 접근 두 개의 테이블에서 데이터가 필요하여 조인을 이용한 접근 2) 풀이 코드 사용 언어 - MySQL SELECT city.name -- 출력할 열 FROM city -- 테이블 LEFT JOIN country -- JOIN 할 테이블 ON city.countrycode = country.code -- 조인 조건 WHERE country.continent = 'Africa'; -- 데이터 조건 결과 및 학습한 내용 1) 어려웠던 내용 특별히 없습니다. 2) 새롭게 학습한 내용 특별히 없습니다. 문제 링크 - https://www.hackerrank.com/challenges/african-cities/problem?isFullScreen=false African Ci.. 2021. 12. 26. [백준] 2636 치즈 문제 풀이 과정 1) 문제 이해 및 접근 치즈의 가장자리를 구해야하므로 델타 탐색을 이용해 현재 위치가 치즈이고 주변이 치즈가 없는 경우에 가장자리로 나타내는 방식으로 접근 그러나 중간에 치즈가 없는 비어있는 구간이 발생시 치즈 안쪽에도 가장자리라고 인식하는 문제 발생 치즈 가장자리를 구하는 로직 고민 중 역으로 치즈가 아닌곳에서 DFS 탐색을 하여 가장자리를 구하는 방식으로 접근 시간이 흐름에 따라 가장자리였던곳만 다시 DFS 탐새으로 새로운 가장자리를 구하는 방식으로 접근 2) 알고리즘 DFS 구현 시뮬레이션 3) 풀이 코드 사용 언어 - Python import sys sys.stdin = open('input.txt') def DFS(y, x): cheese_boundary = set() # 치즈.. 2021. 12. 26. [프로그래머스] 우유와 요거트가 담긴 장바구니 문제 풀이 과정 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. [백준] 2573 빙산 문제 풀이 과정 1) 문제 이해 및 접근 빙산이 하나의 덩어리로 뭉쳐있는지 확인이 필요하여 DFS 탐색을 이용하여 확인 또한, 시간이 흐름에 따라 빙산이 녹아야 하므로 2차원 배열을 돌면서 값을 줄이려고 함 2차원 배열을 계속해서 반복하면 시간초과가 우려되어, 주변에 0의 개수를 기억하게 하여 시간을 줄이려고 시도 그리하여 초기에 시간의 흐름에 따라 2차원 배열을 모두 반복해서 빙산이 녹게 만들어주고, 다시 DFS 탐색으로 덩어리 분리 여부를 확인하는 방식으로 접근 그러나 배열의 크기가 최악의 경우 300 * 300 으로 반복적인 2차원 배열의 반복 확인으로 시간초과가 발생 빙산이 녹는 과정을 DFS 탐색을 하면서 주변에 바다의 개수를 확인하여 빙산이 녹는 과정과 덩어리를 확인하는 과정을 하나로 합쳐서 .. 2021. 12. 25. 이전 1 ··· 13 14 15 16 17 18 다음