とおき
토오끼
とおき
전체 방문자
오늘
어제
  • 분류 전체보기 (40)
    • 과제 (16)
    • 백준 (14)
    • C 언어 (5)
    • 잡동사니 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • set함수
  • 2523
  • 숫자의 합
  • 중복값
  • 목록
  • 입출력
  • BOJ
  • 8958
  • 반복문
  • 알파벳 찾기
  • 유클리드 호재법
  • 파이썬
  • 주피터 오류
  • 파이썬 오류
  • 별표 출력
  • 11720
  • 최댓값
  • FOR문
  • 알고리즘
  • 문자열
  • 백준

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
とおき
과제

컴사파 - 6주차

과제

컴사파 - 6주차

2022. 10. 4. 17:12

패키지

# MyList.py
"""
 Project: MyList.py Package
 Author:
 Date of last update: 22.10.04
 Update list:
    -v1.0: added genRandList, printListSample, shufflelist
"""
import random

def genRandList(L, n):
    for i in range(n+1):
        Rand = random.randint(0, n)
        while Rand in L: 
            Rand = random.randint(0, n)
        else: 
            L.append(Rand)
    return L

def printListSample(L, n, per_line, sample_lines):
    last_list = n % 20 
    cnt = 0
    for i in range(per_line * sample_lines):
        if cnt == per_line * sample_lines:
            break
        else:
            cnt += 1
            print("{:7}".format(L[i]), end = ' ')
            if cnt % per_line == 0:
                print('')
    print('\n ---------------------------------------------------------------------------------- ')
    cnt = 0
    if n % 20 == 0:
        for i in range(n-(per_line * sample_lines), n):
            if cnt == per_line * sample_lines:
                break
            else:
                cnt += 1
                print("{:7}".format(L[i]), end = ' ')
                if cnt % per_line == 0:
                    print('')
    else:
        for i in range(n-last_list, n):
            if cnt == per_line * sample_lines:
                break
            else:
                cnt += 1
                print("{:7}".format(L[i]), end = ' ')
                if cnt % per_line == 0:
                    print('')

def shuffleList(L):
    random.shuffle(L)
    return L
#MySortings.py
"""
 Project: MySortings.py Package
 Author:
 Date of last update: 22.10.04
 Update list:
    -v1.0: added selectionSort, mergeSort
"""
def selectionSort(L):
    for i in range(len(L) - 1):
        index = i
        for j in range(i + 1, len(L)):
            if L[j] < L[index]:
                index = j
        L[i], L[index] = L[index], L[i]
    
def mergeSort(L):
    if len(L) > 1:
        middle = len(L) // 2
        L_left = L[:middle]
        L_right = L[middle:]

        mergeSort(L_left)
        mergeSort(L_right)

        i = 0 
        j = 0 
        k = 0

        while i < len(L_left) and j < len(L_right):
            if L_left[i] <= L_right[j]:
              L[k] = L_left[i]
              i += 1 
            else:
                L[k] = L_right[j]
                j += 1
            k += 1
        while i < len(L_left):
            L[k] = L_left[i]
            i += 1
            k += 1
        while j < len(L_right):
            L[k] = L_right[j]
            j += 1
            k += 1
            
    return L
#MyMatrix
"""
 Project: MyMatrix.py Package
 Author:
 Date of last update: 22.10.04
 Update list:
    -v1.0: added several Matrix algorithm
"""
def printMtrx(name, M):
    print(f"{name} = ")
    for y in range(len(M)):
        print("{}".format(M[y]))
        
def sumMtrx(M1, M2):
    sum_Mtrx = []
    for i in range(len(M1)):
        temp=[]
        for j in range(len(M1[i])):
            temp.append(M1[i][j]+M2[i][j])
        sum_Mtrx.append(temp)
    return sum_Mtrx

def subMtrx(M1, M2):
    sub_Mtrx = []
    for i in range(len(M1)):
        temp=[]
        for j in range(len(M1[i])):
            temp.append(M1[i][j]-M2[i][j])
        sub_Mtrx.append(temp) 
    return sub_Mtrx

def mulMtrx(M1, M2):
    mul_Mtrx = [[] for i in range(len(M1))]
    for i in range(len(M1)):
        temp = [0] * len(M2[0])
        for j in range(len(M1[0])):
            for k in range(len(M2[0])):
                temp[k] += M1[i][j] * M2[j][k] 
        mul_Mtrx[i] = temp
    return mul_Mtrx

6.1 사용자 정의 패키지/서브패키지 - selectionSort()

 사용자 정의 패키지/서브패키지 “C:/MyPyPackage/myPyModules/”를 생성하고, 중복되지 않는 정수형 난수의 리 스트 생성, 샘플 출력 및 뒤섞기 기능을 제공하는 genRandList(L, size), printListSample(L, size, per_line, sample_lines) 및 shuffleList(L, size)를 포함하는 사용자 정의 모듈 “MyList.py”을 준비하라.

 사용자 정의 패키지/서브패키지 “C:/MyPyPackage/myPyModules/” 에 선택 정렬 알고리즘을 구현한 selectionSort(L)을 포함하는 사용자 정의 “MySortings.py”을 구현하라. 앞에서 구현한 사용자 정의 모듈 “MyList.py”을 함께 사용하는 다음 응용 프로그램을 사용하여 정확한 동작을 확인하라.


## 22211975_homework6
"""
 Project: 22211975_homework6.1
 Author:
 Date of last update: 22.10.04
 Update list:
    -v1.0: added user-defined module
"""
import sys
myPyModules_dir = "C:\MyPyPackage\myPyModules"
sys.path.append(myPyModules_dir)

# user-defined package / module
import MyList as ML
import MySortings as MS

L = []
n = 500

ML.genRandList(L, n)
print("정렬 전: ")
ML.printListSample(L, n, 10, 3)

MS.selectionSort(L)

print("\n정렬 후:")
ML.printListSample(L, n, 10, 3)

6.2 사용자 정의 패키지/서브패키지 - MySortings, mergeSort()

 앞에서 준비하였던 사용자 정의 모듈 “MySortings.py”에 병합정렬 (mergeSort) 기능을 수행하는 함수/메소드 mergeSort(L)를 추가 하라. 다음 응용 프로그램을 사용하여 50000개의 중복되지 않는 정수형 난수에 대한 선택정렬과 병합정렬을 각각 실행시키고, 실 행에 걸린 경과시간을 측정하여 비교하라.

## 22211975_homework6
"""
 Project: 22211975_homework6.2
 Author:
 Date of last update: 22.10.04
 Update list:
    -v1.0: added user-defined module
"""
import time, sys
sys.path.append("C:/MyPyPackage/myPyModules")
import MyList as ML
import MySortings as MS

while True:
    size = int(input("\n리스트의 크기를 입력하세요 (0 입력시 종료): "))
    L = []
    ML.genRandList(L, size)
    print(f"(사이즈 : {size}) 병합 정렬 전 : ")
    ML.printListSample(L, size, 10, 2)
    t1 = time.time() # start time
    MS.mergeSort(L) # L 을 병합정렬 한다.
    t2 = time.time() # end time
    print(f"\n(사이즈 : {size}) 병합 정렬 후 : ")
    ML.printListSample(L, size, 10, 2)
    print(f"{size}개의 난수를 병합 정렬 하는데 {t2-t1} 초가 걸렸습니다.")
    ML.shuffleList(L)
    print(f"\(사이즈 : {size}) 선택 정렬 전 : ")
    ML.printListSample(L, size, 10, 2)
    t1 = time.time() # start time
    MS.selectionSort(L) # L 을 선택정렬 한다.
    t2 = time.time() # end time
    print(f"\n(사이즈 : {size}) 선택 정렬 후 : ")
    ML.printListSample(L, size, 10, 2)
    print(f"{size}개의 난수를 선택 정렬 하는데 {t2-t1} 초가 걸렸습니다.")

6.3 사용자 정의 패키지/서브패키지 - MyMatrix

 사용자 정의 모듈 “MyMatrix.py” 을 준비하고, 행렬의 덧셈, 뺄셈, 곱셈 연산을 수행하는 함수/메소드 printMtrx(name, M), addMtrx(A, B), subMtrx(A, B), mulMtrx(A, B)를 포함시켜라. 이 사용자 정의 모듈을 사용자 정의 패키지 “MyPyPackage.myPyModules ”에 포함시킬 것. 다음 응용 프로그램을 사용하여 정확한 동작을 확인할 것.


## 22211975_homework6
"""
 Project: 22211975_homework6.3
 Author:
 Date of last update: 22.10.04
 Update list:
    -v1.0: added user-defined module
"""
import sys 
sys.path.append("C:/MyPyPackage/myPyModules") 
import MyMatrix as MM

A = [[1,2,3,4], [5,6,7,8], [9,10,0,1]]
B = [[1,0,0,0], [0,1,0,0], [0,0,1,1]]
C = [[1,0,0], [0,1,0], [0,0,1], [0,0,0]]

MM.printMtrx("A", A) 
MM.printMtrx("B", B) 
MM.printMtrx("C", C)

D = MM.addMtrx(A, B) 
MM.printMtrx("A + B", D)

E = MM.subMtrx(A, B) 
MM.printMtrx("A - B", E)

F = MM.mulMtrx(A, C) 
MM.printMtrx("A * C", F)

'과제' 카테고리의 다른 글

컴사파 - 9주차  (1) 2022.11.01
컴사파 - 7주차  (0) 2022.10.10
컴사파 - 5주차  (0) 2022.09.28
컴사파 - 4주차  (0) 2022.09.22
컴사파 - 3주차  (1) 2022.09.17
    '과제' 카테고리의 다른 글
    • 컴사파 - 9주차
    • 컴사파 - 7주차
    • 컴사파 - 5주차
    • 컴사파 - 4주차
    とおき
    とおき

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.