목록알고리즘 문제 (57)
성장일기
Q> N개의 수가 주어졌을 때, 오름차순으로 정렬 🧨메모리가 매우매우 빡빡하다 1. counting sort를 이용하자(아래 블로그를 참고했음) https://elrion018.tistory.com/37 카운팅 정렬(counting sort) - 정렬 알고리즘, 파이썬 지금까지 배워온 정렬은 두 수의 대소를 '비교'하는 과정을 거쳐 정렬하는 comparison sort였습니다. 두 수를 반복적으로 비교해 정렬하는 comparison sort는 아무리 알고리즘을 잘 짜도 계산 복잡성이 O( elrion018.tistory.com 2. pypy3로 실행할 경우 print말고 sys.stdout.write를 쓰자 3. 채점도 매우 느리니 마음을 졸이지 말자😥 import sys input=sys.stdin.r..
Q 1. 배열에 정수 x를 넣는다 2. 배열에서 절댓값이 가장 작은 값을 출력하고, 같을 때는 가장 작은 수를 출력하고 그 값을 제거 A 첫째 줄에 연산의 개수 N 다음 N개의 줄에는 연산의 정보를 나타내는 x 만약 x가 0이 아니라면 추가하는 연산 0이면 절댓값이 가장 작은 값을 출력하고 제거 🧨 이 문제랑 거의 똑같다. Priority Queue를 썼고 큐에 넣어줄 때, 절댓값을 넣어줬다는 것 외에 다른 것이 없다. [python] 백준 1927 - 최소 힙 import sys import queue q=queue.PriorityQueue() n=int(sys.stdin.readline().rstrip()) for i in range(n): a=int(sys.stdin.readline().rstrip..
Q> 숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 몇 개 가지고 있는지 구하는 프로그램을 작성하시오. 첫째 줄에 가지고 있는 숫자카드 개수 둘째 줄에 가지고 있는 숫자 카드 셋째 줄에 구해야할 숫자카드 개수 둘째 줄에 구해야할 수 import sys input=sys.stdin.readline n=int(input().rstrip()) #가지고 있는 카드의 개수 a=list(map(int,input().split())) #가지고 있는 카드 m=int(input().rstrip()) #구해야할 개수 b=list(map(int,input().split())) #구해야할 숫자 dic={} #가지고 있..
https://hyojeong94.tistory.com/107 위 문제랑 거의 똑같은 문제다 다른 점은 오름차순 정렬을 한다는 것 첫째 줄에 수열의 길이A와 질문의 개수Q 두 번째 줄에 N개의 정수 A1, A2, ..., AN 이 공백으로 구분 세 번째 줄부터 Q개의 줄에 걸쳐 욱제의 질문을 의미하는 두 수 L, R이 공백으로 구분 import sys input=sys.stdin.readline n,q=map(int,input().split()) #숫자 개수와 문제 개수 a=list(map(int,input().split())) a.sort() #오름차순 정렬 #print(a) prefix=[] temp=0 for i in a: temp+=i prefix.append(temp) #누적합 리스트에 추가 f..
첫째 줄에 개수N 둘째 줄에 A1, A2, ..., AN 셋째 줄에 구간의 개수 M 넷째 줄부터 M개의 줄까지는 각 구간 i와 j 🧨누적합 문제 input만 sys.stdin.readline으로 바꿔줘도 풀린다 🎇 {A1, A2, ... , An}이 있을 때, Si = A1 + A2 + ... + Ai라고 하면, Ai + Ai + 1 + ... + Aj - 1 + Aj는 Sj - Si - 1로 표현할 수 있다 import sys input=sys.stdin.readline n=int(input().rstrip()) arr=list(map(int,input().split())) prefix=[] temp=0 for i in arr: temp+=i prefix.append(temp) #누적합 더해서 리스트에..
첫번째 줄에 수의 개수 두번째 줄에 수열 마지막 줄에 X 수열에서 X와 서로소인 수들의 평균 출력 🎇절대/상대 오차는 10^-6까지 허용 🧨lcm(a,b)==a*b / gcd(a,b)==1 위의 식을 이용해서 서로소인것을 따로 리스트에 넣어주기 막힘 없이 풀었으나 마지막 오차에서 막혔다. 소수점 출력해주면 된다! import sys input=sys.stdin.readline def gcd(a,b): if b==0: return a else: return gcd(b,a%b) def lcm(a,b): return (a*b)//gcd(a,b) #서로소: lcm(a,b)==a*b or gcd(a,b)==1 n=int(input().rstrip()) #수의 개수 a=list(map(int,input().spli..