포도가게의 개발일지

백준 03일차 본문

백준

백준 03일차

grape.store 2021. 8. 9. 10:26
반응형

29. 수 정렬 - 버블로 풀어봄

더보기

##############버블 정렬 양 옆에 수를 비교해서 왼쪽이 크면 교환 반복횟수는 n-1번#####################

##############시간복잡도는 O(n²) for 안에 for, 공간복잡도는 O(n): 배열을 하나만 써서##################

import sys

 

n = int(sys.stdin.readline())

num = []

for x in range(n):

tmp = int(sys.stdin.readline())

num.append(tmp)

 

def swap(a,b):

num[a], num[b] = num[b], num[a]

 

for i in range(len(num)-1):

for y in range(len(num)-1):

if num[y] > num[y+1]:

swap(y,y+1)

 

for j in num:

print(j)

30. 수 정렬 2 1. 병합정렬 merge sort 시간초과 -> quick sort로 바꿈

더보기

#######################merge sort###############

import sys, math

 

n = int(sys.stdin.readline())

num = []

for x in range(n):

tmp = int(sys.stdin.readline())

num.append(tmp)

 

def merge(arr):

 

if len(arr) == 1:

return arr

mid = len(arr)//2

end = len(arr)

result = []

left = merge(arr[0:mid])

right = merge(arr[mid:end])

i,j = 0,0

#print(left, right,'before')

while len(left)>i and len(right)>j:

if left[i] < right[j]:

result.append(left[i])

i += 1

else:

result.append(right[j])

j += 1

while len(right)>j:

result.append(right[j])

j += 1

while len(left)>i:

result.append(left[i])

i += 1

#print(arr,'arr')

#print(result,'after')

return result

 

results = merge(num)

for x in results:

print(x)

 

 ####### ####### ######quick sort도 시간초과발생 python에서는 정렬알고리즘으로 불가 pypy를 이용########

import sys

 

n = int(sys.stdin.readline())

arr = []

for x in range(n):

tmp = int(sys.stdin.readline())

arr.append(tmp)

 

def swap(arr,a,b):

arr[a],arr[b] = arr[b],arr[a]

return arr

 

def quick(arr, start, end):

if start >= end:

return

 

pivot = start

left = start + 1

right = end

 

while left <= right:

while left <= end and arr[left] <= arr[pivot]:

left += 1

while right > start and arr[right] > arr[pivot]:

right -= 1

if left > right:

swap(arr, pivot, right)

else:

swap(arr, left, right)

 

quick(arr,start, right-1)

quick(arr,right+1,end)

 

 



quick(arr,0,len(arr)-1)

for x in arr:

print(x)

 

31. 수 정렬하기(계수정렬 == 도수정렬 == 카운팅정렬)

더보기

import sys

 

n = int(sys.stdin.readline())

arr = [0] * 10001

for x in range(n):

tmp = int(sys.stdin.readline())

arr[tmp] += 1

for x in range(10001):

while arr[x]>0 :

print(x)

arr[x] -= 1

 

 

32. 단어 정렬 문제

## sorted 함수와 ramda 함수 ##
## key = lamda x : (조건1,조건2) ## 조건1 우선 적용 내림차순일경우 -x[1] ##

finish = sorted(result, key = lambda x : (x[0], x[1]))
더보기

import sys

 

n = int(input())

arr = []

result = []

for x in range(n):

tmp = input()

arr.append(tmp)

c = set(arr)

for y in c:

lis = []

lis.append(len(y))

lis.append(y)

result.append(lis)

finish = sorted(result, key = lambda x : (x[0], x[1]))

for k in finish:

print(k[1])

 

33. 백설 공주 난쟁이 찾기

1) for 문 중첩

더보기

arr = []

for k in range(9):

tmp = int(input())

arr.append(tmp)

result = []

 

def find(start):

 

start = start

sum = 0

for q in range(start,9):

for w in range(start,9):

for e in range(start,9):

for r in range(start,9):

for t in range(start,9):

for y in range(start,9):

for u in range(start,9):

if q != w and q != e and q != r and q != t and q != y and q != u :

if w != e and w != r and w != t and w != y and w != u :

if e != r and e != t and e != y and e != u :

if r != t and r != y and r != u :

if t != y and t != u :

if y != u :

sum = arr[q] + arr[w] + arr[e] + arr[r] + arr[t] + arr[y] + arr[u]

if sum == 100:

#print(sum,q,w,e,r,t,y,u)

result.append(arr[q])

result.append(arr[w])

result.append(arr[e])

result.append(arr[r])

result.append(arr[t])

result.append(arr[y])

result.append(arr[u])

return

else:

sum = 0

 

return

 

 

find(0)

for x in sorted(result):

print(x)

'백준' 카테고리의 다른 글

python 백준 1655번 수찾기(이분탐색)  (0) 2021.08.15
python 백준 2468번 안전영역  (0) 2021.08.11
백준 10971번 외판원의 순회 2  (0) 2021.08.10
백준 02일차  (0) 2021.08.07
백준 01일차  (0) 2021.08.06
Comments