728x90
반응형

코딩테스트 91

[백준][Python] 2108. 통계학

🙆‍♂️문제 🙋‍♂️풀이 문제 그대로 첫째 줄에는 산술평균(일반적인 평균)을 소수점 첫째 자리에서 반올림 둘째 줄에서는 중앙값 셋째 줄에서는 최빈값(가장 많이 나타나는 값) 넷째 줄에서는 범위(최대값 - 최소값)을 출력하면 됩니다. 🚀 입력받기 import sys n= int(sys.stdin.readline()) arr = [int(sys.stdin.readline()) for _ in range(n)] sys 라이브러리를 import하여 빠르게 입력받습니다. 🚀 산술평균 출력 average = round(sum(arr)/n) print(average) 평균은 구하기 쉽습니다. 모두 합한 값을 입력 갯수로 나누고 round함수를 통해 반올림 합니다. 🚀 중앙값 출력 arr.sort() mid = n//..

[백준][Python] 10989. 수 정렬하기 3

🙆‍♂️문제 🙋‍♂️풀이 이번 문제는 계수 정렬을 활용해서 푸는 문제입니다. 🚀 입력받기 import sys n= int(sys.stdin.readline()) arr = [int(sys.stdin.readline())for _ in range(n)] sys 라이브러리를 import 하여 더 빠르게 입력되어서 시간 초과가 되지 않도록 했습니다. 🚀 계수 정렬 def countSort(arr): length = len(arr) minNum = min(arr) maxNum = max(arr) #카운팅 배열 구하기 alpha = maxNum - minNum + 1 cntArr = [0]*alpha for i in arr: j = i - minNum cntArr[j]+=1 #누적 카운팅 배열 구하기 accArr..

[알고리즘][정렬] 계수 정렬 - Counting sort

🙆‍♂️계수 정렬 주어진 배열의 값 범위가 작은 경우 빠른 속도로 정렬하는 알고리즘 입니다. 원소의 개수와 원소 최대 값이 수행시간에 영향을 줍니다. 🙋‍♂️방식 arr = [4,0,6,2,0,6] 이런 배열을 정렬할 때 🚀count 배열 값 2 0 1 0 1 0 2 인덱스 0 1 2 3 4 5 6 먼저 배열의 요소들을 카운팅을 하고 각 인덱스에 카운팅 값들을 갖는 count 배열을 만듭니다. count 배열을 만들 때 0,2,4,6만 있으니 이에 대한 수만 세는 것이 아니라 가장 작은 수(0)부터 가장 큰 수(6)까지의 수를 전부 계수합니다. 🚀누적 count 배열 값 2 2 3 3 4 4 6 인덱스 0 1 2 3 4 5 6 그리고 누적 카운트 배열을 만듭니다. 🚀최종 index 배열 값 1 1 2 2..

[백준][Python] 2751. 수 정렬하기 2

🙆‍♂️문제 🙋‍♂️풀이 사실 그냥 sort함수를 사용해도 됩니다. 🚀 입력받기 import sys n= int(sys.stdin.readline()) arr = [int(sys.stdin.readline())for _ in range(n)] sys 라이브러리를 import 하여 더 빠르게 입력되어서 시간 초과가 되지 않도록 했습니다. 🚀 sort 함수 사용 arr.sort() 이렇게 배열 뒤에 .sort()를 해주면 해당 배열 값들이 오름차순으로 정렬됩니다. 🚀 출력하기 for i in arr: print(i) 반복문을 사용하여 배열의 요소들을 출력해줍니다.

[알고리즘][정렬] 병합 정렬 - Merge Sort

🙆‍♂️병합 정렬 병합정렬은 분활하고 정렬하고 합병하는 그런 정렬입니다. 🙋‍♂️방식 먼저 이렇게 배열이 있따면 배열의 길이가 1이 될 때 까지 나눕니다. 그리고 정렬과 합병을 반복하면 됩니다. 시간 복잡도는 O(n log n) 입니다. def merge(arr): if len(arr) == 1: return arr #####나누는 구간##### middle = len(arr)//2 left_arr = arr[:middle] right_arr = arr[middle:] leftArrSort = merge(left_arr) rightArrSort = merge(right_arr) leftIdx = 0 rightIdx = 0 #####합치는 구간##### sortArr = [] while leftIdx < ..

[백준][Python] 2750. 수 정렬하기

🙆‍♂️문제 🙋‍♂️풀이 간단하게 버블정렬로 풀어보겠습니다. 🚀 입력받기 n= int(input()) arr = [int(input())for _ in range(n)] 숫자 개수인 n을 먼저 입력받고 n만큼의 요소를 갖고 있는 배열을 입력받습니다. 🚀 버블 정렬 def bubble(arr): for i in range(len(arr)-1): for j in range(i+1,len(arr)): if arr[i]>arr[j]: tmp = arr[i] arr[i]=arr[j] arr[j]=tmp return arr sortArr=bubble(arr) 버블 정렬 함수를 만들어서 함수 호출을 했습니다. 🚀 출력하기 for i in sortArr: print(i) 정렬된 배열을 for문을 사용하여 출력합니다.

[알고리즘][정렬] 선택 정렬 - Selection Sort

🙆‍♂️선택 정렬 각 칸에 들어갈 요소를 선택해서 정렬하는 방법입니다. 🙋‍♂️방식 arr = [6,4,2,8] 이렇게 배열이 있을 때 오름차순으로 선택정렬을 한다면 #level1 arr = [2,4,6,8] 첫 번째 자리에 들어갈 가장 작은 2와 6을 바꿔줍니다. 그러면 정렬이 완성됩니다. 시간 복잡도는 O(n^2)입니다. 그리고 stable하지 않은 정렬입니다.

[알고리즘][정렬] 삽입 정렬 - Insertion Sort

🙆‍♂️삽입 정렬 삽입 정렬은 앞에서부터 이미 정렬된 요소와 비교하여 자신의 위치에 삽입하는 정렬입니다. 🙋‍♂️방식 arr = [8,6,2,4] 이 배열을 오름차순으로 삽입정렬하려 하면 #level 1 arr = [6,8,2,4] 01. 8과 6을 비교하여 삽입 #level 2 #first arr = [6,2,8,4] #second arr = [2,6,8,4] 02. 2와 8, 2와 6을 비교하면서 적절한 위치에 삽입 #level 3 #first arr = [2,6,4,8] #second arr = [2,4,6,8] 03. 4와 8, 4와 6 4와 2를 비교해서 적절한 위치에 삽입 시간 복잡도는 O(n^2)입니다. 그리고 stable한 정렬입니다. def select(arr): for i in rang..

[알고리즘][정렬] 버블 정렬 - Bubble Sort

🙆‍♂️버블 정렬 서로 인접한 두 원소의 대소를 비교해서 조건에 따라 교환을 수행하여 정렬하는 방법입니다. 직관적인 정렬 방식입니다. 🙋‍♂️방식 a=[7,3,1,6,2] 이렇게 배열이 있을 때 버블 정렬을 사용해서 오름차순 정렬을 한다고 했을 때 a[0]과 a[1]을 비교해서 a[0]의 크기가 작다면 가만히 있고 크다면 a[1]과 자리를 바꿔줍니다. #1단계의 첫 번째 스위칭 a=[3,7,1,6,2] #1단계의 두 번째 스위칭 a=[3,1,7,6,2] #1단계의 세 번째 스위칭 a=[3,1,6,7,2] #1단계의 네 번째 스위칭 a=[3,1,6,2,7] 첫 번째 단계를 수행하면 이런식으로 수행되어 가장 큰 수인 7이 뒤로 옮겨지고 그 다음 계속적으로 수행하면 큰 수 부터 우측에 쌓이게 됩니다. 버블 정..

[백준][Python] 1436. 영화감독 숌

🙆‍♂️문제 🙋‍♂️풀이 문제 요약 : 자연수 N을 입력받으면 숫자 666이 들어간 수 중 가장 작은 수부터 N번째로 작은 숫자를 출력하면 된다. 666이 첫 번째 1666이 두 번째... 🚀 입력받기 n=int(input()) 간단하게 숫자 하나를 입력받는다. 🚀 경우의 수 탐색 이 숫자에는 패턴이 있다. [0~9]666 다음은 [0]666[0~9],[1]666[0~9] ... 이런식으로 가다가 [0]666[0][0~9],[0]666[1][0~9] 이런식으로 패턴이 있다. 설명을 잘 못해가지구 코드를 보면 바로 이해가 되실겁니다. movie=[] for i in range(10): for j in range(10): for k in range(10): for q in range(10): case1=[i..

728x90
반응형