목록알고리즘 PS (108)
DevKim
www.acmicpc.net/problem/2751 2751번: 수 정렬하기 2 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net sorted 를 이용해서 쉽게해결 import sys n=int(sys.stdin.readline()) List=[] for i in range(n): List.append(int(sys.stdin.readline())) List=sorted(List) for i in range(n): print(List[i])
www.acmicpc.net/problem/10989 10989번: 수 정렬하기 3 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. www.acmicpc.net 이 문제 이름을 보면 알겠지만.. 같은 문제가 메모리와 시간초과 제한만 다르게 출제되어있다. 1과 2는 sorted 내장 함수와 다른 정렬 알고리즘을 이용하여 쉽게 풀었지만, 이번 문제는 시간제한과 메모리 제한이 다음과 같다. 3 초 (하단 참고) 8 MB (하단 참고) 입력개수 N(1 ≤ N ≤ 10,000,000)로 주어져있고, 입력 수는 10,000보다 작거나 같은 자연수인 것에 비해 메모리 제한이 너무 작아서 4번이나 메..
www.acmicpc.net/problem/1449 1449번: 수리공 항승 첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 L이 주어진다. 둘째 줄에는 물이 새는 곳의 위치가 주어진다. N과 L은 1,000보다 작거나 같은 자연수이고, 물이 새는 곳의 위치는 1,000보다 작거나 www.acmicpc.net 한달 전에 풀었던 문제이지만.. 꽤 생각을 많이 했었던 기억이 난다(?) n,L=map(int,input().split()) List=list(map(int,input().split())) List=sorted(List,key=lambda x:x) cnt=0 m=0 for i in range(n-1): m+=List[i+1]-List[i] if m > L-1: cnt+=1 m=0 print(cn..
www.acmicpc.net/problem/2437 2437번: 저울 하나의 양팔 저울을 이용하여 물건의 무게를 측정하려고 한다. 이 저울의 양 팔의 끝에는 물건이나 추를 올려놓는 접시가 달려 있고, 양팔의 길이는 같다. 또한, 저울의 한쪽에는 저울추들만 놓 www.acmicpc.net 정답률이 꽤 낮은 문제. n=int(input()) List=list(map(int,input().split())) List=sorted(List,key=lambda x:x) sum=0 for i in range(n): if sum+1 >= List[i]: sum+=List[i] else: break print(sum+1)
www.acmicpc.net/problem/4796 4796번: 캠핑 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다. www.acmicpc.net 그리디 알고리즘은 많은 사람들이 어려워하는 이유가 분명있다. 코드는 짧지만 획기적인 사고를 해야 풀 수 있다. 최선의 방법을 생각해내지 못하면 코드는 밑도 끝도 없이 길어짐... n=0 while(1): L,P,V=map(int,input().split()) if(L==0 and P==0 and V==0): break else: n+=1 result=(V//P)*(P-(P-L)) if (V%P)
www.acmicpc.net/problem/1744 1744번: 수 묶기 길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에 www.acmicpc.net result=0 n=int(input()) data=[] for i in range(n): data.append(int(input())) #음수 따로,양수따로 리스트 분리 후, 양수는 내림차순, 음수는 오름 차순으로.. m_data=[i for i in data if(i0)] p_data=sorted(p_data,reverse=True) #마이너스,0 리스트 부터 if(len(m_data)%2==0): # 데..
www.acmicpc.net/problem/1138 1138번: 한 줄로 서기 첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다 www.acmicpc.net cnt=0 n=int(input()) l_list=list(map(int,input().split())) result=[0 for i in range(n)] for i in range(n): p=l_list[i] for j in range(n): if(result[j]==0): cnt+=1 if (cnt==p+1): result[j]=i+1 cnt=0 break for i in result: print(..
www.acmicpc.net/problem/1080 1080번: 행렬 첫째 줄에 행렬의 크기 N M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 행렬 A가 주어지고, 그 다음줄부터 N개의 줄에는 행렬 B가 주어진다. www.acmicpc.net 쉬운듯 어려운 요상한 그리디 n,m=map(int,input().split()) A=[] A_list=[] B_list=[] cnt=0 k=-1 for i in range(n): A_list.append(list(input())) # A행렬 for i in range(n): B_list.append(list(input())) # B행렬 def SWAP(n,m): for i in range(n,n+3): for j in ran..