Python 자료구조 문제풀이

조천룡·2023년 5월 22일

python

목록 보기
8/13
post-thumbnail

리스트

  • 1부터 사용자가 입력한 숫자까지의 약수와 소수를 리스트에 각각 저장하고, 이것을 출력하는 프로그램을 만들어보자.

코드

inputNum = int(input('1보다 큰 정수 입력: '))
listA = []
listB = []

for n in range(1,inputNum+1):
    if n == 1:
        listA.append(n)
    else:
        if inputNum % n == 0:
            listA.append(n)

for number in range(2, inputNum+1):
    flag = True
    for n in range(2,number):
        if number % n == 0:
            flag = False
            break

    if flag:
        listB.append(number)

print('약수 : {}'.format(listA))
print('소수 : {}'.format(listB))

출력

  • 4개의 숫자 중 서로 다른 숫자 2개를 선택해서 만들 수 있는 모든 경우의 수를 출력하는 프로그램을 만들어보자.

코드

numbers = [4, 6, 7, 9]
result = []

for n1 in numbers:
    for n2 in numbers:
        if n1 == n2:
            continue

        result.append([n1, n2])

print(f'result: {result}')
print(f'result length: {len(result)}')

# n! / (n-r)!
import math
pernutation = math.factorial(len(numbers)) / math.factorial(len(numbers) - 2)
print(f'pernutation: {int(pernutation)}')

출력


튜플

  • 대학생 길동이의 1,2,3학년의 성적은 다음과 같다. 졸업할 때 4.0이상의 학점을 받기 위해 길동이가 받아야 하는 4학년 1,2학기의 최소 학점을 구해보자.

코드

scores = (3.7, 4.2), (2.9, 4.3), (4.1, 4.2)
total = 0

for s1 in scores:
    for s2 in s1:
        total += s2

total = round(total, 1)
avg = round((total / 6),1)

print(f'3학년 총학점: {total}')
print(f'3학년 평균 : {avg}')

grade4TagetScore = round((4.0 * 8 - total), 1)
print(f'4학년 목표 총학점: {grade4TagetScore}')

minScore = round((grade4TagetScore), 1)
print(f'4학년 한학기 최소학점: {minScore}')

출력

  • 학급 별 학생 수를 나타낸 튜플을 이요해서 요구 사항에 맞는 데이터를 출력하는 프로그램을 만들어보자.

코드

studentCnt = (
    {'cls01':18},
    {'cls02':21},
    {'cls03':20},
    {'cls04':19},
    {'cls05':22},
    {'cls06':20},
    {'cls07':23},
    {'cls08':17},
)
totalCnt = 0
minStdCnt = 0; minCls = ''
maxStdCnt = 0; maxCls = ''
deviation = []

for idx, dic in enumerate(studentCnt):
    for k, v in dic.items():
        totalCnt += v

        if minStdCnt == 0 or minStdCnt > v:
            minStdCnt = v
            minCls = k

        if maxStdCnt < v:
            maxStdCnt = v
            maxCls = k

print(f'전체 학생 수: {totalCnt}')

avgCnt = totalCnt / len(studentCnt)
print(f'평균 학생 수: {avgCnt}')

print(f'학생 수가 가장 적은 학급: {minCls}({minStdCnt})')
print(f'학생 수가 가장 많은 학급: {maxCls}({maxStdCnt})')

for idx, dic in enumerate(studentCnt):
    for k, v in dic.items():
        deviation.append(v - avgCnt)

print(f'학급별 학생 편차: {deviation}')

출력


딕셔너리

  • 삼각형부터 십각형까지의 내각의 합과 내각을 딕셔너리에 저장하는 프로그램을 만들어보자.

n각형의 내각의 합 : 180 * (n - 2)

코드

dic = {}

for n in range(3, 11):
    hap = 180 * (n - 2)
    ang = int(hap / n)
    dic[n] = [hap, ang]

print(dic)

출력

  • 딕셔너리를 이용해서 5명의 회원을 가입 받고 전체 회원 정보를 출력하고 삭제하는 프로그램을 만들어보자.

코드

members = {}
n = 1
while n < 6:
     mail = input('메일 입력: ')
     pw = input('비번 입력: ')

     if mail in members:
         print('이미 사용 중인 메일 계정입니다.')
         continue
     else:
         members[mail] = pw
         n += 1

for key in members.keys():
    print(f'{key}: {members[key]}')

while True:
    delMail = input('삭제할 계정(메일) 입력: ')

    if delMail in members:
        delPw = input('비번 입력: ')
        if members[delMail] == delPw:
            del members[delMail]
            print(f'{delMail} 계정 삭제 완료!!')
            break
        else:
            print('비번 확인 요망!!')

    else:
        print('계정 확인 요망!!')

for key in members.keys():
    print(f'{key}: {members[key]}')

출력


profile
10√2 Data

0개의 댓글