728x90
1. 얕은 복사, 깊은 복사
- 얕은 복사: a를 b로 복사했을 때 a, b는 같은 메모리 주소를 사용함
- =로 복사
→ a, b 중 하나의 값을 변경해도 같은 곳을 가리키기 때문에 a, b 변수가 동일하게 바뀜
- 깊은 복사 : a를 b로 복사했을 때 a, b는 서로 다른 메모리 주소를 가리킴
- .copy() 메서드(리스트 복사) 혹은 copy 모듈의 copy.deepcopy() 함수(다차원 배열 복사)로 복사
→ a, b 변수가 독립적임
원본 = [45, 73, 66, 87, 92]
print('원본:', 원본)
얕은복사 = 원본
얕은복사[0] = 1111 # 사본, 원본 같이 바뀜
깊은복사 = 원본.copy()
깊은복사[0] = 555 # 사본만 바뀜
print(f'얕은복사: {얕은복사}', f'바뀐원본: {원본}', f'깊은복사: {깊은복사}', sep='\n')
# 결과
# 원본: [45, 73, 66, 87, 92]
# 얕은복사: [1111, 73, 66, 87, 92]
# 바뀐원본: [1111, 73, 66, 87, 92]
# 깊은복사: [555, 73, 66, 87, 92]
#--------------------------------------#
b = a
print(list(map(id, [a, b]))) # [139777503837696, 139777503837696]
b is a # True
b = a.copy()
print(list(map(id, [a, b]))) # [139777503837696, 139777113374592]
b is a # False
2. 대표값 문제
N명의 학생의 수학점수가 주어집니다.
N명의 학생들의 평균(소수 첫째자리 반올림)을 구하고,
N명의 학생 중 평균에 가장 가까운 학생은 몇 번째 학생인지 출력하는 프로그램을 작성하세요.
평균과 가장 가까운 점수가 여러개일 경우 먼저 점수가 높은 학생의 번호를 답으로 하고,
높은 점수를 가진 학생이 여러 명일 경우 그중 학생번호가 빠른 학생의 번호를 답으로 합니다.
# Ver. 1
N = int(input()) # 학생 수 : 10
scores = list(map(int, input().split())) # 점수 : 45 73 66 87 92 67 75 79 75 80
avg = round(sum(scores)/N) # 평균 구하고 소수점 한 자리에서 반올림
# print(sum(scores)/N, avg) # 74 73.9
s_copy = scores.copy() # 평균과 근접한 원소를 찾기 위해, 사본 만듦
s_copy.append(avg) # 사본 안에 평균을 넣고
s_copy.sort() # 그 다음 순서의 원소를 찾기 위해 정렬
# print(f'원본 : {scores} \n사본 : {s_copy}') # 원본과 사본 확인
for i in s_copy: # 사본 안에 원소를 하나씩 보면서
if i == avg: # 원소가 평균이라면
b = s_copy.index(i) # 사본 안에 넣은 평균의 인덱스를 구하고
c = s_copy[b+1] # 그 다음 원소를 찾음
# print(f'평균 : {i}, 사본 안에 평균 인덱스 : {b}, 사본 안에 평균 다음 원소 : {c}')
for j in scores: # 평균에 근접한 값을 찾았으므로, 원본 안에 원소를 하나씩 보면서
if j == c: # 원소가 근접한 값이라면
d = scores.index(j) + 1 # 원본에서 몇 번째 원소인지 구해서
print(avg, d) # 평균과 함께 출력함 : 74 7
#-------------------------------------------#
# Ver. 2
N = int(input())
scores = list(map(int, input().split()))
avg = round(sum(scores)/N)
# min = 2147000000
min = float('inf')
for idx, x in enumerate(scores):
tmp = abs(x - avg)
if tmp < min:
min = tmp
s = x
a = idx + 1
elif tmp == min:
if x > s:
s = x
a = idx + 1
print(avg, a)
3. 절대값 구하기
abs() 함수
728x90
'개인 공부' 카테고리의 다른 글
7/22 금_코딩 테스트 연습(Python), 차원의 저주, Robust Scaler (0) | 2022.07.23 |
---|---|
7/19 화_RPA, 코딩 테스트 연습(Python) (0) | 2022.07.20 |
7/16 토_코딩 테스트 연습(Python) (0) | 2022.07.16 |
6/22 수_리눅스 명령어 모음 (0) | 2022.06.22 |
6/21 화_PyTorch Hub, YOLOv5 Inference Settings, Non-Maximum Suppression(NMS) (0) | 2022.06.21 |