(DataStructure & Algorithm) problems

임경민·2023년 10월 17일
1
post-thumbnail
post-custom-banner

🔑Summarization


  • 자료구조 문제풀이 진행

📗Contents


자료구조

  • 컨테이너 자료형 : 여러 개의 데이터가 묶여있는 자료형

  • 컨테이너 자료형의 데이터 구조를 자료구조라고 한다.

  • 각각의 컨테이너 자료형에 따라 차이가 있으며, 대표적인 컨테이너 자료형으로는 리스트(List), 튜플(Tuple), 딕셔너리(Dic), 세트(Set)가 있다.

  • 리스트(List)와 튜플(Tuple)의 차이점

    • 튜플(Tuple)은 수정이 불가하다.
    • 딕셔너리(Dictionary)는 키값과 키값에 해당하는 값(Value)으로 구성되어 있는 것.
    • 세트(Set) : 반복된 값이 존재하지 않음

리스트

  • ‘[]’ 를 이용해서 선언하고, 데이터 구분은 ‘,’를 이용
  • 숫자, 문자(열), 논리형 등 모든 기본 데이터를 같이 저장할 수 있음
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
print('Students : {}' .format(students))
print(type(students))
numbers = [10, 20, 30, 40, 50, 60, 70]
print('Numbers : {}' .format(numbers))
print(type(numbers))
strs = [3.14, '십', 20, 'one', '3.141592']
print('Strs : {}' .format(strs))
print(type(strs))

튜플

리스트(List)와 가장 큰 차이점
※ 리스트(List)와 비슷하지만 아이템 변경 불가
추가하려고 해 보면, 에러(Error)가 발생

  • 소괄호()를 이용해 선언하고, 데이터 구분은 콤마,를 이용
  • 숫자, 문자(열), 논리형 등 모든 기본 데이터를 같이 저장할 수 있음
students = ('류현기', '김지현', '성멸치', '이박사')
numbers = (10, 20, 30, 40, 50, 60)
strs = (3.14, '십', 20, 'one', '3.141592')
  • 또 다른 컨테이너 자료형 데이터를 저장할 수도 있음
datas = (10, 20, 30, (40, 50, 60))

딕셔너리

  • 키(key)값(value)를 이용해서 자료를 관리
    ※ 딕셔너리(Dictionary)는 인덱스(index)가 존재하지 않음
  • 키(key)값은 절대 중복되어서는 안 됨
  • 중괄호 {}를 이용하여 선언하며, 키:값 의 형태로 아이템을 정의
students = {'s1':'홍길동', 's2':'박찬호', 's3':'이용규'}
print(students)
print(type(students))
  • key와 value에는 숫자, 문자(열), 논리형 뿐만 아니라 컨테이너 자료형도 가능
students = {'s1':'홍길동', 's2':'박찬호', 's3':'이용규', 's4':['김박사','임석사']}
print(students)
print(type(students))
  • key값에 immutable(변경 불가) 값은 올 수 있지만, mutable(변경 가능) 값은 불가능 ex) 리스트는 불가능, 튜플은 가능

예제문제풀이

  • 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))
  • 대학생 길동이의 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}')

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

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

scores = list(scores)
scores.append((minScore, minScore))

scores = tuple(scores)
print(f'scores : {scores}')
  • 삼각형부터 십각형까지의 내각의 합과 내각을 딕셔너리에 저장하는 프로그램을 만들어보자.
dic = {}

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

print(dic)
post-custom-banner

0개의 댓글