목록 code review/greedy (13)
KEEP GOING
https://programmers.co.kr/learn/courses/30/lessons/42862 코딩테스트 연습 - 체육복 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번 programmers.co.kr 난이도 1인데 되게 많은 고민을 해야 했던 문제였다 : lost, reserve 배열에서 제거 3. i-1, i+1번 학생이 모두 체육복을 도난 당한 경우, 여벌이 있는 i번째 학생은 i-1번 학생에게 체육복을 빌려준다. (그리디) i+1번 학생은 뒤 학생이 빌려줄 수도 있지만 (i+2번 학생이 체육복이 있는 경우) i-1번 학생은 그렇지 않아서.. [정답코드] ..
https://www.acmicpc.net/problem/2437 2437번: 저울 하나의 양팔 저울을 이용하여 물건의 무게를 측정하려고 한다. 이 저울의 양 팔의 끝에는 물건이나 추를 올려놓는 접시가 달려 있고, 양팔의 길이는 같다. 또한, 저울의 한쪽에는 저울추들만 놓 www.acmicpc.net 1. 구현 n = int(input()) weights = list(map(int, input().split())) weights.sort() check = 0 for w in weights: if check + 1 >= w: check += w else: break print(check+1) 2. 틀린 코드 n = int(input()) weights = list(map(int, input().split(..
https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 화물이 실려 있는 N개의 컨테이너를 M대의 트럭으로 A도시에서 B도시로 운반하려고 한다. 트럭당 한 개의 컨테이너를 운반 할 수 있고, 트럭의 적재용량을 초과하는 컨테이너는 운반할 수 없다. 컨테이너마다 실린 화물의 무게와 트럭마다의 적재용량이 주어지고, A도시에서 B도시로 최대 M대의 트럭이 편도로 한번 만 운행한다고 한다. 이때 이동한 화물의 총 중량이 최대가 되도록 컨테이너를 옮겼다면, 옮겨진 화물의 전체 무게가 얼마인지 출력하는 프로..
https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do?courseId=AVuPDYSqAAbw5UW6&subjectId=AWUYEGw61n8DFAVT&lectureSeq=8&contestProbId=AWT-MRHKchIDFAVT&kataId= SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 1. 코드 구현 def isRun(arr): tmp = sorted(arr) n = len(arr) for i in range(0, n-2): # 반례) 4 5 5 6 # if tmp[i] == (tmp[i+1] - 1) and tmp[i] == (tmp[..
itertools 라이브러리의 permutations를 이용하여 문제를 해결하려 했지만 시간 초과가 발생하였다. 시간초과 문제를 해결하기 위해서는 30의 배수가 되는 수의 조건을 이해하고 있어야 했다. 1. 30의 배수는 무조건 '0'을 포함하고 있다. ex) 30, 60, 90, .. 2. 30의 배수는 각 자리수의 합을 더한 값이 3의 배수가 된다. 270 => 2+7+0 = 9 % 3 == 0 1. 코드 구현 a = list(map(int, input())) # 0을 포함하지 않거나 각 자리수의 합이 3의 배수가 아닌 경우 if 0 not in a or sum(a) % 3 != 0: print(-1) # 30의 배수 else: # 내림차순 정렬 a.sort(key=lambda x:-x) data =..
https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 1. 코드 구현 (난이도 중하) from collections import deque for tc in range(1, int(input())+1): result = 0 n = int(input()) time = [tuple(map(int, input().split())) for _ in range(n)] # 일찍 칼퇴하는 순으로 정렬, 칼퇴 시간이 같을 경우 시작 시간을 정렬 time.sort(key=lambda x:(x[1], x[0])..
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 1. 코드 구현 n = int(input()) t = [0]*(n+1) p = [0]*(n+1) dp = [0]*(n+2) for i in range(n): t[i+1], p[i+1] = list(map(int, input().split())) for i in range(n, 0, -1): dp[i] = max(dp[i+1], dp[i]) if (i-1) + t[i]
https://www.acmicpc.net/problem/17086 17086번: 아기 상어 2 첫째 줄에 공간의 크기 N과 M(2 ≤ N, M ≤ 50)이 주어진다. 둘째 줄부터 N개의 줄에 공간의 상태가 주어지며, 0은 빈 칸, 1은 아기 상어가 있는 칸이다. 빈 칸의 개수가 한 개 이상인 입력만 주어진다. www.acmicpc.net 1. 코드 구현 import sys n,m = map(int, input().split()) sharks = [] for i in range(n): # 한 행씩 받아오기 places = list(map(int, input().split())) for j, place in enumerate(places): if place == 1: # 상어의 위치 sharks.appen..