Algorithm Introduction
알고리즘 = 컴퓨터에게 복잡한 조건으로 계산을 시키는 것
파이썬의 자료형을 이용하여 세상의 데이터를 표현하고, 논리적으로 계산할 수 있다.
Q. 만약 어떤 사람의 이름이 alex, 나이는 3, 그리고 운전면허를 보유하고 있다면?
- 할당 연산자 =를 통해 변수에 각기 다른 자료형을 담아 표현할 수 있다.
name = 'alex' # 이름에는 문자열을,
age = 3 # 나이에는 숫자를,
license = True # 운전면허 보유여부에는 진리값을 할당할 수 있습니다.
- 할당 연산자는 더 정확하게는, 변수가 할당된 객체의 주솟값을 ‘가리키게’ 된다.
- name ⇒ ‘alex’ 객체를 pointing. Python Tutor 사이트를 활용하여 볼 수 있다.
Online Python Tutor - visualize, debug, get AI help for Python, Java, C, C++, and JavaScript
Online Compiler, Visual Debugger, and AI Tutor for Python, Java, C, C++, and JavaScript Python Tutor helps you do programming homework assignments in Python, Java, C, C++, and JavaScript. It contains a unique step-by-step visual debugger and AI tutor to he
pythontutor.com
Q. 한 사람의 정보를 하나의 변수에 할당하여 사용하고 싶다면 어떤 방식이 있을까?
- 리스트 혹은 딕셔너리와 같은 자료구조를 활용하여 정리해볼 수 있다.
# 리스트를 사용하는 경우
user = ['alex', 3, True]
# 딕셔너리를 사용하는 경우
user = {'name': 'alex', 'age':3, 'license':True}
Q. 만약 사람이 여러명이라면 어떻게 조직할 수 있을까?
- 여러 자료구조를 섞어 표현할 수 있다.
users = {
'total_user': 3,
'information': [
{'name': 'alex', 'age':3, 'license':True},
{'name': 'june', 'age':7, 'license':False},
{'name': 'peter', 'age':4, 'license':False}
]
}
실제 알고리즘 문제에서도 문제에 나타난 정보를 어떻게 구조화 할 것인지가 아주 중요한 문제가 되며,
가장 먼저 고민해야 할 부분
제어문 if, 반복문 for
if, elif, else 구문을 조합하여 특정 조건이 만족될 때 실행할 로직을 설정할 수 있습니다.
- 어떤 광산에서는 채굴한 광물들의 등급을 상품인 1등급부터 하품인 3등급까지 나누어 등급을 매긴 후, 해당 정보를 저장해서 관리한다.
- A 광산은 10개의 광물을 채굴하였고 각각 등급은 다음과 같다.
gems = [3, 3, 1, 2, 3, 2, 2, 3, 3, 1]
채굴한 광물들 중 1등급 광물이 존재하는지 여부는 어떻게 알 수 있을까?
gems = [3, 3, 1, 2, 3, 2, 2, 3, 3, 1]
# 방법 1 : in 연산자를 활용합니다.
if 1 in gems:
print(True)
else:
print(False)
# 방법 2 : for문과 제어문을 섞어 활용합니다.
gems = [3, 3, 1, 2, 3, 2, 2, 3, 3, 1]
grade1 = False # 특정 변수(flag)를 통해 여부를 저장하는 편이 좋습니다.
for i in gems:
if i == 1:
grade1 = True
break # 효율성을 위한 미리 브레이크
print(grade1)
1, 2, 3등급 광물은 각각 몇 개가 있는지 어떻게 기록하면 좋을까?
# 자유롭게 구조화 합니다.
gems = [3, 3, 1, 2, 3, 2, 2, 3, 3, 1]
grades = {1:0, 2:0, 3:0}
for i in gems:
grades[i] += 1
print(grades)
만약 광물의 등급의 합계가 15 이하면 성공, 23 이하면 보통, 30을 초과하면 실패라고 할 때, 올해의 등급에 따른 성공 척도를 출력하려면 어떻게 해야 할까?
gems = [3, 3, 1, 2, 3, 2, 2, 3, 3, 1]
result = sum(gems)
if result <= 15:
print('성공')
elif 15 < result <= 23:
print('보통')
else:
print('실패')
[실전 문제풀이]
max(), min() 함수의 직접 구현
def my_max(iterable):
if not iterable:
raise ValueError("empty sequence")
max_val = iterable[0]
for item in iterable[1:]:
if item > max_val:
max_val = item
return max_val
def my_min(iterable):
if not iterable:
raise ValueError("empty sequence")
min_val = iterable[0]
for item in iterable[1:]:
if item < min_val:
min_val = item
return min_val
# 테스트
nums = [3, 1, 4, 1, 5, 9, 2, 6]
print("최댓값:", my_max(nums)) # 출력: 9
print("최솟값:", my_min(nums)) # 출력: 1
- my_max() 함수는 입력된 리스트의 첫 번째 요소를 초기 최댓값으로 설정한 후, 리스트의 나머지 요소들을 순회하면서 현재까지의 최댓값보다 큰 값을 찾으면 해당 값을 최댓값으로 업데이트한다.
- my_min() 함수도 비슷한 방식으로 작동하며, 최솟값을 찾는 과정에서는 현재까지의 최솟값보다 작은 값을 찾으면 해당 값을 최솟값으로 업데이트한다.
- 이러한 방식으로 구현된 함수들은 리스트 내의 요소들을 비교하여 최댓값과 최솟값을 찾아내므로, max()와 min() 함수와 동일한 결과를 반환한다.
'Python' 카테고리의 다른 글
파이썬 메서드와 내장함수 (1) | 2024.03.31 |
---|---|
함수(Function) (0) | 2024.03.31 |
반복문(Loop) (1) | 2024.03.23 |
컨테이너(Container) 자료형 (1) | 2024.03.23 |
조건문(Condition) (0) | 2024.03.23 |