
- 응답하라 1998
휴대폰 번호 앞자리에 따라 통신사가 아래와 같이 구분되던 시절이 있었습니다. 사용자로부터 input 함수를 통해 휴대전화 번호를 입력 받고, 통신사를 출력하는 프로그램을 작성해보세요. 입력받을 때 '-'기호는 넣거나 말거나 영향을 미치지 않습니다.
힌트 :
휴대전화번호 앞 3개 확인은 str도 배열(튜플)의 속성을 가지고 있다는 것을 활용합니다.번호 통신사 011 SKT 016 KT 019 LGU 010 알수없음
In
number = input("phonenumber : ")
n = number[:3]
n #str으로 들어올것
Out
phonenumber : 011-1111-1111
011
In(My Ans) #조건문 사용
if '011' in n:
print ("SKT")
elif '016' in n:
print ("KT")
elif '019' in n:
print ("LGU")
else:
print("알수없음")
Out
SKT
In(Rec Ans)
#조건문 아닌 다른 방법 (딕셔너리를 이용하는 것이 훨씬 간단한 방법)#####
num = input ('내용을 입력하세요: ')
nums = {'011': 'SKT',
'016': 'KT',
'019': 'LGU',
'010': '알수없음'}
nums.get(num[0:3])
Out
SKT
Comments ) 딕셔너리 활용 아이디어를 더 염두해둬야 할 거 같다.
python 배우기 시작하면서 가장 흥미로웠던 부분.. 메모리에 대한 이해가 필요해보였다.
shallow copy:
주소 복사, 원본은 여전히 한 개, id가 같음(같은 저장소)
deep copy:값 복사, 원본이 두 개, id주소가 각각 다름(다른 저장소)
[Example 1]
arr2D = ['Hello', 'Bye', 'Hi', ['Goodnight', 'Goodmorning', 'Goodafternoon']]
arr2Dcopy = arr2D
id(arr2Dcopy), id(arr2D)
arr2Dcopy2 = arr2Dcopy[2:5]
id(arr2Dcopy2), id(arr2Dcopy), id(arr2D)
arr2Dcopy2[0] = 'night'
arr2Dcopy2, arr2Dcopy, arr2D

얕은 복사를 실행할 시 화살표가 한 곳으로 향하는 것을 알 수 있다. 즉 같은 주소를 복사한 것이므로 호출 시 같은 곳에서 불러 온다는 것이다.
2 가지의 실행 방법
[1]
import copy #copy.py파일이 실행된다. (메모리에 올라간다)
arr2Ddeep = copy.deepcopy(arr2D)
[2]
from copy import deepcopy
arr2Ddeep = deepcopy(arr2D) # copy 안 붙여도 됨

깊은 복사를 하는 경우 같은 내용의 원본이 다른 곳에 또 생성되는 것을 확인할 수 있다. 주소값도 다르다.