취업준비

[Do it! 자료구조, 알고리즘 Python] 2장. 기본 자료구조와 배열 본문

취업준비/코딩테스트

[Do it! 자료구조, 알고리즘 Python] 2장. 기본 자료구조와 배열

AI&U_99 2022. 3. 14. 13:36
# 2-1.학생5명의 시험 점수를 입력받아 합계와 평균 출력하기
>>> print('학생 그룹 점수의 합계와 평균을 구한다.')
학생 그룹 점수의 합계와 평균을 구한다.
>>> score1=int(input('1번 학생의 점수 입력해라:'))
1번 학생의 점수 입력해라:42
>>> score2 = int(input('2번 학생의 점수 입력해라:'))
2번 학생의 점수 입력해라:75
>>> score3 = int(input('3번 학생의 점수 입력해라:'))
3번 학생의 점수 입력해라:85
>>> 
>>> score4 = int(input('4번 학생 점수 입력:'))
4번 학생 점수 입력:98
>>> score5=int(input('5번 학생 점수 입력:'))
5번 학생 점수 입력:12
>>> total=0
>>> total+=score1
>>> tottal+=score2
Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    tottal+=score2
NameError: name 'tottal' is not defined
>>> total+=score3
>>> total+=score2
>>> total+=score4
>>> total+=score5
>>> print(f'합계는 {total}점이다.')
합계는 312점이다.
>>> print(f'평균은{total/5}점이다')
평균은62.4점이다
# 시퀀스 원소의 최댓값 출력
>>> from typing import Any, Sequence
>>> def max_of(a:Sequence) -> Any:
	#시퀀스형 a원소의 최대값 반환
	maximum = a[0]
	for i in range(1,len(a)):
		if a[i] > maximum:
			maximum = a[i]
	return maximum

>>> if __name__ == '__main__':
	print('배열의 최댓값 구한다.')
	num=int(input('원소 수 입력 : '))
	x=[None]*num #원소 수가 num인 리스트 생성

	
배열의 최댓값 구한다.
원소 수 입력 : 9
>>> for i in range(num):
	x[i]=int(input(f'x[{i}]값을 입력해라:'))

	
x[0]값을 입력해라:72
x[1]값을 입력해라:16
x[2]값을 입력해라:99
x[3]값을 입력해라:425
x[4]값을 입력해라:3
x[5]값을 입력해라:15
x[6]값을 입력해라:26
x[7]값을 입력해라:45
x[8]값을 입력해라:888
>>> print(f'최대값은 {max_of(x)}이다')
최대값은 888이다
# 뮤터블 시퀀스 원소를 역순으로 정렬
>>> from typing import Any, MutableSequence
>>> def reverse_array(a:MutableSequence)->None:
	#뮤터블시퀀스a의 원소를 역순으로 정렬
	n=len(a)
	for i in range(n//2):
		a[i], a[n-i-1] = a[n-i-1],a[i]
        
>>> if __name__ == '__main__':
	print('배열 원소를 역순으로 정렬한다.')
	nx=int(input('원소 수 입력:'))
	x=[None]*nx #원소수가 nx인 리스트 생성
	for i in range(nx):
		x[i]=int(input(f'x[{i}]값을 입력해라:'))
	reverse_array(x) #x를 역순으로 정렬
	print('배열 원소를 역순으로 정렬했다.')
	for i in range(nx):
		print(f'x[{i}]={x[i]}')

		
배열 원소를 역순으로 정렬한다.
원소 수 입력:18
x[0]값을 입력해라:12
x[1]값을 입력해라:88
x[2]값을 입력해라:46
x[3]값을 입력해라:99
x[4]값을 입력해라:108
x[5]값을 입력해라:60
x[6]값을 입력해라:80
x[7]값을 입력해라:111
x[8]값을 입력해라:4236
x[9]값을 입력해라:645
x[10]값을 입력해라:88
x[11]값을 입력해라:12
x[12]값을 입력해라:1
x[13]값을 입력해라:0
x[14]값을 입력해라:3
x[15]값을 입력해라:8
x[16]값을 입력해라:74
x[17]값을 입력해라:65
배열 원소를 역순으로 정렬했다.
x[0]=65
x[1]=74
x[2]=8
x[3]=3
x[4]=0
x[5]=1
x[6]=12
x[7]=88
x[8]=645
x[9]=4236
x[10]=111
x[11]=80
x[12]=60
x[13]=108
x[14]=99
x[15]=46
x[16]=88
x[17]=12
# 1부터 n까지 정수의 합 구하기
>>> def sum_1ton(n):
	s=0
	while n>0:
		s+=n
		n-=1
	return s

>>> x=int(input('x의 값 입력:'))
x의 값 입력:26
>>> print(f'1부터{x}까지 정수의 합은 {sum_1ton(x)}이다')
1부터26까지 정수의 합은 351이다
# 1000이하의 소수 나열하기
>>> counter = 0 #나눗셈 회수 카운트
>>> ptr = 0 #이미 찾은 소수의 개수
>>> prime=[None]*500 #소수를 저장하는 배열
>>>
>>> prime[ptr]=2 #2는 소수이므로 초기값으로 지정
>>> ptr +=1
>>> 
>>> for n in range(3,1001,2): #홀수만을 대상으로 설정
	for i in range(1,ptr): #이미 찾은 소수로 나눔
	    counter +=1
	    if n % prime[i] == 0: #나누어 떨어지면 소수가 아님
	        break #반복 중단
	else:
		prime[ptr] = n #소수로 배열에 등록
		ptr+=1

		
>>> for i in range(ptr): #ptr의 소수를 출력
	print(prime[i])

	
2
3
5
7
11
13
17
19
(...생략...)
>>> print(f'나눗셈을 실행한 횟수:{counter}')
나눗셈을 실행한 횟수:14622
# 1000이하의 소수 나열하기(알고리즘 개선2)
>>> counter = 0 #곱셈과 나눗셈을 합한 횟수
>>> ptr = 0 #이미 찾은 소수의 갯수
>>> prime = [None]*500 #소수를 저장하는 배열
>>> 
>>> prime[ptr] = 2 #2는 소수
>>> ptr +=1
>>> 
>>> prime[ptr] = 3 #3은 소수
>>> ptr += 1
>>> 
>>> for n in range(5,1001,2): #홀수만을 대상으로 설정
	i = 1
	while prime[i]*prime[i] <= n:
		counter += 2
		if n % prime[i] == 0: #나누어 떨어지므로 소수가 아님
		    break #반복 중단
		i += 1
	else: #끝까지 나누어 떨어지지 않았다면
		prime[ptr] = n #소수로 배열에 등록
		ptr += 1
		counter += 1

		
>>> for i in range(ptr): #ptr의 소수를 출력
	print(prime[i])

	
2
3
5
7
11
13
17
(...생략...)
983
991
997

>>> print(f'곱셈과 나눗셈 실행한 횟수 : {counter}')
곱셈과 나눗셈 실행한 횟수 : 3774
# 얕은 복사
>>> x=[[1,2,3],[4,5,6]]
>>> y=x.copy() #x를 y로 얕은 복사
>>> x[0][1]=9
>>> x
[[1, 9, 3], [4, 5, 6]]
>>> y
[[1, 9, 3], [4, 5, 6]]


# 깊은 복사
>>> import copy #deepcopy를 사용하기 위한 copy 모듈 임포트
>>> x = [[1,2,3],[4,5,6]]
>>> y=copy.deepcopy(x) #x를 y로 깊은 복사
>>> x[0][1] = 9
>>> x
[[1, 9, 3], [4, 5, 6]] # 대입된 9가 출력됨
>>> y
[[1, 2, 3], [4, 5, 6]] # y배열은 영향을 안받음