개요
- Variable & List
- Function and Console I/O
- Conditionals & Loop
- Str & Advanced_function
- CMD 실행 정리
- 피어세션
1. Variable & List
- 변수와 메모리
- 리스트
1.1 변수와 메모리
변수란?
- 데이터(값)을 저장하기 위한 메모리 공간의 프로그래밍상 이름
변수는 어디에 저장되는가?
- 변수는 메모리 주소를 가지고 있고, 변수에 들어가는 값을 메모리 주소에 할당된다.
<폰 노이만 아키텍처>
프로그램을 실행할 경우 그 정보를 먼저 메모리에 저장시키고
CPU가 순차적으로 그 정보를 해석하고 계산하여 사용자에게 결과값을 전달한다.
변수와 메모리
- 변수 선언되는 순간 메모리 특정영역에 물리적인 공간이 할당된다.
A = 8
파이썬 > OS에 A라는 공간을 Memory에 잡아달라 요청 > Memory에 A공간 생성 > A라는 공간에 '8' 저장
예약어 : ex. for, if, else 등
<기본자료형>
- data type : 파이썬이 처리할 수 있는 데이터 유형
- data type에 따라 메모리 용량 차지하는 정도가 다르다.
<Dynamic Typing>
코드 실행시점에 데이터의 Type을 결정하는 방법
- 파이썬은 다이나믹 타이핑을 지원하는 언어
- 컴파일러 언어(java)는 변수 선언 필요. 대신 인터프리터 언어인 파이썬보다 실행속도가 빠르다.
<연산자와 피연산자>
- 연산자(Operator) : + , - , * , / , **(제곱승) , %(나머지) , +=(증가) , -=(감소)
- 피연산자(Operand) :
<데이터 형태>
a = 10 --> int
float(a) --> float 형으로 추출된다.
print(a) --> 하지만 a에 저장한 것이 아니므로, a는 여전히 int형
a = float(10)
b = 3
print(a/b) --> 3.333 (실수를 정수로 나누면, 실수형으로 나온다)
a = '76.3'
b = float(a)
print(a+b) --> Error남. 문자형+실수형 연산 불가능
a = float(a) --> 형변환해줘서 연산해줘야한다.
a = '76.3' --> 문자형
b = a --> 문자형
print(a+b) --> 76.376.3 (문자열 concat)
a = '76.3'
type(a) --> <class 'str'> (변수 타입 확인 함수)
c = 38.8
print(c) --> 38.8
c --> 38.7999999
# 컴퓨터의 모든 값은 이진수로 변환되어 메모리에 저장되기 때문
# 파이썬 3.xx에서는 정상적으로 나온다.
1.2 List 리스트
- List 또는 Array(배열)
- 시퀀스 자료형, 여러 데이터들의 집합
<List 특징>
- 인덱싱 indexing : List에 있는 값들은 각자 주소(offset)를 가진다.
- 슬라이싱 slicing : List 값들을 잘라서 사용 ex) cities[0:6] - 리스트 내 0~5번째 원소를 가져옴
- 리스트 연산 : concatenation, is_in, 연산 함수(+,* 등)
- 추가 삭제 : append, extend, insert, remove, del 등
- 메모리 저장 방식 : 파이썬은 해당 리스트 변수에는 리스트 주소값이 저장된다.
- 패킹과 언패킹 : 패킹[한 변수에 여러 개의 데이터 넣는 것] / 언패킹[한 변수의 데이터를 각각의 변수로 반환]
- 이차원 리스트(이차원 배열) : List 안에 List를 만들어 행렬(Matrix) 생성
2. Function and Console I/O
- Function
- Console I/O
2.1 Function
- 코드를 논리적인 단위로 분리
- 캡슐화 : 인터페이스만 알면 타인의 코드 사용 가능
def 함수 이름 (parameter) :
수행문
return 반환값
- parameter : 함수의 입력 값 인터페이스
- argument : 실제 Parameter에 대입된 값
- parameter 유무, 반환 값(return value) 유무에 따라 함수의 형태가 다르다.
def f(x) :
print(x+10)
f(10) --> 20
c = f(10) --> 20 #함수에 의해 print된 것뿐
print(c) --> none
# f(x)함수가 return값이 저장되는 것이 아니기 때문에 c에는 저장된 값이 없다.
Sorted(리스트명) --> 리스트 자체 변화 영향X
리스트명.sort() --> 리스트 자체 변화 영향O
2.2 Console I/O
어떤 프로그램과 데이터를 주고 받을 것인가
Terminal = CMD
CLI(Command Line Interface) : GUI와 달리 Text를 사용하여 컴퓨터에 명령 입력하는 인터페이스 체계
somebody = input() #str형태로 입력받음
nums = int(input()) #int형태로 입력 변환하여 저장
nums = float(input())
<print문 formating>
print("%d %d %d" %(1,2,3)) --> %d에 각각 대입됨 (%s : 문자형 , %f : 실수형)
print("{} {} {}".format("a","b","c")) --> format함수로 대입 가능
print(f"value is {value}) --> 앞에 f를 작성하여 fstring 양식 활용
%5d --> 5자리 생성 대입(나머지 공백처리)
%8.2f --> 8자리 생성 소수점 2자리까지 추출(나머지 공백처리)
print("My name is{0} and {1} years old".format(name,age)
{0} --> name
{1} --> age 대입
print("My name is{0} and {1:.3f} years old".format(name,age)
{1:.3f} --> age 대입하는데 실수형으로 소수점 3째자리까지 표현
{0:>10s} --> 오른쪽 정렬
{0:<10s} --> 왼쪽 정렬 (default)
3. CMD 실행 정리
conda activate base --> base라인으로 작성
python console_example.py --> 코드 실행
python -m unittest *.py --> * 에 실행 파이썬코드문서 넣어 unittest 실행
python --> 파이썬 개발환경 실행
cd.. --> 이전 디렉토리로
git add *.py
git commit -m "코멘트" --> 코멘트 : Update my code 주로
git push
git pull --> push 실패하면 pull하고 다시 push
4. 피어세션
- 과제 풀이 방법을 공유(어려움 극복)
- Leetcode 문제 풀이 공유
<Leetcode>
Solution
- Counter를 활용하여 딕셔너리 형태로 개수 확인 후, 매칭하여 해답구함
from collections import Counter
class Solution:
def maxOperations(self, nums: List[int], k: int) -> int:
answer = 0
num_cnt = Counter(nums)
num_list = sorted(Counter(nums))
for i in num_list :
j = k - i
if i > j :
break
elif i == j :
answer += num_cnt[i]//2
elif j in num_list:
answer += min(num_cnt[i],num_cnt[j])
return answer
- typing을 활용한 풀이(이상건님_풀이)
from typing import List
class Solution:
def maxOperations(self, nums: List[int], k: int) -> int:
nums.sort()
# print(nums, k)
lp = 0
rp = len(nums)-1
count = 0
while lp < rp:
tsum = nums[lp] + nums[rp]
if tsum > k:
rp -= 1
elif tsum < k:
lp += 1
else:
count += 1
rp -= 1
lp += 1
return count
print(Solution.maxOperations(Solution,[1,2,3,4],5),2)
print(Solution.maxOperations(Solution,[3,1,3,4,3],6),1)
- 시간이 조금 걸리지만, 통과된 코드
- Typing.List 란 것을 처음 배웠다.
> 서로 다른 풀이법을 공유하면서, 새로운 것을 배우는 좋은 방법인 것 같다.
'Boostcamp > U1' 카테고리의 다른 글
[1-4] python 기초 문법 (3) (0) | 2022.05.25 |
---|---|
[1-3] python 기초 문법 (2) (0) | 2022.05.25 |
[1-1] python 개발환경 (0) | 2021.11.19 |