본문 바로가기

greedy10

백준 3135 라디오 1 2 3 4 5 6 7 8 9 import sys a,b=map(int, sys.stdin.readline().split()) n=int(sys.stdin.readline()) tmp=[] for i in range(n): tmp.append(abs(b- int(sys.stdin.readline()))) heu=min(tmp) if abs(a-b)>heu: print(heu+1) else : print(abs(a-b)) cs 첫번째 , 두번째 버튼을 눌러서 가는게 더 빠른가 즐겨찾기를 통해 가는게 더 빠른가 비교하는 로직을 통해 구현하시면됩니당 2021. 8. 30.
백준 22993 서든어택 3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import sys n=int(sys.stdin.readline()) tmp1=(list(map(int, sys.stdin.readline().split()))) jun=tmp1[0] tmp1.pop(0) tmp1.sort() for i in tmp1: if i 2021. 8. 26.
백준 16471 작은 수 내기 1 2 3 4 5 6 7 8 9 10 11 12 13 14 import sys n=int(sys.stdin.readline()) tmp1=sorted(list(map(int, sys.stdin.readline().split()))) tmp2=sorted(list(map(int, sys.stdin.readline().split()))) tmp1.reverse() cnt=0 for i in tmp1: if i>=tmp2[-1]: pass else: cnt+=1 tmp2.pop() if cnt> n//2: print("YES") else: print("NO") Colored by Color Scripter cs 우선 카드를 정렬을 하구 주언이 가지고있는 카드중 제일큰 카드가 사장이 가지고있는 카드 중 제일 큰.. 2021. 8. 26.
백준 16435 스네이크버드 1 2 3 4 5 6 7 8 import sys n,l=map(int, sys.stdin.readline().split()) h=list(map(int, sys.stdin.readline().split())) h.sort() for i in h: if l>=i: l+=1 else:break print(l) Colored by Color Scripter cs 그리디 알고리즘이구요 스네이크버드의 길이를 최대화 하고싶다-> 작은것부터 먹어야함 2021. 8. 26.
백준 14469 소가 길을 건너간 이유 3 1 2 3 4 5 6 7 8 9 10 11 12 import sys n=int(sys.stdin.readline()) tmp=[] for i in range(n): a,b=map(int, sys.stdin.readline().split()) tmp.append((a,b)) tmp.sort(key= lambda x: (x[0],x[1])) ans=0 for i in tmp: if ans (5,7), -> (8,3) 첫번째 2,1 경우 대기 없으니까 if문으로 갑니다 ans=2+1 두번째 5,7 경우 3초까지만 소가 있었으니까 대기 또 없죠 대기 없으니까 if문으로 갑니다. ans=5+7 세번째 8,3 대기 있죠 두번째에서 12초까지 기다려야하니까 그럼 ans=12 +3 2021. 8. 26.
백준 11256 사탕 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import sys t=int(sys.stdin.readline()) for _ in range(t): j,n=map(int, sys.stdin.readline().split()) tmp=[] for a in range(n): r,c=map(int, sys.stdin.readline().split()) tmp.append(r*c) tmp.sort() tmp.reverse() # print(tmp) cnt=1 tmpCandy=0 for k in tmp: tmpCandy+=k # print(tmpCandy) if tmpCandy 2021. 8. 26.
백준 9237 이장님 초대 1 2 3 4 5 6 7 8 import sys n=int(sys.stdin.readline()) tmp=list(map(int, sys.stdin.readline().split())) tmp.sort() tmp.reverse() for i in range(n): tmp[i]+=i+1 print(max(tmp)+1) Colored by Color Scripter cs 우선 가장 오래걸리는 나무부터 심어야 하니까 나무 심는 순서를 내림차순으로 정렬 하고, LIne4-5 하루에 하나씩 심는 것 for 문 LIne 8 은다 심어지고 하루 있다가 보여준다는 내용이 명시돼있으므로 최종값에 +1 2021. 8. 26.
Leetcode 1877. Minimize Maximum Pair Sum in Array 1 2 3 4 5 6 7 class Solution: def minPairSum(self, nums: List[int]) -> int: nums.sort() tmp=[] for i in range(len(nums)//2): tmp.append(nums[i]+nums[-(i+1)]) return max(tmp) cs 문제 전제 조건 처럼 쌍을 만들려면 nums 리스트를 오름차순으로 정렬해주고 양끝을 쌍으로 묶어줘야합니다. 그 쌍의 합을 tmp 리스트에 넣어주고 그 중에서 최댓값을 리턴하면됩니다 2021. 8. 26.
Leetcode 561. Array Partition I 1 2 3 4 5 6 7 class Solution: def arrayPairSum(self, nums: List[int]) -> int: nums.sort() ans=0 for i in range(0,len(nums),2): ans+=nums[i] return ans Colored by Color Scripter cs 원래는 그리디알고리즘으로 찾는게 맞는데.. 규칙이 보여서 쉽게 구현했습니다 2021. 8. 26.
[백준] 1439 1 2 3 4 5 6 s=input() cnt=0 for i in range(len(s)-1): if s[i]=='0' and s[i+1]=='1' :cnt+=1 if s[i] == '1' and s[i + 1] == '0': cnt += 1 print((cnt+1)//2) Colored by Color Scripter cs 2021. 2. 8.