12. 자료구조_1~3

wonny_·2023년 7월 20일
0

자료구조&알고리즘

목록 보기
1/10
  • 자료구조

    • 컨테이너 자료형의 데이터 구조
      (컨테이너 자료형: 여러개의 데이터가 묶여있는 자료형)
      • List : ex) students = ['홍길동', '박찬호', '이용규']
        리스트 내의 데이터 바꿀 수 있음
      • Tuple : ex) jobs = ('의사', '변호사', '감저평가사')
        한 번 어떤 데이터가 정해지면 바꿀 수 없음
      • Dic : ex) scores = {'kor':90, 'eng':100, 'mat':95}
        key 값에 해당하는 value 값으로 이루어짐
      • Set : ex) allsales = {100, 150, 90, 110}
        중복된 데이터가 존재하지 않음

  • 리스트(List)

    • 배열과 같이 여러 개의 데이터를 나열한 자료구조
    • '[ ]'를 이용해서 선언하고, 데이터 구분(아이템 구분)은 ',' 이용
    • 숫자, 문자열, 논리형 등 모든 기본 데이터를 같이 저장할 수 있음
    • 리스트에 또 다른 컨테이너 자료형 데이터 저장할 수 있음
      ex) datas = [10, 20, 30, [40, 50]]

  • 리스트 아이템 조회

    • 인덱스: 아이템에 자동으로 부여되는 번호표 0부터 시작
    • 리스트 아이템은 인덱스를 이용해서 조회 가능
Q. 5명의 학생 이름을 리스트에 저장하고 인덱스가 홀수인 학생과 짝수(0포함)인 학생 구분해서 인덱스와 학생 이름 출력/ for문으로 변경

students = ['김성예', '신경도', '박기준', '최승철', '황동석']

print('--인덱스가 짝수인 학생--')
print('students[0]: {}'.format(students[0]))
print('student[2]: {}'.format(students[2]))
print('student[4]: {}'.format(students[4]))
print('--인덱스가 홀수인 학생--')
print('student[1]: {}'.format(students[1]))
print('student[3]: {}'.format(students[3]))

for i in range(5):
    if i % 2 == 0:
       print('인덱스가 짝수인 경우 --> students[{}]: {}'.format(i, students[i]))

    else:
        print('인덱스가 홀수인 경우: students[{}]: {}'.format(i, students[i]))

  • 리스트 길이

    • 리스트에 저장된 아이템 개수
    • len()과 반복문을 이용하면 리스트의 아이템 조회 가능
    • len()함수는 리스트의 개수뿐만 아니라 문자열의 길이도 알 수 있음
Q. len()과 반복문을 이용하여 리스트 아이템 조회

1)

students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
sLength = len(students)
print('length of students: {}'.format(sLength))


2)

for i in range(len(students)):
    print('i: {}'.format(i))
    print('students[{}]: {}'.format(i, students[i]))

3) 

n = 0
sLength = len(students)
while n < sLength:
      print('n: {}'.format(n))
      print('students: {}'.format(n, students[n]))
      n += 1

Q. len()함수의 문자열 길이 

str = 'hello python'
print('\'hello python\'의 길이: {}'.format(len(str)))

Q. 좋아하는 운동 종목을 리스트에 저장하고 반복문을 이용해서 출력 

myFavoriteSports = ['수영', '배구', '야구', '조깅']

for i in range(len(myFavoriteSports)):
    print('myFavoriteSports[{}] : {}'.format(i, myFavoriteSports[i]))    

  • 리스트와 for문 1

    • for문을 이용하면 리스트의 아이템을 자동으로 출력 가능
      for i in range(len(list)):
Q. 학급별 학생 수와 전체 학생 수 그리고 평균 학생수 출력

studentCnts = [[1, 18], [2, 19], [3, 23], [4, 21], [5, 20], [6, 22],[7, 17]]

sum = 0
avg = 0
for calssNo, cnt in studentCnts:
    print('{}학급 학생수: {}명'.format(calssNo, cnt))
    sum += cnt

print('전체 학생 수: {}명'.format(sum))
print('평균 학생 수: {}명'.format(sum/ len(studentCnts)))

  • 리스트와 for문 2
Q. 사용자가 국어, 영어, 수학, 과학, 국사 점수를 입력하면 과락 과목과 점수를 출력

minScore = 60

korScore = int(input('국어점수 입력: '))
engScore = int(input('영어점수 입력: '))
mathScore = int(input('수학점수 입력: '))
sciScore = int(input('과학점수 입력: '))
hisScore = int(input('국사점수 입력: '))

scores = [['국어', korScore], ['영어', engScore], ['수학', mathScore], ['과학', sciScore], ['국사', hisScore]]

for subject, score in scores:
    if score < minScore:
       print('과락 과목: {}, 점수:{}'.format(subject, score))

Q. 학급 학생수가 가장 작은 학급과 가장 많은 학급 출력 

studentCnts = [[1, 18], [2, 19], [3, 23], [4, 21], [5, 20], [6, 22], [7, 17]]

maxClass = 0
minClass = 0
maxCnt = 0
minCnt = 0

for classNo, cnt in studentCnts:
    if minClass == 0 or minCnt > cnt:
       minClass = classNo
       minCnt = cnt

    if maxClass == 0 or maxCnt < cnt:
       maxClass = classNo
       maxCnt = cnt
       
print('학생 수가 가장 적은 학급(학생수): {}학급 {}명'.format(minClass, minCnt))
print('학생 수가 가장 많은 학급(학생수): {}학급 {}명'.format(maxClass, maxCnt))

  • 리스트와 while문 1
Q. 학급별 학생 수와 전체학생 수 그리고 평균 학생수 출력

studentCnts = [[1,18], [2,19],[3,23],[4,21],[5,20],[6,22],[7,17]]

sum = 0
avg = 0
n = 0

while n < len(studentCnts):
    classNo = studentCnts[n][0]
    cnt = studentCnts[n][1]
    print('{}학급 학생 수: {}'.format(classNo, cnt))
    
    sum += cnt
    n += 1
    
print('전체 학생 수: {}명'.format(sum))
print('평균 학생 수: {}명'.format(sum/ len(studentCnts)))

  • 리스트와 while문 2
Q. while문 이용해서 학급 학생 수가 가장 작은 학급과 가장 많은 학급 출력 

studentCnts = [[1, 18], [2, 19],[3, 23],[4, 21],[5, 20],[6, 22],[7, 17]]

maxClass = 0
minClass = 0
maxCnt = 0
minCnt = 0

n = 0

while n < len(studentCnts):
   
    if minCnt == 0 or minCnt > studentCnts[n][1]:
       minClass = studentCnts[n][0]
       minCnt = studentCnts[n][1]
       
    if maxCnt < studentCnts[n][1]:
       maxClass = studentCnts[n][0]
       maxCnt = studentCnts[n][1]
    n += 1
    
print('학생 수가 가장 적은 학급(학생수): {}학급 ({}명)'.format(minClass, minCnt))
print('학생 수가 가장 많은 학급(학생수): {}학급 ({}명)'.format(maxClass, maxCnt))    

  • enumerate()함수

    • 아이템 열거할 수 있음
      for idx, value in enumerate(리스트명)
    • 문자열에 적용 가능
Q. 사용자가 입력한 문자열에서 공백의 개수 출력

message = input('메시지 입력: ')
cnt = 0
for idx, value in enumerate(message):
    if value == ' ':
       cnt += 1


print('공백의 개수: {}'.format(cnt))

  • 리스트에 아이템 추가

    • append() : 마지막 인덱스에 아이템 추가할 수 있음
      리스트명.append(추가할 아이템)
Q. append() 함수를 이용하여 마지막 인덱스에 아이템 추가

scores = [['국어', 88], ['영어', 91]]

print('scores: {}'.format(scores))
print('scores length: {}'.format(len(scores)))
print('last index: {}'.format(len(scores) -1))

scores.append(['수학', 96])

print('scores: {}'.format(scores))
print('scores length: {}'.format(len(scores)))
print('last index: {}'.format(len(scores) -1))

print('scroes: {}'.format(scores))

for subject, score in scores:
   print('과목: {}, 점수: {}'.format(subject, score))

  • 리스트의 특정 위치에 아이템 추가

    • insert(): 특정위치(인덱스)에 아이템 추가
      리스트명.insert(특정위치, 추가할 아이템)
Q. 오름차순으로 정렬되어 있는 숫자들에 사용자가 입력한 정수를 추가

numbers = [1,3,6,11,45,54,62,74,85]
inputNumber = int(input('숫자 입력: '))
insertIdx = 0

for idx,number in enumerate(numbers):
    print(idx, number)

    if insertIdx == 0 and inputNumber < number:
       insertIdx = idx

numbers.insert(insertIdx, inputNumber)
print('numbers: {}'.format(numbers)

  • 리스트의 아이템 삭제

    • pop(): 마지막 인덱스에 해당하는 아이템 삭제
    • pop(n): n인덱스에 해당하는 아이템 삭제
Q. 점수표에서 최고/최저 점수 삭제 

playerScore = [9.5, 8.9, 9.2, 9.8, 8.8, 9.0]

minScore = 0; maxScore = 0
minScoreIdx = 0; maxScoreIdx = 0

for idx, score in enumerate(playerScore):
    if idx == 0 or minScore > score:
       minScore = score
       minScoreIdx = idx
       
print(f'minScore: {minScore}, minScoreIdx: {minScoreIdx}')
playerScore.pop(minScoreIdx)

for idx, score in enumerate(playerScore):
    if maxScore < score:
       maxScoreIdx = idx
       maxScore = Score
       
print(f'maxScore: {maxScore}, maxScoreIdx: {maxScoreIdx}')
playerScore.pop(maxScoreIdx)
print('playerScroes: {}'.format(playerScores))

  • 특정 아이템 삭제

    • remove(): 특정 아이템 한 개만 삭제 가능
    • 두 개 이상의 동일한 아이템을 remove()로 삭제할 경우 가장 앞의 아이템 한 개가 삭제
Q. 사용자가 입력한 일정을 삭제 

myList = ['마케팅 회의', '회의록 정리', '점심 약속', '월간 업무 보고', '치과 방문', '마트 장보기']
print('일정: {}'.format(myList))

removeItem = input('삭제 입력: ')
myList.remove(removeItem)
print('일정: {}'.format(myList))

Q. 사용자가 입력한 과목 삭제 

subjects = ['국어', '영어', '수학', '과학', '국사']
print('시험 과목표: {}'.format(subjects))

removeSubjects = input('삭제 과목 입력: ')
while removeSubjects in subjects:
    subjects.remove(removeSubjects)

print('시험 과목표: {}'.format(subjects))    

profile
파이팅

0개의 댓글