본문 바로가기

모든 문제에 순서도 함께 만드세요. 모르는 문제는 넘어가셔도 좋아요.

 

이제는, 문제를 보고 어떻게 풀어야 겠다는 생각을 소스코드로 옮길 수 있어야 해요.

 

연습문제

 

 

예제37

1부터 10까지의 수를 리스트에 저장하고 출력하기

i가 1부터 시작해 1씩 증가하며 10까지 반복하며 i 값을 리스트 a[ i-1 ]에 저장한다. 결국 a[ 0 ]에는 1, a[ 1 ]에는 2, a[ 2 ]에는 3, ..., a[ 9 ]에는 10이 저장된다.

 

a = []
for i in range(1, 11):
    a.append(i)
print(a)

# 실행결과
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

 

 

 

예제38

10, 20, 30, ..., 100 저장하고, 거꾸로 출력하기

i가 1부터 1씩 증가하며 10이 될 때까지 반복하며 i*10을 a[i-1]에 저장한다. 그리고 i가 9부터 1씩 감소하며 0이 될 때까지 반복하며 a[i] 값을 출력한다.

 

a = []
for i in range(10, 101, 10):
	a.append(i)
for i in range(9, -1, -1):
	print(a[i], end=" ")

# 실행결과
# 100 90 80 70 60 50 40 30 20 10

 

 

 

예제39

리스트 요소 거꾸로 뒤집기

i가 0부터 1씩 증가하며 4가 될 때까지 반복하며 a(i)와 a(9-i)를 교환한다. 결국 a[0]과 a[9]가, a[1]과 a[8]이, a[2]와 a[7]이, a[3]과 a[6]이, a[4]와 a[5]가 교환된다.

 

a 값과 b 값을 교환하는 절차는 다음과 같다.

temp = a

a = b

b = temp

 

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in range(0, 5):
    temp = a[i]
    a[i] = a[9-i]
    a[9-i] = temp
print(a)

# 실행결과
# [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

 

 

 

예제40

리스트 a 요소 리스트 b에 거꾸로 저장하기

리스트 a 요소를 거꾸로 해서 리스트 b에 저장한다.

i가 0부터 1씩 증가하며 9가 될 때까지 반복하며 a[9-i]값을 b[i]에 저장한다. 결국 b[0]에는 a[9] 값이, b[1]에는 a[8] 값이, ..., b[9]에는 a[0] 값이 저장된다.

 

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = []
for i in range(0, 10):
	b.append(a[9-i])
print(b)

# 실행결과
# [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

 

 

 

예제41

리스트 요소 왼쪽←으로 한 칸씩 원형으로 이동하기

리스트 요소를 왼쪽으로 한 칸씩 원형으로 이동하는 동작 전후 구조는 다음과 같다.

temp에 a[0] 값을 저장하고, i가 0부터 1씩 증가하며 8이 될 때까지 반복하며 a[i+1] 값을 a[i]에 저장한다. 그리고 temp 값을 a[9]에 저장한다.

 

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
temp = a[0]
for i in range(0, 9):
	a[i] = a[i+1]
a[9] = temp
print(a)

# 실행결과
# [2, 3, 4, 5, 6, 7, 8, 9, 10, 1]

 

 

 

예제42

리스트 요소 중 최댓값 구하기

a[0] 값을 max에 저장하고, i가 1부터 1씩 증가하며 9가 될 때까지 반복하며 a[i] 값이 max 값보다 크면 a[i] 값을 max에 저장한다.

 

import random
a = []
for i in range(10):
	a.append(random.randint(1, 100))
print(a)
m = a[0]
for i in range(1, 10):
	if m<a[i]:
		m = a[i]
print("최댓값:", m)

# 실행결과
# [91, 90, 78, 35, 65, 9, 97, 54, 62, 90]
# 최댓값: 97

 

 

 

예제43

에라토스테네스의 체 (선택 문제)

에라토스테네스의 체를 이용해서 1부터 100까지의 소수를 위 방법으로 구현하라.

a = []
for i in range(1, 102):
	a.append(0)
 
for i in range(2, 101):
	if a[i]==0:
		for j in range(i*2, 101, i):
		    a[j] = 1
            
for i in range(2, 101):
    if a[i]==0:
        print(i, end=" ")
        
        
# 실행결과
# 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

 

 

예제44

10진수를 2진수로 변환하여 리스트에 저장하기

(문제를 못 풀더라도, 2진수 개념은 알아둡시다.)

b = []
n = int(input("10진수: "))
while n!=0:
	b.append(n%2)
	n = n//2
for i in range(len(b)-1, -1, -1):
	print(b[i], end=" ")
    
# 실행결과
# 10진수 : 42
# 1 0 1 0 1 0

 

 

 

예제 45

배열에 저장된 2진수를 10진수로 변환하기

b = [1,1,0,0,1]
n = 0
for i in range(0, 5):
	n = n + b[i]*(2**(4-i))
print(n)

# 실행결과
# 25 # (2진수 리스트가 b = [1,1,0,0,1] 일 때)

 

 

과제

과제 28

20부터 1까지 수를 차례로 리스트에 저장하고 출력하는 순서도와 파이썬 프로그램을 작성하여라.

 

 

과제 29

리스트 요소를 오른쪽으로 한 칸씩 원형으로 이동하는 순서도와 파이썬 프로그램을 작성하여라.

 

과제 30

임의의 10개의 수를 저장하고 있는 리스트에서 최솟값을 구하는 순서도와 파이썬 프로그램을 작성하여라.

 

과제 31

입력 받은 10진수를 8진수로 변환하여 출력하는 순서도와 파이썬 프로그램을 작성하여라.

 

과제 32

리스트에 저장된 8진수를 10진수로 변환하는 순서도와 파이썬 프로그램을 작성하여라.

o_list = [2,4,0]
dec_num = 0
cnt = len(o_list)
for i in range(0, cnt):
    dec_num = dec_num + o_list[i]*(8**((cnt-1)-i)) 
print(dec_num)

 

 

 

 

 


이후는 선택 문제 입니다.

코드만 구현하는 이유는, 한번쯤 공부하면서 명칭을 기억만 해도 좋겠다는 의도입니다. (순서도 제공)

 

연습문제

예제46

선형 탐색 알고리즘

임의의 숫자를 10개를 요소로 가지는 리스트를 만들고, 키 값을 입력했을 때 인덱스를 찾아 출력하는 선형 탐색 알고리즘을 구현하라.

a = [26, 27, 39, 63, 57, 75, 11, 76, 80, 18]
key = int(input("키: "))
cnt = 0
while cnt<10:
	if key == a[cnt]:
		print(cnt, "에서 탐색 성공")
		break
	cnt = cnt+1
if cnt == 10:
	print("탐색 실패")
    
#실행결과
# 키: 11
# 6 에서 탐색 성공 (a = [26, 27, 39, 63, 57, 75, 11, 76, 80, 18] 리스트 일 때)

 

 

# 순서도 참고

# 로직 참고

더보기

01 cnt가 10보다 작은 동안 비교 작업을 반복해서 실행한다.
02 key와 a[cnt]가 같으면 “탐색 성공”을 출력하고 break에 의해 반복 구조를 빠져나온다.
03 cnt가 10과 같으면 “탐색 실패”를 출력한다.

 

# 참고 (알아만 두세요, 위처럼 직접 만들 수 있어야 합니다.)

in과 index를 이용해서 리스트에서 탐색을 할 수 있다. key in a는 리스트a에 key가 있는지 확인하는 것이고, a.index(key)는 리스트 a에서 key의 위치를 의미한다.

 

 

예제47

이진 탐색 알고리즘

임의의 숫자를 10개를 요소로 가지는 리스트를 만들고, 키 값을 입력했을 때 인덱스를 찾아 출력하는이진 탐색 알고리즘을 구현하라.

 

a = [11, 18, 26, 27, 39, 57, 63, 75, 76, 80]
key = int(input("키 : "))
low = 0
high = 9
while low<=high:
    mid = (low+high)//2
    if key == a[mid]:
        print(mid, "에서 탐색 성공")
        break
    elif key < a[mid]:
        high = mid-1
    else:
        low = mid+1
if low > high:
    print("탐색 실패")

 

# 순서도 참고

# 로직 참고

더보기

01 low 값이 high보다 작거나 같은 동안 비교 작업을 반복해서 실행한다.
02 low와 high 값의 평균을 mid에 저장한다.
03 key와 a[mid]가 같으면 “탐색 성공”을 출력하고, 반복 구조를 빠져나온다.
04 key가 a[mid]보다 작으면 high변수에 mid-1을 저장한다.
05 key가 a[mid]보다 크면 low변수에 mid+1을 저장한다.
06 low 값이 high 값보다 크면 “탐색 실패”를 출력한다.

 

 

예제48

선택 정렬 알고리즘

임의의 리스트에 요소를 원하는 만큼 무작위로 넣고, 선택 정렬 알고리즘을 구현하여 정렬하라

a = [20, 50, 30, 10, 60, 40]
for i in range(0, 5):
    m = i
    for j in range(i+1, 6):
        if a[j]<a[m]:
            m = j

    temp = a[i]
    a[i] = a[m]
    a[m] = temp
print(a)

# 실행결과
# [10, 20, 30, 40, 50, 60]  (a =[20, 50, 30, 10, 60, 40] 리스트 일 때)

 

# 순서도 참고

# 로직 참고

더보기

01 i 값이 0부터 1씩 증가하며 4가 될 때까지 반복해서 실행한다.
02 j 값이 i+1부터 1씩 증가하며 5가 될 때까지 교환 작업을 반복해서 실행한다.
03 a[j]가 a[m]보다 작으면 m에 j 값을 저장한다.
04 a[j]와 a[m]을 교환한다.

 

# 내장 함수 참고 (알아만 두세요, 함수를 배우면 내장함수를 만들 수 있어야 합니다.)

#sort 함수를 이용해서 리스트 요소를 정렬할 수 있다.

#a = [20, 50, 30, 10, 60, 40]
#a.sort()
#print(a)

 

 

예제49

버블 정렬 알고리즘

임의의 리스트에 요소를 원하는 만큼 무작위로 넣고, 버블 정렬 알고리즘을 구현하여 정렬하라

a = [20, 50, 30, 10, 60, 40]
for i in range(0, 5):
    for j in range(0, 5-i):
        if a[j]>a[j+1]:
            temp = a[j]
            a[j] = a[j+1]
            a[j+1] = temp
print(a)

# 실행결과
# [10, 20, 30, 40, 50, 60]  (a =[20, 50, 30, 10, 60, 40] 리스트 일 때)

 

# 순서도 참고

# 로직 참고

더보기

01 i 값이 0부터 1씩 증가하며 4가 될 때까지 반복해서 실행한다.
02 j 값이 0부터 1씩 증가하며 5-i-1이 될 때까지 교환을 반복해서 실행한다.
03 a[j]가 a[j+1]보다 크면 a[j]와 a[j+1]을 교환한다.

 

 

예제50

병합 정렬 알고리즘

임의의 리스트 2개에 요소를 원하는 만큼 무작위로 넣고, 병 정렬 알고리즘을 구현하여 정렬하라

a = [1, 3, 5, 7]
b = [3, 4, 8, 10]
c = []
i = 0
j = 0
while i<4 and j<4:
	if a[i]<b[j]:
		c.append(a[i])
		i = i+1
	else:
		c.append(b[j])
		j = j+1
if i==4:
	while j<4:
		c.append(b[j])
		j = j+1
	else:
		while i<4:
			c.append(a[i])
			i = i+1
print(c)

 

# 순서도 참고

# 소스코드, 로직 

더보기

# 로직 참고

01 i가 4미만이고 j가 4미만인 동안 반복해서 실행한다.
02 a[i]가 b[j]보다 작으면 c에 a[i]를 추가하고 i 값을 1증가시킨다. 그렇지 않으면 c에 b[j]를 추가하고 j 값을 1증가시킨다.
03 i가 4이면 14~16을 실행하고, 그렇지 않으면 18~20을 실행한다.
04 j가 4보다 작은 동안 c에 b[j]를 추가하고 j 값을 1증가시킨다.
05 i가 4보다 작은 동안 c에 a[i]를 추가하고 i 값을 1증가시킨다.

 

 

 

 

 

과제

과제 33

내림차순으로 정렬된 데이터 집합에 대한 이진 탐색을 하는 순서도와 파이썬 프로그램을 작성하여라.

a = [80, 76, 75, 63, 57, 39, 27, 26, 18, 11]
key = int(input("키 : "))
low = 0
high = 9
while low<=high:
    mid = (low+high)//2
    if key == a[mid]:
        print(mid, "번째 인덱스에서 탐색 성공")
        break
    elif key > a[mid]:
        high = mid-1
    else:
        low = mid+1
if low > high:
    print("탐색 실패")

 

 

 

과제 34

삽입 정렬은 다음과 같이 이미 정렬된 부분에서 자신의 위치를 찾아 삽입하며 정렬하는 방식이다. 삽입 정렬을 이용해서 정렬하는 순서도와 파이썬 프로그램을 작성하여라

a = [3, 7, 2, 8, 5, 1, 10, 9, 4, 6]

for i in range(1, 10):
	key = a[i]
	j = i-1
	while j>=0:
		if key<a[j]:
			a[j+1] = a[j]
		else:
			break
		j = j-1
	a[j+1] = key
print(a)

 

 

 

 

 

 

 

 

 

 

BasicLike

어? 나 프로그래밍 좋아하네?