코딩하는 타코야끼

[스터디 노트] Week3_5일차 [unit39 ~ 53] - 자료구조 문제풀이 본문

zero-base 데이터 취업 스쿨/스터디 노트

[스터디 노트] Week3_5일차 [unit39 ~ 53] - 자료구조 문제풀이

가스오부시 2023. 7. 23. 02:08
728x90
반응형

1. 자료문풀_1 [unit 39 ~ 43]


📍 [연습문제] 리스트(01)

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

num = int(input("1보다 큰 정수 입력: "))

list_a = []
list_b = []

for i in range(1, (num + 1)):
    if num == 1:
        list_a.append(i)
        
    else:
        if num % i == 0:
            list_a.append(i)
            

for i in range(2, (num + 1)):
    flag = True
    for j in range(2, int(i**0.5) + 1):
        if i % j == 0:
            flag = False
            break
    if flag:
        list_b.append(i)
    
print(f"50의 약수: {list_a}")
print(f"50의 소수: {list_b}")
>>>
1보다 큰 정수 입력: 50
50의 약수: [1, 2, 5, 10, 25, 50]
50의 소수: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]

📍 [연습문제] 리스트(02)

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

import random

num_r = random.sample(range(1, 100), 10)

list_odd = []
list_even = []

for num in num_r:
    if num % 2 == 0:
        list_even.append(num)
        
    else:
        list_odd.append(num)

print(f"홀수인 난수: {list_odd}")
print(f"홀수인 난수 갯수: {len(list_odd)}")
print("="*20)
print(f"짝수인 난수: {list_even}")
print(f"짝수인 난수 갯수: {len(list_even)}")
>>>
홀수인 난수: [41, 39, 71, 11, 21, 1]
홀수인 난수 갯수: 6
====================
짝수인 난수: [34, 96, 98, 82]
짝수인 난수 갯수: 4

📍 [연습문제] 리스트(04)

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

for _ in range(5):
    name = str(input("친구 이름 입력: "))
    name_list.append(name)
    
print(f"친구들: {name_list}")
name_list.sort()
print(f"오름차순: {name_list}")
name_list.sort(reverse = True)
print(f"내림차순: {name_list}")
>>>
친구 이름 입력: 박찬호
친구 이름 입력: 홍길동
친구 이름 입력: 유재석
친구 이름 입력: 강호동
친구 이름 입력: 박지성
친구들: ['박찬호', '홍길동', '유재석', '강호동', '박지성']
오름차순: ['강호동', '박지성', '박찬호', '유재석', '홍길동']
내림차순: ['홍길동', '유재석', '박찬호', '박지성', '강호동']

📍 [연습문제] 리스트(05)

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

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

for i in number:
    for j in number:
        if i == j:
            continue
        result.append([i, j])
        
print(f"result: {result}")
>>>
result: [[4, 6], [4, 7], [4, 9], [6, 4], [6, 7], [6, 9], [7, 4], [7, 6], [7, 9], [9, 4], [9, 6], [9, 7]]
# 4개의 숫자 중 서로 다른 숫자 3개를 선택해서 만들 수 있는 모든 경우의 수를 출력하는 프로그램을 만들어보자.

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

for i in number:
    for j in number:
        for n in number:
            if i != j and i != n and j != n:
                result.append([i, j, n])
print(f"result: {result}")
>>>
result: [[4, 6, 7], [4, 6, 9], [4, 7, 6], [4, 7, 9], 
[4, 9, 6], [4, 9, 7], [6, 4, 7], [6, 4, 9], [6, 7, 4], 
[6, 7, 9], [6, 9, 4], [6, 9, 7], [7, 4, 6], [7, 4, 9], 
[7, 6, 4], [7, 6, 9], [7, 9, 4], [7, 9, 6], [9, 4, 6], 
[9, 4, 7], [9, 6, 4], [9, 6, 7], [9, 7, 4], [9, 7, 6]]

2. 자료문풀_2 ~ 3 [unit 44 ~ 53]


📍 [연습문제] 튜플(02)

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

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

hap = list(tuple1)
gyo = list()

for i in tuple2:
    if i not in hap:
        hap.append(i)
    else:
        gyo.append(i)
        
print(f"합집합: {hap}")
print(f"교집합: {gyo}")
>>>
합집합: [1, 3, 2, 6, 12, 5, 7, 8, 0, 9, 17]
교집합: [5, 2, 8, 6, 3]

ㅊ📍 [연습문제] 튜플(03)

# 다음 튜플을 요구 사항에 맞춰 아이템을 슬라이스하자
numbers = (8.7, 9.0, 9.1, 9.2, 8.6, 0.3, 7.9, 8.1, 8.3)
print(f"index 0 부터 3까지: {numbers[:4]}")
print(f"index 2 부터 4까지: {numbers[2:5]}")
print(f"index 3 부터 끝까지: {numbers[3:]}")
print(f"index 2 부터 -2까지: {numbers[2:-2]}")
print(f"index 0 부터 끝까지 3단계: {numbers[::3]}")
>>>
index 0 부터 3까지: (8.7, 9.0, 9.1, 9.2)
index 2 부터 4까지: (9.1, 9.2, 8.6)
index 3 부터 끝까지: (9.2, 8.6, 0.3, 7.9, 8.1, 8.3)
index 2 부터 -2까지: (9.1, 9.2, 8.6, 0.3, 7.9)
index 0 부터 끝까지 3단계: (8.7, 9.2, 7.9)
# 시험 점수를 입력한 후 튜플에 저장하고 과목별 학점을 출력해보자.
    
kor_score = int(input("국어 점수 입력: "))
eng_score = int(input("영어 점수 입력: "))
mat_score = int(input("수학 점수 입력: "))
sci_score = int(input("과학 점수 입력: "))
his_score = int(input("국사 점수 입력: "))

scores = (
        {"kor": kor_score},
        {"eng": eng_score},
        {"mat": mat_score},
        {"sci": sci_score},
        {"his": his_score},
)

print(f"scores: {scores}")

for item in scores:
    for key in item.keys():
        
        if item[key] >= 90:
            item[key] = "A"
            
        elif item[key] < 90 and item[key] >= 80:
            item[key] = "B"
            
        elif item[key] < 80 and item[key] >= 70:
            item[key] = "C"
            
        elif item[key] < 70 and item[key] >= 60:
            item[key] = "D"
            
        else:
            item[key] = "F"
        
print(f"scores: {scores}")
>>>
국어 점수 입력: 92
영어 점수 입력: 86
수학 점수 입력: 77
과학 점수 입력: 68
국사 점수 입력: 54
scores: ({'kor': 92}, {'eng': 86}, {'mat': 77}, {'sci': 68}, {'his': 54})
scores: ({'kor': 'A'}, {'eng': 'B'}, {'mat': 'C'}, {'sci': 'D'}, {'his': 'F'})

📍 [연습문제] 튜플(04)

# 다음 튜플의 과일 개수에 대해서 오름차순 및 내림차순으로 정렬해보자.
fruits = (
    {"수박":8},
    {"포도":13},
    {"참외":12},
    {"사과":17},
    {"자두":19},
    {"자몽":15},
)

# 먼저 딕셔너리들의 튜플을 단일 딕셔너리로 변환
fruits_dict = {list(fruit.keys())[0]: list(fruit.values())[0] for fruit in fruits}

# 과일 개수를 오름차순으로 정렬
sorted_fruits_asc = sorted(fruits_dict.items(), key=lambda x: x[1])
print(sorted_fruits_asc)

# 과일 개수를 내림차순으로 정렬
sorted_fruits_desc = sorted(fruits_dict.items(), key=lambda x: x[1], reverse=True)
print(sorted_fruits_desc)
>>>
[('수박', 8), ('참외', 12), ('포도', 13), ('자몽', 15), ('사과', 17), ('자두', 19)]
[('자두', 19), ('사과', 17), ('자몽', 15), ('포도', 13), ('참외', 12), ('수박', 8)]

📍 [연습문제] 딕셔너리(01)

# 과목별 점수를 딕셔너리에 저장하고 출력하는 프로그램을 만들어보자.

subject = ["국어", "영어", "수학", "과학", "국사"]
scores = {}

for i in subject:
    score = input(i + "점수 입력: ")
    scores[i] = score

print(scores)
>>>
국어점수 입력: 88
영어점수 입력: 96
수학점수 입력: 89
과학점수 입력: 79
국사점수 입력: 83
{'국어': '88', '영어': '96', '수학': '89', '과학': '79', '국사': '83'}

📍 [연습문제] 딕셔너리(02)

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

dic = {}

for i in range(3,11):
    hap = 180 * (i-2)
    ang = int(hap / i)
    dic[i] = [hap, ang]
print(dic)
>>>
{3: [180, 60], 4: [360, 90], 5: [540, 108], 6: [720, 120], 7: [900, 128], 8: [1080, 135], 9: [1260, 140], 10: [1440, 144]}

📍 [연습문제] 딕셔너리(03)

about_python = "파이썬은 1991년 프로그래머인 귀도 반 로섬이 발표한 고급 프로그래밍 언어이다."
l = about_python.split()
dic = {}

for idx, value in enumerate(l):
    dic[idx] = value
    
print(dic)
>>>
{0: '파이썬은', 1: '1991년', 2: '프로그래머인', 3: '귀도', 4: '반', 5: '로섬이', 6: '발표한', 7: '고급', 8: '프로그래밍', 9: '언어이다.'}

📍 [연습문제] 딕셔너리(05)

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",
                "취미": ["수영", "코딩"]}
}
for k1 in students.keys():
    print(f"학생번호: {k1}")
    
    student = students[k1]
    for k2 in student.keys():
        print(f"{k2}: {student[k2]}")
    print("="*40)
        
student_no = input("조회 대상 학생 번호 입력: ")
print(f"{student_no}: {students[student_no]}")
>>>
학생번호: 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
취미: ['수영', '코딩']
========================================
조회 대상 학생 번호 입력: S21-0001
S21-0001: {'이름': '최성훈', '성구분': 'M', '전공': '디자인', '연락처': '010-1234-5678', '메일': 'hun@gmail.com', '취미': ['농구', '음악']}
반응형