[이코테] 2. 파이썬 문법 부수기 - (2). 문자열, 튜플, 사전, 집합 자료형
Algorithm/이코테2021

[이코테] 2. 파이썬 문법 부수기 - (2). 문자열, 튜플, 사전, 집합 자료형

반응형

 

 

문자열 자료형

큰 따옴표(") 작은 따옴표(')로 초기화 할 수 있음.

작은 따옴표를 출력해야한다면 큰 따옴표로 감싸고,

큰 따옴표로 출력해야 한다면 작은 다옴표로 감싸면 된다.

백슬래쉬(\)를 이용해도 되고..

print('이 블로그 주인장은? "테크 조랭이떡"')
print("이 블로그 주인장은? '테크 조랭이떡'")
print('이 블로그 주인장은? \'테크 조랭이떡\'')

''' output
이 블로그 주인장은? "테크 조랭이떡"
이 블로그 주인장은? '테크 조랭이떡'
이 블로그 주인장은? '테크 조랭이떡'
'''

 

문자열 연산

덧셈, 곱셈을 사용할 수 있음.

  • 문자열 변수에 덧셈(+)을 이용하면 문자열이 더해져서 연결(Concatenate)됨.
  • 문자열 변수에 양의 정수를 곱(*)하는 경우, 문자열이 그 값만큼 여러 번 더해짐.
  • 문자열 또한, 인덱싱과 슬라이싱 사용 가능.
    • 단. 문자열은 특정 인덱스 값 변경 X. (Immutable)
a = "Hello"
b = "World"
print(a + " " + b)

a = "String"
print(a * 3)

a = "ABCDEF"
print(a[2:4])

''' output
Hello World
StringStringString
CD
'''

 

튜플 자료형

리스트와 유사하지만, 문법적 차이가 있음.

  • 튜플은 한 번 선언된 값 변경할 수 없음.(=문자열 처럼 특정 인덱스 값 변경 X)
  • 리스트 대괄호([])를 사용하지만, 튜플 소괄호(())를 사용함.

이러한 제약들이 있기 때문에 상대적으로 '공간 효율적'이다고 표현하기도 함.

 

튜플 사용 예시

a = (1, 2, 3, 4, 5, 6, 7, 8, 9)

#네 번째 원소만 출력
print(a[3])

#두 번째 원소부터 네 번째 원소까지 출력
print(a[1:4])

#특정 인덱스 값 바꾸는 예제(오류 출력됨)
print(a)
a[2] = 7

'''output
4
(2, 3, 4)
(1, 2, 3, 4, 5, 6, 7, 8, 9)
Traceback (most recent call last):
  File "main.py", line 11, in <module>
    a[2] = 7
TypeError: 'tuple' object does not support item assignment
(=튜플은 변경 불가 객체라서 원소 할당 연산은 지원하지 않는다.)
'''

 

튜플을 사용하면 좋은 경우

알고리즘 및 코딩 테스트 환경에서 어떤 경우에 사용하면 좋을까?

  • 서로 다른 성질의 데이터를 묶어서 관리해야 할 때
    • 최단 경로 알고리즘에서는 (비용, 노드 번호)의 형태로 튜플 자료형을 자주 사용함.
  • 데이터의 나열을 해싱(Hashing)의 키 값으로 사용해야 할 때
    • 튜플은 변경이 불가능 하므로 리스트와 다르게 키 값으로 사용될 수 있다.
  • 리스트보다 메모리를 효율적으로 사용해야 할 때

 

사전 자료형

사전 자료형 하면, 영한 사전을 떠올리자.

  • 사전 자료형이란, 키(Key)와 값(Value)의 쌍을 데이터로 가지는 자료형이다.
    • 앞서 다뤘던 리스트나 튜플이 값을 순차적으로 저장하는 것과는 대비됨.
  • 사전 자료형은 키와 값의 쌍을 데이터로 가지며, 원하는 '변경 불가능한(Immutable) 자료형'을 키로 사용할 수 있다.
  • [장점] 파이썬의 사전 자료형은 (내부적으로 동작할 때) 해시 테이블(Hash Table)을 이용하므로 데이터의 조회 및 수정에 있어서 O(1)의 시간에 처리할 수 있음.
a = dict() #사전 자료형 초기화
a['조랭이떡'] = 'zorang'
a['홍길동'] = 'hong'

print(a)

#이렇게도 사전 자료형 초기화 가능.
b = {
    '조랭이떡' : 'zorang',
    '홍길동' : 'hong'
}
print(b)

''' output
{'조랭이떡': 'zorang', '홍길동': 'hong'}
{'조랭이떡': 'zorang', '홍길동': 'hong'}
'''
키(Key) 값(Value)
조랭이떡 zorang
홍길동 hong

사전 자료형 선언을 시각화한 표라고 생각하면서 이해하면 더 편함.

 

사전 자료형 관련 메서드

사전 자료형에서는 key와 value 값들을 별도로 뽑아 내기 위한 메서드를 지원.

  • keys() - 키 데이터만 뽑아서 리스트로 사용할 때
  • values() - 값 데이터만 뽑아서 리스트로 사용할 때
a = {
    '조랭이떡' : 'zorang',
    '홍길동' : 'hong'
}
print(a)

#사전 키
dict_key_list = a.keys()
print(dict_key_list)

#리스트로 변환해서 자주 사용함.
key_list = list(a.keys())
print(key_list)

#값 데이터만 담은 리스트
dict_value_list = a.values()
print(dict_value_list)

#각 key에 따른 value 하나씩 출력
for key in dict_key_list:
    print(a[key])

''' output
{'조랭이떡': 'zorang', '홍길동': 'hong'}
dict_keys(['조랭이떡', '홍길동'])
['조랭이떡', '홍길동']
dict_values(['zorang', 'hong'])
zorang
hong
'''

 

 

집합 자료형

(수학적으로) 집합 자료형의 특징

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

집합 자료형 초기화

집합은 리스트 혹은 문자열을 이용해서 초기화 할 수 있음. ( set() 함수 활용 )

혹은 중괄호 ({})안에 각 원소를 콤마(,)를 기준으로 구분하여 삽입함으로써 초기화 할 수 있음.

데이터의 조회 및 수정에 있어서 O(1)의 시간에 처리할 수 있음.

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

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

 

집합 자료형의 연산

기본적으로 수학에서 사용하는 연산을 제공함.

  • 합집합 : 집합 A에도 속하거나 B에도 속하는 원소로 이루어진 집합( A U B )
  • 교집합 : 집합 A에도 속하고 B에도 속하는 원소로 이루어진 집합( A n B )
  • 차집합 : 집합 A의 원소 중에서 B에 속하지 않는 원소들로 이루어진 집합 (A - B)
a = set([1,2,3,4,5])
b = {3,4,5,6,7}
print(a)
print(b)

#합집합
print(a | b)

#교집합
print(a & b)

#차집합
print(a - b)

''' output
{1, 2, 3, 4, 5}
{3, 4, 5, 6, 7}
{1, 2, 3, 4, 5, 6, 7}
{3, 4, 5}
{1, 2}
'''

 

집합 자료형 관련 함수

add, updata, remove

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

# 새로운 원소 1개 추가. add
data.add(4)
print(data)

# 새로운 원소 여러개 추가. updata
data.update([5,6])
print(data)

# 특정한 값을 갖는 원소 삭제. remove
data.remove(4)
print(data)

''' output
{1, 2, 3}
{1, 2, 3, 4}
{1, 2, 3, 4, 5, 6}
{1, 2, 3, 5, 6}
'''

 

사전 자료형과 집합 자료형의 특징

  • 리스트 튜플 순서가 있기 때문에 인덱싱을 통해 자료형의 값을 얻을 수 있음.
  • 사전 자료형과 집합 자료형은 순서가 없기 때문에 인덱싱으로 값을 얻을 수 없음.
    • 사전 자료형의 경우, 키(key)
    • 집합 자료형의 경우, 원소(Element)를 이용해 상수시간 O(1)의 시간 복잡도로 조회함.

키, 원소의 값으로는 변경 불가능한 문자열이나 튜플과 같은 객체가 사용되어야 한다는 점을 기억!

 

 

 

 

 

 

 

이코테 2021 시리즈 씹어먹기 by 조랭이떡

시리즈 목차

더보기
  1. 코딩테스트 출제 경향 및 알고리즘 성능 평가
  2. 파이썬 문법 부수기
    1. 수, 리스트 자료형
    2. 문자열, 튜플, 사전, 집합 자료형
    3. 기본 입출력
    4. 조건문
    5. 반복문
    6. 함수와 람다 표현식
    7. 자주 사용되는 표준 라이브러리
  3. 그리디
    1. 그리디 알고리즘이란?
    2. 거스름돈
    3. 1이 될 때 까지
    4. 곱하기 혹은 더하기
    5. 모험가 길드
  4. 구현
  5. DFS & BFS (추후링크)
  6. 정렬 알고리즘 (추후링크)
  7. 이진 탐색 (추후링크)
  8. 다이나믹 프로그래밍 (추후링크)
  9. 최단 경로 알고리즘 (추후링크)
  10. 기타 그래프 이론 (추후링크)
  11. 코딩 테스트에서 자주 출제되는 기타 알고리즘 (추후링크)
  12. 개발형 코딩 테스트 (추후링크)

 

 

반응형