파이썬 프로그래밍 시작 (11) 연습문제 : 자료구조

파이썬 프로그래밍 시작 (11) 연습문제 : 자료구조

자료구조를 이용한 파이썬 프로그래밍 연습을 해보겠습니다. 이런 코딩 연습을 하는 이유는 고민한 만큼 기억에 남기 때문입니다. 이 연습을 통해 리스트와 딕셔너리의 기본을 확실히 다질 수 있습니다. 먼저 자료구조에 대해 잠시 복습하고, 파이썬 프로그래밍 연습으로 넘어가겠습니다.


글의 순서

파이썬 프로그래밍 시작하기 : replit 로그인
자료구조 연습문제를 풀기 위한 복습
파이썬 프로그래밍 연습 : 메뉴 리스트에서 음료 개수 세는 프로그램


파이썬 프로그래밍 시작하기 : replit 로그인

리플(http://repl.it)에 로그인합니다.
로그인하고 난 후 보이는 화면의 중앙 상단에 ‘+new repl’ 버튼이 있습니다. 이 버튼을 클릭하면, ‘New repl’ 창이 뜨는데 여기서 프로그래밍 언어로 파이썬(Python)을 선택합니다. 파이썬 선택 후 ‘Creat Repl’ 을 클릭합니다.

이 과정을 거치면 지난 포스팅에서 보셨던 코딩 환경이 나타나는데, 역시나 3개의 창이 보입니다. 창의 배치는 달라질 수 있습니다만, 그 3개의 창은 각각 코드를 담고 있는 파일이름이 있는 창, 코드를 편집할 수 있는 창, 코드 실행결과를 확인할 수 있는 창(=터미널)으로 구성되어 있습니다.



자료구조 연습문제를 풀기 위한 복습

자료구조(data structure)는 알고리즘을 구현하는데 필요한 데이터의 집합입니다. 컴퓨터에서 자료를 어떻게 구성하는지, 어떤 방식으로 관리하는지와 직접적인 관련이 있습니다. 파이썬 프로그래밍에서 주로 사용하는 자료구조는 리스트(list), 튜플(tuple), 딕셔너리(dictionary)입니다.

리스트와 튜플은 엘리먼트라고 하는 자료를 묶어놓은 것인데, 인덱스 기반으로 값을 저장한 것입니다. 반면, 딕셔너리는 키 기반으로 값을 저장합니다. 리스트와 튜플은 비슷한 자료구조인데, 리스트는 엘리먼트를 바꿀 수 있으나, 튜플은 바꿀 수 없다는 것이 차이점입니다.

딕셔너리는 키(key)와 값(value)으로 구성되는데, 키에 할당된 값을 바꿀 수 있으며, 딕셔너리09 코드에서와 같이 키를 추가할 수도 있습니다.

실습코드 : 딕셔너리09

x = {
   0 : "현아",
   1 : "안녕",
  "age" : 20
 }

print(x)

x[0] = "민서"
print(x)

자료구조복습01

print(“리스트 x”)
x = [3,2,4,1]
print(x.index(4))

print("딕셔너리 y")
y = {}
y["이름"] = "현아"
y["나이"] = 20
y["학교"] = "미르"
print(y)

자료구조복습01 실행결과

리스트 x
2
딕셔너리 y
{‘이름’: ‘현아’, ‘나이’: 20, ‘학교’: ‘미르’}


파이썬 프로그래밍 연습 : 메뉴 리스트에서 음료 개수 세는 프로그램

리스트에 들어있는 엘리먼트의 개수를 세는 문제를 풀어보겠습니다. 리스트와 딕셔너리를 함께 써서 코딩해 볼 수 있는 문제이며, 실제 인턴 채용을 위한 기술면접에서 물어보는 문제라고 합니다. 참고자료 53분02초 부터입니다. 참고자료에서 테크보이 워니님은 과일 개수를 세는 파이썬 프로그래밍을 했으나, 이 포스팅에서는 과일을 카페메뉴로 바꿔봤습니다.

(1) 문제 : 아래 menu 라는 리스트에서 각 종류별 음료의 개수를 세시오.

menu = ["커피", "커피", "홍차", "홍차", "커피", "주스", "에이드", "에이드", "에이드", "스무디", "주스" ,"주스"]

(2) 알고리즘 구상

딕셔너리를 만든다.
딕셔너리의 키를 메뉴종류로 하고, 각 메뉴의 개수를 값으로 한다.
  – 리스트의 엘리먼트를 하나씩 비교해보면서 엘리먼트가 추가되는지 확인한다.
  – 엘리먼트가 처음 나왔다면 개수는 1
  – 두 번째 등장하는 엘리먼트가 있으면, 기존 엘리먼트 개수를 하나씩 추가한다.

(3) 파이썬 프로그래밍

위에서 만든 알고리즘을 연습코드03에 구현해 보았습니다. 비어있는 딕셔너리 d를 만들고, 딕셔너리 d에 키와 값을 하나씩 추가해가는 프로그램입니다.

연습코드03

menu = ["커피", "커피", "홍차", "홍차", "커피", "주스", "에이드", "에이드", "에이드", "스무디", "주스" ,"주스"]
d = {}

for m in menu:
  print(m)
  print(d)
  if m in d:
   d[m]=d[m]+1
  else:
   d[m]=1

연습코드03에서 비어있는 딕셔너리를 만드는 부분은 d = {}입니다. 딕셔너리 d의 키는 리스트 ‘menu’에서 순서대로 엘리먼트를 하나씩 옮겨가면서 생성합니다. for 반복문에서 변수 m은 리스트에 있는 엘리먼트만큼 반복됩니다. for 반복문에서 m이 리스트 menu에 있는 어떤 엘리먼트를 가리키는지 보기 위해 print(m)으로 출력하였습니다. 이와 동시에 딕셔너리 d가 어떻게 채워지는지를 확인하기 위하여 print(d)를 추가했습니다. 그 다음에 나오는 조건문에서 딕셔너리의 키와 각 키에 할당되는 값을 결정하게 됩니다.

실제로 연습코드03이 실행되는 모습을 차례대로 살펴보겠습니다.
(1) for 반복문에서 m이 리스트 menu의 첫 번째 엘리먼트일 때 :
  – 첫 번째 엘리먼트는 ‘커피’이므로, m은 ‘커피’입니다. 따라서 m을 출력한 결과는 ‘커피’, d를 출력한 결과는 {} 이 됩니다.
  – ‘커피’인 m은 딕셔너리 d에 없으므로, d[m] = 1을 실행합니다. d[m]에서 m은 딕셔너리 d의 키이며, 1은 키에 할당되는 값이 됩니다.
  * 이 부분이 자료구조 파이썬 프로그래밍 연습의 핵심부분입니다. 자료구조복습01 코드에서 비어있던 딕셔너리 y의 키와 값을 채우는 부분을 참고해 보시기 바랍니다.

(2) 반복문 처음으로 돌아온 후, m이 리스트 menu의 두 번째 엘리먼트 일 때 :
  – 두 번째 엘리먼트도 ‘커피’이므로, m는 ‘커피’입니다. 따라서 m을 출력한 결과는 ‘커피’, d를 출력한 결과는 {‘커피’: 1} 이 됩니다.
  – ‘커피’인 m은 딕셔너리 d에 있으므로, d[m] = d[m] + 1을 실행합니다. d[m]에서 m은 딕셔너리 d의 키이며, d[m] + 1은 키에 할당되는 값이 됩니다. 여기서 키에 할당되는 값인 d[m] + 1은 2입니다.

(3) 반복문 처음으로 돌아온 후, m이 리스트 menu의 세 번째 엘리먼트 일 때 :
  – 세 번째 엘리먼트는 ‘홍차’이므로, m은 ‘홍차’입니다. 따라서 m을 출력한 결과는 ‘홍차’, d를 출력한 결과는 {‘커피’: 2} 가 됩니다.
  – ‘홍차’인 m은 딕셔너리 d에 없으므로, d[m] = 1을 실행합니다.

(4) 반복문 처음으로 돌아온 후, m이 리스트 menu의 네 번째 엘리먼트 일 때 :
  – 네 번째 엘리먼트는 ‘홍차’이므로, m은 ‘홍차’입니다. 따라서 m을 출력한 결과는 ‘홍차’, d를 출력한 결과는 {‘커피’: 2, ‘홍차’: 1} 이 됩니다.
  – ‘홍차’인 m은 딕셔너리 d에 있으므로, d[m] = d[m] + 1을 실행합니다. 여기서, 키에 할당되는 값인 d[m] + 1는 2입니다.

네 번째 엘리먼트까지 이후에도 똑같은 과정을 반복합니다. 연습코드03 실행결과에서 확인해 보시기 바랍니다.

연습코드03 실행결과

커피
{}
커피
{‘커피’: 1}
홍차
{‘커피’: 2}
홍차
{‘커피’: 2, ‘홍차’: 1}
커피
{‘커피’: 2, ‘홍차’: 2}
사과주스
{‘커피’: 2, ‘홍차’: 2, ‘커피’: 1}
레몬에이드
{‘커피’: 2, ‘홍차’: 2, ‘커피’: 1, ‘사과주스’: 1}
레몬에이드
{‘커피’: 2, ‘홍차’: 2, ‘커피’: 1, ‘사과주스’: 1, ‘레몬에이드’: 1}
레몬에이드
{‘커피’: 2, ‘홍차’: 2, ‘커피’: 1, ‘사과주스’: 1, ‘레몬에이드’: 2}

혹시 연습코드01, 02 없이 03부터 나와서 연습코드01, 02가 궁금하실텐데요. 파이썬 함수에 대해 연습해본 연습코드01, 02는 ‘파이썬 프로그래밍 시작 (5) 연습문제 : 함수 만들기’라는 포스팅에 있습니다.


마치며 …

이 포스팅에서는 자료구조를 이용한 파이썬 프로그래밍 연습을 해보았습니다. 이런 코딩 연습을 하는 이유는 고민한 만큼 기억에 남기 때문입니다. 비어있던 딕셔너리의 키와 값이 어떻게 채워지는지를 이해하셨다면, 이 포스팅의 목표를 달성한 것입니다.

참고로 이 파이썬 코딩 연습문제에 대한 해설은 참고자료의 53분02초부터 확인하실 수 있습니다. 이 문제는 인턴 채용을 할 때 기술면접에서 자주 물어보는 문제라고도 소개하고 있습니다. 다음 포스팅에서는 파이썬 프로그래밍 능력을 확장하는데 필수적인 클래스와 오브젝트를 배워보겠습니다.

 

 

함께 참고하면 더 좋은 글 :
1. 파이썬 프로그래밍 시작하기 (1) 온라인 프로그래밍 환경 replit
2. 파이썬 프로그래밍 시작 (2) 변수, 타입, 문자열 실습
3. 파이썬 프로그래밍 시작 (3) 파이썬 함수 실습
4. 파이썬 프로그래밍 시작 (4) 조건문
5. 파이썬 프로그래밍 시작 (5) 연습문제 : 함수 만들기
6. 파이썬 프로그래밍 시작 (6) 반복문
7. 파이썬 프로그래밍 시작 (7) 반복문과 무한루프
8. 파이썬 프로그래밍 시작 (8) 자료구조(Data Structure) : 리스트
9. 파이썬 프로그래밍 시작 (9) 자료구조(Data Structure) : 튜플
10. 파이썬 프로그래밍 시작 (10) 자료구조(Data Structure) : 딕셔너리
11. 파이썬 데이터 분석! 데이터 분석을 위한 코딩언어 파이썬
12. 애플 실리콘 M1 시리즈 비교 : M1 Pro, M1 Max, M1 Ultra


참고자료

테크보이 워니(2020), 코딩 1시간만에 배우기 – 파이썬 (ft. 실리콘밸리 엔지니어)

 

Leave a Comment