본문 바로가기

알고리즘

(171)
프로그래머스 131112 강원도에 위치한 생산공장 목록 출력하기 SQL 풀이 난이도 : Lv. 1풀이일 : 2409231https://school.programmers.co.kr/learn/courses/30/lessons/131112 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제풀이SELECT FACTORY_ID, FACTORY_NAME, ADDRESSFROM FOOD_FACTORYWHERE ADDRESS LIKE '강원도%'주소가 강원도로 시작하는 공장을 찾는다공장ID, 이름, 주소를 오름차순으로 출력한다.
프로그래머스 12973 짝지어 제거하기 자바 풀이 난이도 : Lv. 2풀이일 : 2409231https://school.programmers.co.kr/learn/courses/30/lessons/12973 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제1차 풀이import java.util.Stack;class Solution{ public int solution(String s) { int answer = 0; Stack stack = new Stack(); for (int i = 0; i stack : 문자열 s의 각 글자를 담을 스택fo..
프로그래머스 59407 이름이 있는 동물의 아이디 SQL 풀이 난이도 : Lv. 1풀이일 : 2409227https://school.programmers.co.kr/learn/courses/30/lessons/59407 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제풀이SELECT ANIMAL_IDFROM ANIMAL_INSWHERE NAME is not NullANIMAL_INS 테이블에서 NAME이 NULL이 아닌 동물들의 아이디를 출력한다.
프로그래머스 12981 영어 끝말잇기 자바 풀이 난이도 : Lv.2풀이일 : 2409216https://school.programmers.co.kr/learn/courses/30/lessons/12981 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제1차 풀이코드import java.util.Set;import java.util.HashSet;class Solution { public int[] solution(int n, String[] words) { int[] answer = {0, 0}; Set check = new HashSet(); ch..
프로그래머스 131528 나이 정보가 없는 회원 수 구하기 SQL 풀이 난이도 : Lv. 1풀이일 : 2409216https://school.programmers.co.kr/learn/courses/30/lessons/131528 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제풀이SELECT COUNT(USER_ID) AS USERSFROM USER_INFOWHERE AGE is NULL반환할 컬럼을 USERS라고 이름 붙여준다.AGE가 NULL인 것만 골라내 숫자를 센다배운점아무 컬럼이나 가져와도 똑같은 결과일 줄 알고 처음에는 COUNT(AGE)를 입력했는데 0이 출력됐다.COUNT는 NULL이 아닌 것들의 개수를 세눈데,..
프로그래머스 12944 평균 구하기 파이썬 풀이 난이도 : Lv. 1풀이일 : 2409205https://school.programmers.co.kr/learn/courses/30/lessons/12944 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제풀이def solution(arr): answer = 0 for i in arr: answer += i return answer/len(arr)주어진 배열의 모든 요소를 더한 뒤, 배열 길이로 나누어 반환한다.느낀점진짜 다시 1일 1알고리즘 할거야 진짜 아무리 시간없어도 기초문제라도 풀자프로그래머스가 익숙하지 않으니까 당분간 프..
프로그래머스 12939 최댓값과 최솟값 자바 풀이 난이도 : Lv. 2풀이일 : 2409205https://school.programmers.co.kr/learn/courses/30/lessons/12939 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제풀이class Solution { public String solution(String s) { String answer = ""; String[] numbers = s.split(" "); int max = Integer.MIN_VALUE; int min = Integer.MAX_VALUE; ..
프로그래머스 59036 아픈 동물 찾기 SQL 풀이 난이도 : Lv.1풀이일 : 2409205https://school.programmers.co.kr/learn/courses/30/lessons/59036 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제풀이SELECT ANIMAL_ID, NAMEFROM ANIMAL_INSWHERE INTAKE_CONDITION = 'Sick'SELECT문에 출력을 원하는 ANIMAL_ID와 NAME 작성ANIMAL_INS 테이블에서 조회INTAKE_CONDITION이 Sick로, 아픈 동물들 찾아내기느낀점싸피 할때 이후에 정말 오랜만에 SQL작성해본다.자격증은 쉽게 딴 것..
백준 14567 선수과목 (Prerequisite) 파이썬 풀이 난이도 : 골드5 풀이일 : 2405013 https://www.acmicpc.net/problem/14567문제 캡쳐아이디어각 과목을 수강하기 전에 이수하여야 하는 선수 과목의 수를 센다.선수 과목이 없는 과목에 대해, 해당 과목을 이수한 후 수강할 수 있는 과목들의 선수과목 수를 줄인다.선수 과목이 남아있지 않은 과목들은 몇 번째 학기에 들을 수 있는지 기록한다.전체 풀이코드import sys from collections import deque N, M = map(int, sys.stdin.readline().split()) order = [1] * N # 수강 가능한 학기 previous = [0] * (N + 1) # 선수과목의 수 after = [[] for _ in range(N + 1)] ..
백준 7579 앱 파이썬 풀이 난이도 : 골드3풀이일 : 2404254https://www.acmicpc.net/problem/7579 7579번: 앱입력은 3줄로 이루어져 있다. 첫 줄에는 정수 N과 M이 공백문자로 구분되어 주어지며, 둘째 줄과 셋째 줄에는 각각 N개의 정수가 공백문자로 구분되어 주어진다. 둘째 줄의 N개의 정수는 현재 활www.acmicpc.net문제캡쳐아이디어dp를 활용한다.주어진 모든 비용의 합 크기로 dp 배열을 생성하고, 각 비용에서 확보할 수 있는 최대 메모리를 기록한다.같은 비용을 가지는 앱이 있으므로, dp는 뒤에서부터 탐색한다.dp 갱신 시, 목표 메모리가 확보되는 가장 작은 수를 기록해 마지막에 출력한다.전체 풀이코드import sysN, M = map(int, sys.stdin.readline(..
백준 15486 퇴사 2 파이썬 풀이 난이도 : 골드5 풀이일 : 2404243 https://www.acmicpc.net/problem/15486 15486번: 퇴사 2 첫째 줄에 N (1 ≤ N ≤ 1,500,000)이 주어진다. 둘째 줄부터 N개의 줄에 Ti와 Pi가 공백으로 구분되어서 주어지며, 1일부터 N일까지 순서대로 주어진다. (1 ≤ Ti ≤ 50, 1 ≤ Pi ≤ 1,000) www.acmicpc.net 문제 캡쳐 전체 풀이코드 import sys N = int(sys.stdin.readline()) counsel = [(0, 0)] # 상담정보 dp = [0] * (N + 1) # 각 일자의 최고 금액 for _ in range(N): day, money = map(int, sys.stdin.readline().split(..
백준 2470 두 용액 파이썬 풀이 난이도 : 골드5 풀이일 : 2404221 https://www.acmicpc.net/problem/2470 2470번: 두 용액 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00 www.acmicpc.net 문제 캡쳐 아이디어 용액을 정렬한다. 가장 왼쪽과 가장 오른쪽 용액을 초기 값으로 두고, 두 용액의 합을 저장된 값과 비교한다. 두 용액 합의 절댓값이 저장된 값보다 작으면, 저장된 값과 현재 인덱스를 저장한다. 두 용액의 합이 음수라면 front를 오른쪽으로 움직이고, 양수라면 rear를 왼쪽으로 움직인다. 반복문 종료..
백준 1976 여행 가자 파이썬 풀이 난이도 : 골드4 풀이일 : 2404173 https://www.acmicpc.net/problem/1976 1976번: 여행 가자 동혁이는 친구들과 함께 여행을 가려고 한다. 한국에는 도시가 N개 있고 임의의 두 도시 사이에 길이 있을 수도, 없을 수도 있다. 동혁이의 여행 일정이 주어졌을 때, 이 여행 경로가 가능한 것인 www.acmicpc.net 문제 캡쳐 아이디어 연결되어 있지 않은 도시가 있는지 확인하는 문제이므로, union-find 알고리즘을 통해 연결 여부를 확인한다. 여행하고자 하는 도시들에 대해 연결상태를 확인하고 연결되지 않은 도시가 있는 경우, NO를 출력하고 확인을 중단한다. 여행하고자 하는 모든 도시가 연결되어 있어 중간에 중단되지 않은 경우에는 YES를 출력한다. 전체 풀이코..
백준 13023 ABCDE 파이썬 풀이, 반례 난이도 : 골드5 풀이일 : 2404151 https://www.acmicpc.net/problem/13023 13023번: ABCDE 문제의 조건에 맞는 A, B, C, D, E가 존재하면 1을 없으면 0을 출력한다. www.acmicpc.net 문제 캡쳐 문제 이해 처음에는 싸이클을 이루지 않는 일방향 친구 관계를 찾으라는 문제라고 이해했다가, 이상해서 예시를 그려보았다. 문제에 그림도 같이 나와있으면 더 이해하기 쉬웠을텐데 아쉽다. 아이디어 한 사람부터 시작해 이미 지나온 사람을 제외하고 DFS 탐색으로 깊이 5까지 도달할 수 있는 경우가 있는지 탐색하자. 전체 풀이코드 import sys # 한 숫자에서 다섯 번 DFS 호출이 가능한지 확인 def DFS(n, depth): visited[n] =..
백준 11000 강의실 배정 파이썬 풀이 난이도 : 골드5 풀이일 : 2404114 https://www.acmicpc.net/problem/11000 11000번: 강의실 배정 첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000) 이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si < Ti ≤ 109) www.acmicpc.net 문제 캡쳐 아이디어 각 강의의 시작, 끝 시간을 입력받아 오름차순으로 저장한다. 매 강의 정보에 대해 이전 강의의 끝 시간이 현재 강의의 시작 시간보다 작은 것이 있는지 탐색하고, 조건에 부합하는 것이 있다면, 앞 강의를 현재 강의 배열에서 제거한다. 조건에 해당하지 않건, 해당하건 강의의 정보를 현재 강의 배열에 추가한다. 추가 후, 현재 강의 개수가 이전에 저장된 수보다 많은지 확인하고, 변수를 업..
백준 2437 저울 파이썬 풀이 난이도 : 골드2 풀이일 : 2404103 https://www.acmicpc.net/problem/2437 2437번: 저울 하나의 양팔 저울을 이용하여 물건의 무게를 측정하려고 한다. 이 저울의 양 팔의 끝에는 물건이나 추를 올려놓는 접시가 달려 있고, 양팔의 길이는 같다. 또한, 저울의 한쪽에는 저울추들만 놓 www.acmicpc.net 문제 캡쳐 아이디어 무게추의 무게만큼, 저울로 잴 수 있는 무게의 수가 늘어난다. 최초 무게 추 1 +1 : 1, 2 +2 : 1, 2, 3, 4 +3 : 1, 2, 3, 4, 5, 6, 7 +5 : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 num + 무게추 무게를 반복하다가, num < weight 순간 찾기 전체 풀이코드 import ..
백준 20136 멀티탭 스케줄링 2 파이썬 풀이 난이도 : 플레티넘4 풀이일 : 2404092 https://www.acmicpc.net/problem/20136 20136번: 멀티탭 스케줄링 2 기숙사에서 살고 있는 준규는 한 개의 멀티탭을 이용하고 있다. 준규는 키보드, 헤어드라이기, 핸드폰 충전기, 디지털 카메라 충전기 등 여러 개의 전기용품을 사용하면서 어쩔 수 없이 각종 전 www.acmicpc.net 문제 캡쳐 아이디어 멀티탭에 빈 자리가 있다면, 현재 기기의 플러그를 연결하고, 현재 기기의 다음 사용 순서를 기록한다. 멀티탭에 빈 자리가 없다면 연결되어 있는 기기 중 다음 사용 순서가 가장 많이 남은 것을 제거하고, 현재 기기를 연결한 후, 현재 기기의 다음 사용 순서를 기록한다. 전체 풀이코드 import sys, heapq N, K =..
백준 1881 공 바꾸기 파이썬 풀이 난이도 : 골드1 풀이일 : 2404081 https://www.acmicpc.net/problem/1881 1881번: 공 바꾸기 0부터 9까지의 숫자가 각각 적힌 열 개의 공과, 0부터 9까지의 숫자 중 하나가 적힌 여러 장의 카드들이 있다. 그리고 각각 공 하나씩을 담을 수 있는 상자 네 개가 있다. 같은 숫자의 카드는 여러 www.acmicpc.net 문제 캡쳐 아이디어 비어있는 상자가 있다면, 공을 비어있는 상자에 집어 넣고 count + 1 비어있는 상자가 없다면, 다음 사용까지의 시간을 비교 사용이 끝난 공이 있다면, 해당 공을 제거 후, 새 공을 집어 넣고 count + 1 사용이 끝난 공이 없다면, 다음 사용 시점이 가장 늦은 공을 제거 후, 새 공을 집어 넣고 count + 1 교체는 ..
백준 1700 멀티탭 스케줄링 파이썬 풀이, 반례 난이도 : 골드1 풀이일 : 2404077 https://www.acmicpc.net/problem/1700 1700번: 멀티탭 스케줄링 기숙사에서 살고 있는 준규는 한 개의 멀티탭을 이용하고 있다. 준규는 키보드, 헤어드라이기, 핸드폰 충전기, 디지털 카메라 충전기 등 여러 개의 전기용품을 사용하면서 어쩔 수 없이 각종 전 www.acmicpc.net 문제 캡쳐 아이디어 비어있는 플러그가 있다면, 현재 사용할 제품을 그냥 연결한다. 비어있는 플러그가 없다면, 현재 연결 되어있는 제품의 플러그를 한 개 제거하고 제거 횟수를 센다. 사용이 끝나 더이상 사용하지 않을 제품을 우선적으로 제거한다. 사용이 끝난 제품이 없다면, 다음 사용순서가 가장 많이 남은 제품을 제거한다. 전체 풀이코드 import sys ..
백준 2294 동전 2 파이썬 풀이 난이도 : 골드5 풀이일 : 2404066 https://www.acmicpc.net/problem/2294 2294번: 동전 2 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. 가치가 같은 동전이 여러 번 주어 www.acmicpc.net 문제 풀이코드 import sys n, k = map(int, sys.stdin.readline().split()) coins = [] dp = [float('inf')] * (k + 1) # 초기값 무한 dp[0] = 0 # 0 만드는 동전 개수 for _ in range(n): coins.append(int(sys.st..