Sad Puppy 3 [코딩테스트] No.2 코딩 테스트 필수 문법(파이썬)-4장 :: 개발자 아지트

파이썬에서는 기본적으로 제공하는 데이터 타입들이 있다.

 

집을 사면 딸려오는 가구(사실 그 딸려오는 가구 값도 포함되는건 맞지만)처럼 파이썬에서는 기본 데이터 타입과,

컬렉션 데이터 타입을 제공한다. 

 

04-1 빌트인 데이터 타입

 

기본 데이터 타입

 

기본 데이터 타입에는 정수형, 부동소수형, 문자열 타입이 있다.

 

정수형

: 양, 음의 정수와 0을 포함한다.

사칙연산 뿐만 아니라 그 외의 연산도 가능하다. 

예를들어, **을 통한 지수 연산, //을 통한 나눗셈에서 몫만 반환하는 연산 등

 

아래는 정수형 데이터 정의 및 활용 방법이다. 

 

# 정수형 변수 선언

a = 4
b = 3

# 정수형 산술 연산

print(a + b) # 더하기 1
print(a - b) # 빼기 12
print(a * b) # 곱하기 45
print(a / b) # 나누기(소수점 포함) 1.3...
print(a // b) # 나누기(소수점 제외) 1
print(a % b) # 모듈러 연산(나머지 값 출력) 1
print(-a) # 부호 바꿈 -4
print(abs(-a)) # 절대값 4
print(a**b) # a의 b승 64

# 정수형 비교 연산

print(a == b) # 같은 값인지 비교 False
print(a != b) # 같은 값이 아닌지 비교 True
print(a > b)  # 왼쪽값이 더 큰지 비교 True
print(a < b)  # 오른쪽 값이 더 큰지 비교 False
print(a >= b) # 왼쪽값이 더 크거나 같은지 비교 True
print(a <= b) # 오른쪽값이 더 크거나 같은지 비교 False

# 정수형 비트 연산

a = 13
b = 4

print(a & b) # AND 4
print(a | b) # OR 13
print(a ^ b) # XOR 9
print(~a) # NOT -14
print(a << 2) # 왼쪽 시프트 (a에 2^2를 곱한 것과 동일) 52
print(a >> 1) # 오른쪽 시프트 (a에 2^1로 나눈 것과 동일) 6 

#정수형 논리 연산

print(a and b) # 논리 연산 AND 4
print(a or b) # 논리 연산 OR 13
print(not a) # 논리 연산 NOT / False

 

*~a가 14인 이유

a는 2진수로 표현하면 0000 1101 이다. ~(not)을 하면 0000 1101이 반전돼서 1111 0010이 된다. 

 

맨 왼쪽의 값이 0이면 양수, 1이면 음수를 나타내는 것이다. 

1111 0010은 음수의 값이고, 컴퓨터에서 음수는 2의 보수로 표현된다. 

 

2의 보수를 읽기 위해서는 값을 한번 반전해주고 => 0000 1101 

그대로 1을 더해준다. => 0000 1110 이는 10진수로 14이다.

 

하지만 이 값은 음수이므로 -14로 표현할 수 있는 것이다. 

 

*논리 연산 AND 연산자

파이썬에서 논리 연산 AND는 두 피연산자가 모두 참이면 마지막 값을 반환한다. 

만약 첫 번째 피연산자가 거짓이거나 NULL이면, 첫 번째 피연산자를 반환한다. 

 

 

부동소수형

부동소수형에서는 사칙 연산, 정수형 나누기, 모듈러, 제곱 연산, 논리 연산을 할 수 있다. 

 

부동소수형에서 눈여겨 봐야할 곳은 10 % 3.2의 값이 0.4가 나와야 하지만 파이썬에서는 

0.39999999999999947이 나온다. 

그 이유는 파이썬에서는 부동소수형 데이터를 이진법으로 표현하기 때문에 발생하는 거고, 표현 과정에서 오차가 발생한다.

이를 엡실론이라고 한다. 

 

따라서 부동소수형 데이터를 활용한 문제에서는 오차 허용 범위의 언급을 확인하고, 주의 해야한다. 

 

 


04-2 컬렉션 데이터 타입

컬렉션 데이터 타입은 여러 값을 담는 데이터 타입을 말한다. 그 유형으로 리스트, 튜플, 딕셔너리, 셋, 문자열 등이 있다.

또한 컬렉션 데이터 타입은 두가지로 나눌 수 있는데, 이는 데이터의 수정 가능 여부에 따라 변경할 수 있는 객체(mutable object)와 변경할 수 없는 객체(immutable object)로 나눌 수 있다. 

 

변경할 수 있는 객체(mutable object)

: 객체 생성 후 객체를 수정할 수 있다. 리스트, 딕셔너리, 셋이 이 유형에 해당한다. 

 

변경할 수 없는 객체(immutable object)

: 객체 생성 후 객체를 수정할 수 없다. 문자열, 튜플이 이 유형에 해당한다. 

(정수나 부동소수점은 컬렉션 데이터 타입은 아니지만 이뮤터블 객체에 속한다)

 

<리스트>

: 리스트는 뮤터블 객체이고, 순서가 있는 자료형이다. 리스트는 인덱스를 활용해 특정 위치의 원소에 접근할 수 있다. 

 

기본적인 리스트 사용법은 다음과 같다. 

# 리스트 선언
tmp_list = [1, 2, 3, 4]
tmp_list2 = [5, 6] + [7, 8, 9]
tmp_list3 = list(tmp_list)
print(tmp_list) # [1, 2, 3, 4]
print(tmp_list2) # [5, 6, 7, 8, 9]
print(tmp_list3) # [1, 2, 3, 4]

# 리스트 인덱싱
tmp_list.append(5)
print(tmp_list) # [1, 2, 3, 4, 5]

# 인덱싱으로 값 삭제
del tmp_list[0]
print(tmp_list) # [2, 3, 4, 5]

 

 

리스트의 활용방법 중에 리스트 슬라이싱이라고 있다. 

슬라이싱은 시퀀스 자료형의 범위를 지정해 값을 복사하여 가져오는 방식을 말한다. 

 

리스트 슬라이싱 활용법은 다음과 같다. 

print(tmp_list[0:2]) # [2, 3]
print(tmp_list[1:]) # [3, 4, 5]
print(tmp_list[2:3]) # [4]
print(tmp_list[-2:-1]) # [4]

 

 

<딕셔너리>

: 딕셔너리는 뮤터블 객체이고, 키와 값 쌍을 저장하는 해시테이블로 구현돼 있다. 

키를 사용하여 값을 검색하는 자료형이다. 

 

기본적인 딕셔너리 사용법은 다음과 같다. 

# 딕셔너리 초기화 
dic = { }

# 딕셔너리 삽입과 출력
dic["yellow"] = 1
dic["green"] = 3
dic["blue"] = 5

print(dic) #{'yellow': 1, 'green': 3, 'blue': 5}

 

딕셔너리 검색 활용법은 다음과 같다.

키에 해당하는 문자열인지 확인하고, 키의 값이 딕셔너리에 존재하면 키-값을 출력한다. 

 

key = "yellow"
if key in dic:
    value = dic[key]
    print(f"{key}: {value}")
else:
    print(f"{key}는 딕셔너리에 존재하지 않습니다. ")

 

딕셔너리 수정 방법은 다음과 같다. 

dic["green"] = 5
print(dic) #{'yellow': 1, 'green': 5, 'blue': 5}

 

 

딕셔너리 삭제 방법은 다음과 같다.

del dic["green"]
print(dic) #{'yellow': 1, 'blue': 5}

 

 

 

<튜플>

: 튜플은 이뮤터블 객체이다. 한 번 생성하면 삽입하거나 삭제할 수 없다. 

 

기본적인 튜플 사용법은 다음과 같다. 

 

# 튜플 초기화 
tup = (1, 2, 3)

 

튜플은 인덱싱과 슬라이싱을 활용할 수 있고, 리스트와 활용법이 같다.

 

<문자열>

: 문자열은 문자의 집합 형태이며, 이뮤터블 객체이다. 

 

기본적인 문자열 사용법은 다음과 같다.

 

# 문자열 초기화 

string = "Hi" # 큰 따옴표 사용
string2 = 'Hello'# 작은 따옴표 사용

# 문자열 추가, 삭제 
string3 = "A-"
string3 += "yo" # 이때, string3은 기존의 문자열의 메모리 주소와의 연결은 끊고, 문자열을 새로 만들고 해당 문자열이 담길 메모리 주소를 새로 할당한다. 
print(string3) # "A-yo"

# 문자열 수정 
string4 = "Ha"
string4 = string4.replace("a", "o")
print(string4) # "Ho"

 


 

04-3 함수

 

파이썬에서의 함수 사용법은 다음과 같다.

 

def add(num1, num2):
    result = num1 + num2
    return result 

# 함수 호출

ret = add(5, 10)
print(ret)

 

 

함수를 더 간단하게 사용하기 위한 방법으로 파이썬에서는 람다식을 사용할 수 있다. 

또한 람다식은 익명 함수를 만드는데 사용한다. 

익명 함수는 이름 없는 함수이고, 코드에서 일시적으로 실행할 목적으로 사용하거나, 다른 함수의 인수로 사용할 수 있다. 

 

람다식의 사용법은 다음과 같다. 

 

# 람다식 정의

lambda x, y : x + y # x와 y를 받아서 더한 값을 반환하는 람다식

# 람다식 사용 유형 1

add = lambda x, y: x + y
print(add(5, 4)) # 9

# 람다식 사용 유형 2

num = [1, 2, 3, 4, 5]
squares = list(map(lambda x: x**2, num))
print(squares) # [1, 4, 9, 16, 25]

 

 

 


04-4 코딩 테스트 코드 구현 노하우

 

1. 조기 반환

: 코드 실행 과정이 끝나기 전에 반환하는 기법

 

2. 보호 구문

: 본격적인 로직 진행 전 예외 처리 코드를 추가하는 기법 

 

3. 합성 함수

: 2개 이상의 함수를 활용해 함수를 추가로 만드는 기법

보통 합성 함수로 람다식을 활용한다. 

 

 

 

 

* 정리된 개념 출처: 코딩 테스트 합격자 되기 - 박경록(파이썬 편)

 

+ Recent posts