처음 앞면으로 뒤집는 카드가 어느 카드던간에 언젠가 맨 왼쪽 카드를 한번만 뒤집고 건들이지 않게 된다면 나머지 카드로 무슨 짓을 하던 결국 다 앞면이 되겠다고 생각했다.
영화의 답은,
문제의 의도와 나의 처음 든 생각이 맞는지는 모르지만 문제를 빠르게 분석하고 답을 도출할 수 있는 사고력을 컴퓨팅 사고력이라고 하니 단련하면 늘겠구나 싶었다.
자료구조는 데이터를 상황에 맞게 효율적으로 다루기 위한 데이터 저장/보관 방법이다.
자료구조가 특정 상황에 맞는 연장이라면 알고리즘은 능률 좋은 목수라고 보면 된다.
# 답 1) 데이터를 변수에 저장 (변수)
a = 88
b = 93
c = 95
avg = (a + b + c) / 3
print(avg)
// 처음 이 문제를 봤을 때, 배웠던 것을 활용해보려고 머리를 굴려봤지만 뚜렷하게 떠오르는 생각이 없었다. 너무 의욕만 앞선게 아닌가 싶다. 단순하게 생각해봤다면 이 답은 생각할 수 있을 것이다.
# 답 2) 데이터들을 리스트에 저장 (배열)
arr = [88, 93, 95]
avg = 0
for i in arr:
avg += i
avg = avg / len(arr) (= avg /= len(arr))
print(avg)
// 이 문제는 '리스트가 있으면 반복해야겠다'라는 생각은 들었지만 반복문 안의 식을 어떻게 구성해야하는지도 생각이 안 났고, 반복문을 돌리고 난 값에 새로운 값을 할당해주는 방법도 생각하지 못했다. 꼭 이 방법이 아니어도, 변수가 여러 개 등장하는 방법도 있지만 최대한 간단하고 효율적인 방법을 생각하는 사고가 중요한 것 같다.
// 문제 1번을 보고 혼자 풀어봤다.
# 답 1) 변수 활용
a = 88
b = 93
c = 95
d = 100
avg = (a + b + c + d) / 4
print(avg)
# 답 2) 배열 활용
arr = [88, 93, 95, 100]
avg = 0
for i in arr:
avg += i
avg /= len(arr)
print(avg)
// 자료구조가 어떻게 되어있는지에 따라서 답을 도출하기 위한 식인 알고리즘이 다르다는 것을 쉽게 느낄 수 있었던 것 같다. 평균을 구하기 위해 나누기를 하는 것에서 나누기의 기능이 어떤 식으로 굴러가는지 이해해야하고 코딩에서도 각 식의 기능을 정확히 알아야 자료구조를 봤을 때 어떤 식을 써야하는지 감이 올 것 같다.
# 배열 활용 version 1)
arr = [88, 93, 95]
sum_ = 0
sum_ += arr[0]
sum_ += arr[1]
sum_ += arr[2]
average = sum_ / len(arr)
print(average)
# 배열 활용 version 2
arr = [88, 93, 95]
average = 0
for i in arr:
average += i
average /= len(arr)
print(average)
# 데이터양과 상관없이 항상 일정한 연산량을 갖는 알고리즘
# 그래프 : 데이터의 양과 상관없이 작동의 수가 일정하다.
def fourth_element(arr):
print(f"네 번째 요소는 {arr[3]}임.")
a = [1, 2, 3, 4, 5]
fourth_element(a) # 네 번째 요소는 4임.
b = [23, 4, 6, 34, 86, 85, 24, 2346, 85, 12124]
fourth_element(b) # 네 번째 요소는 34임.
c = [1,23,5,235,23,5,34,6,34,6,43,6,34,6,34,634,6,43,6,3,634]
# 데이터양(n)과 비례해 연산량도 증가하는 알고리즘
# 그래프 : 데이터양(n)이 증가하면 연산수(n)도 비례해서 증가한다.
for i in range(n):
sum_ += i
# 데이터양이 증가할수록 데이터양의 제곱만큼 연산량 증가하는 알고리즘
# 보통 이중 for 문에서 수행 시간 분석하는 방법이다.
for i in range(n):
sum_ = 0
for j in range(n):
# 2n + n
sum_ += i
메모리의 연속공간에 값이 채워져 있는 형태
def fourth_element(arr):
print(f"네 번째 요소는 {arr[3]}임.")
a = [1, 2, 3, 4, 5]
fourth_element(a) # 네 번째 요소는 4임.
b = [23, 4, 6, 34, 86, 85, 24, 2346, 85, 12124]
fourth_element(b) # 네 번째 요소는 34임.
초기 선언된 사이즈만큼 메모리의 연속 공간이 필요하므로 작은 빈 공간은 버려지는 경우가 생겨 메모리 활용에 비효율적
연속된 빈 공간 중에 임의의 데이터값이 들어가서 자리를 차지한다면 이곳에 8개 요소를 가지는 배열은 저장을 못한다.
값의 삽입과 삭제에서 비효율적, 데이터 중간 지점에서 자료의 삽입, 삭제가 일어날 경우 다음 항목의 모든 값을 이동시켜야 한다.
선언할때 크기를 지정하지 않으며 주소로 계속 연결하여 연속된 공간이 필요하지 않아 빈 공간을 활용할 수 있음
def count_passer(score, c):
answer = 0
return answer
# [80, 40, 90, 55, 94, 30, 60, 44]
print(count_passer([80, 40, 90, 55, 94, 30, 60, 44], 60))
def count_passer(score, cl):
answer = 0
for a in score:
if a >= cl:
answer += 1
return answer
print(count_passer([80, 40, 90, 55, 94, 30, 60, 44], 60))
# 4
최소값 구하기(index)
스캐치
기본 코드
def minimum_value(nums):
answer = 0
return answer
# [23, 20, 73, 98, 11, 4, 288]
print(minimum_value([23, 20, 73, 98, 11, 4, 288]))