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

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

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

본문 바로가기

전체 보기232

[백준] 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) 문제 풀이 과정 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.
[백준] 14503 로봇 청소기 문제 풀이 과정 1) 문제 이해 및 접근 청소기가 현재 위치를 기준으로 하여 동, 서, 남, 북의 4개의 방향을 바라보며 이동하므로 델타 탐색을 이용하는 방식으로 접근하였습니다. 특정 조건에 충족되면 앞으로 진행을 하기 때문에 재귀를 이용한 DFS 탐색으로 접근했습니다. 2) 알고리즘 델타 탐색 DFS 재귀 호출 구현, 시뮬레이션 3) 풀이 코드 사용 언어 - Python import sys sys.stdin = open('input.txt') def DFS(y, x, direction): # 좌표, 바라보는 방향 global answer for k in range(1, 5): # 왼쪽 방향을 4번 확인 해야 하므로 4번 반복 new_direction = (direction - k) % 4 # 새로운 방.. 2021. 12. 24.
[HackerRank] Population Census 문제 풀이 과정 1) 문제 이해 및 접근 두개의 테이블이 있어 JOIN 하여 데이터를 조건에 따라 출력하려고 접근했습니다. 2) 풀이 코드 사용 언어 - MySQL SELECT SUM(city.population) -- 출력 열 (모든 도시들의 인구의 합) FROM city -- 조인할 기준 테이블 JOIN country ON city.countrycode = country.code -- country 테이블과 조인 WHERE country.continent = 'Asia'; -- 대륙이 아시아인 데이터들만 결과 및 학습한 내용 1) 어려웠던 내용 특별히 없습니다. 2) 새롭게 학습한 내용 특별히 없습니다. 문제 링크 - https://www.hackerrank.com/challenges/asian-po.. 2021. 12. 23.