자료형

수 자료형

실수형

Round 함수

컴퓨터 시스템은 실수를 처리할 때 부동 소수점 방식을 사용하기 때문에 실수를 정확히 표현하지 못한다. 흔히 코딩 테스트에서는 소수점 다섯 번째 자리에서 반올림한 결과가 같으면 정답으로 인정하는 식으로 처리한다.

<416.py>

a = 0.3 + 0.6
print(round(a,4)) # a를 소수점 다섯째 자리에서 반올림

if round(a,4) == 0.9:
    print(True)
else:
    print(False)
0.9
True

수 자료형의 연산

거듭 제곱 연산자

<416.py>

a = 5
b = 3
print(a**b)
125

리스트 자료형

리스트 만들기

<420.py>

# 빈 리스트 선언 방법_1
a=list()
print(a)

# 빈 리스트 선언 방법_2
a=[]
print(a)
[]
[]

1차원 리스트 초기화

<420.py>

# 크기가 N인 1차원 리스트 초기화
n = 10
a = [0] * n
print(a)
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

리스트 컴프리헨션

리스트 컴프리헨션은 2차원 리스트를 초기화할 때 매우 효과적

<420.py>

# 2차원 리스트를 초기화할 때
n = 3
m = 4
array = [[0] * m for _ in range(n)]
print(array)
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

특정 크기의 2차원 리스트를 초기화할 때는 반드시 리스트 컴프리헨션을 이용해야 한다. 아니면 의도하지 않은 결과가 나올 수 있다.
<420.py>

n = 3
m = 4
array = [[0]*m] * n
print(array)

array[1][1] = 5
print(array)
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
[[0, 5, 0, 0], [0, 5, 0, 0], [0, 5, 0, 0]]

insert() 함수와 remove() 함수의 시간 복잡도는 O(N)이다. 이 함수들을 남발하면 '시간 초과'로 테스트를 통과하지 못할 수도 있다.

리스트 관련 기타 메서드

<424.py>

a = [1,4,3]
print("기본 리스트:", a)

# 리스트에 원소 삽입
a.append(2)
print("삽입:",a)

# 오름차순 정렬
a.sort()
print("오름차순 정렬:", a)

# 내림차순 정렬
a.sort(reverse=True)
print("내림차순 정렬:", a)

# 리스트 원소 뒤집기
a.reverse()
print("원소 뒤집기:", a)

# 특정 인덱스에 데이터 추가
a.insert(2,3)
print("인덱스 2에 3추가:", a)

# 특정 값인 데이터 개수 세기
print("값이 3인 데이터 개수:", a.count(3))

# 특정 값 데이터 삭제, 특정 값이 여러개여도 앞에 하나만 삭제됨
a.remove(1)
print("값이 1인 데이터 삭제:", a)
기본 리스트: [1, 4, 3]
삽입: [1, 4, 3, 2]
오름차순 정렬: [1, 2, 3, 4]
내림차순 정렬: [4, 3, 2, 1]
원소 뒤집기: [1, 2, 3, 4]
인덱스 2에 3추가: [1, 2, 3, 3, 4]
값이 3인 데이터 개수: 2
값이 1인 데이터 삭제: [2, 3, 3, 4]

특정한 값의 원소를 모두 제거하기 위한 방법

remove()는 특정한 값이 여러개여도 맨 앞의 값만 삭제하기 때문에 특정한 값의 원소를 모두 제거하려면 아래의 방법을 사용해야 한다.
<424.py>

# 특정한 값의 원소를 모두 제거, 3과 5를 모두 제거하고 싶을 때
a = [1,2,3,4,5,5,5]
remove_set = {3,5} # 삭제하고 싶은 값들을 set에 넣기

result = [i for i in a if i not in remove_set]
print(result) 
[1, 2, 4]

문자열 자료형

튜플 자료형

튜플은 한 번 선언된 값을 변경할 수 없다.
소괄호(())를 이용한다.
튜플 자료형은 그래프 알고리즘을 구현할 때 자주 사용된다. 예를 들어 다익스트라 최단 경로 알고리즘처럼 최단 경로를 찾아주는 알고리즘의 내부에서는 우선순위 큐를 이용하는데 해당 알고리즘에서 우선순위 큐에 한 번 들어간 값은 변경되지 않는다. 그래서 그 우선순위 큐에 들어가는 데이터를 튜플로 구성하여 소스코드를 작성한다. 이렇게 알고리즘을 구현하는 과정에서 일부러 튜플을 이용하게 되면 혹여나 자신이 알고리즘을 잘못 작성함으로써 변경하면 안 되는 값이 변경되고 있지는 않은지 체크할 수 있다. 또한 튜플은 리스트에 비해 상대적으로 공간 효율적이고, 일반적으로 각 원소의 성질이 서로 다를 때 주로 사용한다.

사전 자료형

사전 자료형 소개

<426.py>

data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'
data['코코넛'] = 'Coconut'

print(data)
{'사과': 'Apple', '바나나': 'Banana', '코코넛': 'Coconut'}

원소 in 사전
사전 자료형에 특정한 원소가 있는지 검사할 때
<426.py>

data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'
data['코코넛'] = 'Coconut'


if '사과' in data:
    print("'사과'를 키로 가지는 데이터가 존재합니다")
'사과'를 키로 가지는 데이터가 존재합니다

사전 자료형 관련 함수
키와 값을 별도로 뽑아내기 위한 함수
<426.py>

data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'
data['코코넛'] = 'Coconut'
print(data)

list1 = data.keys() # 키 데이터만 담은 리스트
list2 = data.values() # 값 데이터만 담은 리스트
print(list1)
print(list2)

for i in list1:
    print(i,data[i])
{'사과': 'Apple', '바나나': 'Banana', '코코넛': 'Coconut'}
dict_keys(['사과', '바나나', '코코넛'])
dict_values(['Apple', 'Banana', 'Coconut'])
사과 Apple
바나나 Banana
코코넛 Coconut

집합 자료형

집합 자료형 소개

리스트나 튜플은 순서가 있기 때문에 인덱싱을 사용할 수 있지만 사전 자료형과 집합 자료형은 순서가 없기 때문에 인덱싱으로 값을 얻을 수 없다.
집합 자료형에서는 키가 존재하지 않고, 값 데이터만을 담게 된다. 특정 원소가 존재하는지를 검사하는 연산의 시간 복잡도는 사전 자료형과 마찬가지로 O(1)이다.
-집합 자료형 특징

  • 중복을 허용하지 않는다.
  • 순서가 없다.

'특정한 데이터가 이미 등장한 적이 있는지의 여부'를 체크할 때 매우 효과적이다. 집합 자료형을 초기화할 때는 set()함수를 이용하거나, 중괄호 안에 각 원소를 콤마를 기준으로 구분해서 넣으면 된다.
<430.py>

# 집합 자료형 초기화 방법 1
data = set([5,0,1,2,3,4,4,4,5,1])
print(data)

# 집합 자료형 초기화 방법 2
data = {1,1,2,3,4,4,5}
print(data)
{0, 1, 2, 3, 4, 5}
{1, 2, 3, 4, 5}

집합 자료형의 연산

<430.py>

a = set([1,2,3,4,5])
b = set([3,4,5,6,7])

print(a|b)
print(a&b)
print(a-b)
{1, 2, 3, 4, 5, 6, 7}
{3, 4, 5}
{1, 2}

집합 자료형 관련 함수

add( ), update( ), remove( )
add,remove 함수는 모두 시간 복잡도가 O(1)이다.
<430.py>

data = set([1,2,3])
print(data)

data.add(4)
print(data)

data.update([5,6]) # 여러 개의 값을 한꺼번에 추가
print(data)

data.remove(3)
print(data)
{1, 2, 3}
{1, 2, 3, 4}
{1, 2, 3, 4, 5, 6}
{1, 2, 4, 5, 6}

* 추가

✔ 문자열 n줄을 입력받아 리스트에 저장할 때

#문자열 n줄을 입력받아 리스트에 저장할 때
import sys

n = int(sys.stdin.readline())
data = [ sys.stdin.readline().rstrip() for i in range(n)] 
print(data)
3
안녕?
하루만 더 있으면
금요일!
['안녕?', '하루만 더 있으면', '금요일!']
profile
자유롭게 쓴 나의 자유로운 Development voyage⛵

0개의 댓글