자료구조 문제

Lee JunBok·2023년 5월 3일

자료구조

목록 보기
4/4
post-thumbnail

01

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)

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


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(listB))

02

1부터 100사이에 난수 10개를 생성한 후 짝수와 홀수를 구분해서 리스트에 저장하고 각각의 개수를 출력하는 프로그램

import random

randomlist = random.sample(range(1,101), 10)
evens = []
odds = []

for n in randomlist:

    if n % 2 == 0:
        evens.append(n)
    else:
        odds.append(n)

print('짝수: {}, 개수: {}'.format(evens, len(evens)))
print('홀수: {}, 개수: {}'.format(odds, len(odds)))

03

다음은 공원 입장료를 나타낸 표이다. 1일 총 입장객이 100명이라고 할 때, 1일 전체 입장 요금을 구하는 프로그램을 만들어보자.
단, 입장 고객의 나이는 난수를 이용한다.

import random

visitors = []

for n in range(100):
    visitors.append(random.randint(1,100))

group1, group2, group3, group4, group5 = 0, 0, 0, 0, 0

for age in visitors:

    if age >= 0 and age <=7:
        group1 += 1

    elif age >= 8 and age <= 13:
        group2 += 1

    elif age >= 14 and age <= 19:
        group3 += 1

    elif age >= 20 and age <= 64:
        group4 += 1

    else:
        group5 += 1

group1Price = group1 * 0
group2Price = group2 * 200
group3Price = group3 * 300
group4Price = group4 * 500
group5Price = group5 * 0

print('-'*25)
print(f'영유아: {group1}명 :{group1Price} 원')
print(f'어린이: {group2}명 :{group2Price} 원')
print(f'청소년: {group3}명 :{group3Price} 원')
print(f'성인: {group4}명 :{group4Price} 원')
print(f'어르신: {group5}명 :{group5Price} 원')
print('-'*25)

sum = group1Price + group2Price + group3Price + group4Price + group5Price
print('1일 요금 총 합계 : {}원'.format(format(sum,',')))

04

친구 이름 다섯 명을 리스트에 저장하고 오름차순과 내림차순으로 정렬해보자.

friend = []

for i in range(5):
    friend.append(input('친구이름 입력 : '))
print(friend)

friend.sort()
print(friend)

friend.sort(reverse=True)
print(friend)

05

다음 리스트에서 중복 아이템(숫자)을 제거하는 프로그램을 만들어보자.

numbers = [2, 22, 7, 8, 9, 2, 7, 3, 5, 2, 7, 1, 3]

idx = 0
while True:
    if idx >= len(numbers):
        break

    if numbers.count(numbers[idx]) >= 2:
        numbers.remove(numbers[idx])
        continue

    idx += 1

print(numbers)

06

다음 리스트에서 중복 아이템(숫자)을 제거하는 프로그램을 만들어보자.

# 순열 4P2
numbers = [4, 6, 7, 9]
result = []

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

        result.append([n1,n2])

print(result)
print(len(result))
# 순열 4P3
numbers = [4, 6, 7, 9]
result = []

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

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

            result.append([n1,n2,n3])

print(result)
print(len(result))

07

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

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

sum = 0
avg = 0
for n1 in scores:
    for n2 in n1:
        sum += n2

avg = sum / 6

print(round(sum, 1))
print(round(avg, 1))

grade4Total = (4.0 * 8) - sum
print(round(grade4Total, 1))

grade4Min = round((grade4Total / 2), 1)
print(round(grade4Min, 1))

scores = list(scores)
scores.append((grade4Min, grade4Min))
scores = tuple(scores)
print(scores)

08

다음 2개의 튜플에 대해서 합집합과 교집합을 출력해보자.

tuple1 = (1,3,2,6,12,5,7,8)
tuple2 = (0,5,2,9,8,6,17,3)

tempHap = list(tuple1)
tempGyo = list()

for n in tuple2:
    if n not in tempHap:
        tempHap.append(n)
    else:
        tempGyo.append(n)

tempHap = tuple(sorted(tempHap))
tempGyo = tuple(sorted(tempGyo))

print(tempHap)
print(tempGyo)


tuple1 = (1,3,2,6,12,5,7,8)
tuple2 = (0,5,2,9,8,6,17,3)

tempHap = tuple1 + tuple2
tempGyo = list()

tempHap = list(tempHap)

idx = 0
while True:

    if idx >= len(tempHap):
        break

    if tempHap.count(tempHap[idx]) >= 2:
        tempGyo.append(tempHap[idx])
        tempHap.remove(tempHap[idx])
        continue

    idx += 1

tempHap = tuple(sorted(tempHap))
tempGyo = tuple(sorted(tempGyo))

print(tempHap)
print(tempGyo)

09

다음 튜플에 대해서 최소값, 최대값, 인덱스 구하기

numbers = 8.7, 9.1, 9.0, 9.2, 8.6, 9.3, 7.9, 8.1, 8.3

print(min(numbers))
print(numbers.index(min(numbers)))

print(max(numbers))
print(numbers.index(max(numbers)))

10

튜플의 과일 개수에 대해서 오름차순 및 내림차순으로 정렬해보자.

# 오름차순
fruits = ({'수박':8}, {'포도':13}, {'참외':12}, {'사과':17}, {'자두':19}, {'자몽':15})
fruits = list(fruits)

cIdx = 0; nIdx = 1
eIdx = len(fruits) - 1

flag = True
while flag:
    curDic = fruits[cIdx]
    nextDic = fruits[nIdx]

    curDicCnt = list(curDic.values())[0]
    nextDicCnt = list(nextDic.values())[0]

    if nextDicCnt < curDicCnt: # 내림차순은 반대
        fruits.insert(cIdx, fruits.pop(nIdx))
        nIdx = cIdx + 1
        continue

    nIdx += 1
    if nIdx > eIdx:
        cIdx += 1
        nIdx = cIdx + 1

        if cIdx == 5:
            flag = False

print(tuple(fruits))

11

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

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 = 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({k : v - avgCnt})

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

12

사용자의 아이디, 비밀번호를 이용해서 로그인 프로그램을 만들어보자.

members = {'urkpo':'0928^7$',
           'xxayv':'%2*9$91',
           'lsqvx':'!0%)&&4',
           'heums':'%@3^0%3',
           'uwcmc':'85236(&',
           'iemwv':')8!36^&',
           'sqblx':')^2)9!(',
           'jbbpy':'67269*3',
           'hjkwu':'$&@@#64',
           'fvwwy':'82$%)31'}

memID = input('ID 입력 : ')
memPW = input('PW 입력 : ')

if memID in members:
    if members[memID] == memPW:
        print('로그인 성공')
    else:
        print('비밀번호 확인')

else:
    print('아이디 확인')

13

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

dic = {}

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

    dic[n] = [hap, ang]

print(dic)

14

1부터 10까지 각각의 정수에 대한 약수를 저장하는 딕셔너리를 만들고 출력하는 프로그램을 만들어보자.

dic = {}

for n1 in range (2,11):
    tempList = []
    for n2 in range(1, n1+1):
        if n1 % n2 == 0:
            tempList.append(n2)
    
    dic[n1] = tempList

print(dic)

15

다음 문장에서 비속어를 찾고 비속어를 표준어로 변경하는 프로그램을 만들어보자.

words = {'꺼지다':'가다',
         '쩔다':'엄청나다',
         '짭새':'경찰관',
         '꼽사리':'중간에 낀 사람',
         '먹튀':'먹고 도망',
         '지린다':'겁을 먹다',
         '쪼개다':'웃다',
         '뒷담 까다':'험담하다'}

txt = '강도는 서로 쪼개다, 짭새를 보고 빠르게 따돌리며 먹튀했다.'

keys = list(words.keys())

for key in keys:
    if key in txt:
        print(key, words[key])
        txt = txt.replace(key, words[key])

print(txt)

16

딕셔너리를 이용해서 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]}')        

17

파이썬에서 학생 정보를 가장 효율적으로 저장하고 관리할 수 있는 자료구조를 선택해서 컨테이너 자료형으로 만들어보자.

students = {'S21-0001':{'이름':'최성훈',
                        '성구분':'M',
                        '전공':'디자인',
                        '연락처':'010-1234-5678',
                        '메일':'hun@gmail.com',
                        '취미':['농구', '음악']},
            'S21-0002': {'이름': '탁영우',
                         '성구분': 'M',
                         '전공': '바리스타',
                         '연락처': '010-5678-9012',
                         '메일': 'yeong@gmail.com',
                         '취미': ['축구']},
            'S21-0003': {'이름': '황진영',
                         '성구분': 'W',
                         '전공': '음악',
                         '연락처': '010-9012-3456',
                         '메일': 'jin@gmail.com',
                         '취미': ['수영', '코딩']}
            }

studentNo = input('조회대상 학생 번호: ')

for k1 in students.keys():
    if k1 == studentNo:
        print('-' * 30)
        print(f'학생번호 : {k1}')

        student = students[k1]
        for k2 in student.keys():
            print(f'{k2} : {student[k2]}')

이글은 제로베이스 데이터 취업스쿨의 강의자료 일부를 발췌하여 작성되었습니다.

profile
Learning Data Analyst

0개의 댓글