프로그래밍 57

[MySQL] 프로그래머스 SQL SUM, MAX, MIN 답 해설

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr #1 최댓값 구하기 MAX 함수 사용 SELECT MAX(DATETIME) AS 시간 FROM ANIMAL_INS #2 최솟값 구하기 MIN 함수 사용 SELECT MIN(DATETIME) AS 시간 FROM ANIMAL_INS #3 동물 수 구하기 COUNT 함수 사용 SELECT COUNT(*) AS count FROM ANIMAL_INS #4 중복 제거하기 COUNT 함수에 DISTINCT 중복 제거 사용 SELECT COUNT(DISTINCT NAME) AS count FROM ANIMAL_INS WH..

[MySQL] 프로그래머스 SQL SELECT 답 해설

#1 모든 레코드 조회하기 *은 모든 칼럼을 선택한다. SELECT * FROM ANIMAL_INS #2 역순 정렬하기 ORDER BY 칼럼 DESC -> 내림차순으로 정렬 SELECT NAME, DATETIME FROM ANIMAL_INS ORDER BY ANIMAL_ID DESC #3 아픈 동물 찾기 MySQL에서는 =이 대입이 아닌 비교연산이다. SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION = 'Sick'; #4 어린 동물 찾기 NOT IN은 제외를 뜻한다. SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION NOT IN ('Aged') #5 동물의 아이디와 이름 ASC는 오..

[Python] 백준 20040 사이클 게임

20040번: 사이클 게임 사이클 게임은 두 명의 플레이어가 차례대로 돌아가며 진행하는 게임으로, 선 플레이어가 홀수 번째 차례를, 후 플레이어가 짝수 번째 차례를 진행한다. 게임 시작 시 0 부터 n − 1 까지 고유한 www.acmicpc.net 유니온 파인드 처음 파이썬으로 돌렸을 때 런타임 에러가 났다. for문에서 find함수 사용을 없애고, union함수 내에서 인덱스 값을 저장하도록 했다. 그리고 합칠 때 부모의 최솟값으로 통일 되게 했는데 이렇게 안하면 런타임 에러가 났다. 1) 입력 받은 두 개의 점을 유니온 함수로 합친다. 2) 두개의 점의 부모가 다르면 합치고, 부모가 같으면 게임 끝. 3) 최초의 게임 끝일 때의 인덱스 값을 endgame에 저장하고 출력. 전체 코드 import s..

[Python] 백준 1504 특정한 최단 경로

1504번: 특정한 최단 경로 첫째 줄에 정점의 개수 N과 간선의 개수 E가 주어진다. (2 ≤ N ≤ 800, 0 ≤ E ≤ 200,000) 둘째 줄부터 E개의 줄에 걸쳐서 세 개의 정수 a, b, c가 주어지는데, a번 정점에서 b번 정점까지 양방향 길이 존 www.acmicpc.net 다익스트라 알고리즘 1 -> N까지 가야하고 v1, v2를 거쳐야 한다. 양뱡향이므로 그래프에 저장할 때 둘 다 저장해야한다. 우선순위 힙을 사용하고 heappush()로 값을 넣고 heappop()으로 값을 추출한다. 1) 1에서 출발, v1에서 출발, v2에서 출발하는 세가지 distance를 구한다. 2) 1 -> v1 -> v2 -> N 과 1 -> v2 -> v1 -> N을 비교해서 최솟값이 답이다. 3) 갈..

[Python] 백준 11404 플로이드

11404번: 플로이드 첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 www.acmicpc.net 플로이드 와샬 알고리즘 1) i 에서 j 까지의 최단 거리를 (i ~ k + k ~ j)와 비교하며 업데이트 2) INF 값 그대로면 0출력, 아닐시 거리 값 출력 전체 코드 import sys input = sys.stdin.readline N = int(input()) M = int(input()) INF = sys.maxsize dosi = [[INF for _ in range(N+1)] for __ in range(N+1)] for _ in range(M)..

[Python] 백준 2470 두 용액

2470번: 두 용액 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00 www.acmicpc.net 투포인터 1) 용액 배열을 오름차순으로 정렬한다. 2) sp는 제일 왼쪽 인덱스 출발, ep는 제일 오른쪽 인덱스 출발 3) sp가 ep보다 커지거나 서로 만나면 while문 종료 4) 합쳐질 용액의 값 두개와 합의 절댓값을 계속 저장하고, 합이 > 0 이면 ep를 -1하고, 합이 0보다 크면 합을 더 작게 만들어야 하기에 오른쪽 포인터를 왼쪽으로 한칸 옮기고 -> 0보다 작으면 합을 더 크게..

[Python] 백준 11399 ATM

11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 그리디 알고리즘, 다이나믹 프로그래밍 1) dp[i]는 atm[0]부터 atm[i]까지의 합을 저장한다. 2) dp[0]에 atm[0]을 넣어주고 for문을 시작한다. 3) dp의 합을 출력한다. 전체 코드 import sys input = sys.stdin.readline N = int(input()) atm = [0]*N atm = list(map(int, input().split())) atm.sort() dp = [0]*N dp[0] = atm[0] for i in range(1, N)..

[Python] 백준 11047 동전0

11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net 그리디 알고리즘 1) 큰 동전부터 사용하기에 동전 배열을 뒤집어준다. 2) K에서 동전을 나눈 몫을 카운트 한다. 3) K에 동전을 나눈 나머지 값을 넣어준다. 전체 코드 N, K = map(int, input().split()) dongjun = [] for _ in range(N): dongjun.append(int(input())) dongjun = reversed(dongjun) count =..

[Python] 백준 10773 제로

10773번: 제로 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경 www.acmicpc.net 스택은 파이썬의 배열로 구현이 가능하다. 1) 0이면 스택 팝 2) 0이 아니면 스택에 넣기 3) 스택의 합 출력 전체 코드 import sys input = sys.stdin.readline K = int(input()) stack = [] for _ in range(K): a = int(input()) if a == 0: stack.pop() else: stack.append(a) print(sum(stack))