데이터사이언스 기록기📚

[이것이 취업을 위한 코딩테스트다 with 파이썬] 코딩테스트를 위한 파이썬 문법_자료형 본문

Coding Test/이것이 취업을 위한 코딩테스트이다 with 파이썬

[이것이 취업을 위한 코딩테스트다 with 파이썬] 코딩테스트를 위한 파이썬 문법_자료형

syunze 2022. 3. 15. 18:46

'이것이 취업을 위한 코딩테스트이다 with 파이썬'의 기본 파이썬 문법 부분을 정리 및 학습한 포스팅입니다.

 

목차

1. 자료형

  • 수 자료형
  • 리스트 자료형
  • 문자열 자료형
  • 튜플 자료형
  • 사전 자료형
  • 집합 자료형

2. 조건문

3. 반복문

  • while문
  • for문

4. 함수

5. 입출력

6. 주요 라이브러리의 문법과 유의점

 


1. 자료형

 1) 수 자료형

   - 정수형

# 양의 정수
a = 100
print(a)

# 음의 정수
b = -2
print(b)

# 0
c = 0
print(c)

 

 - 실수형

# 양의 실수
a = 157.93
print(a)

# 음의 실수
b = -193.2
print(b)

# 소수부가 0일 때 0 생략
c = 5.
print(c)   # 출력 : 5.0

# 정수부가 0일 때 0 생략
d = .7
print(d)   # 출력 : 0.7

 

  - 지수 표현 방식

# 10억
a = 1e9
print(a)    # 출력 : 100000000

#752.5
b = 75.25e1
print(b)	

# 3.954
c = 3954e-3
print(c)

    +) 컴퓨터는 실수를 정확히 표현하지 못한다.(10진수 2진수 체계의 차이 때문, 컴퓨터는 2진수)

        -> 실수 값 비교하는 문제일때 round() 함수 사용하여 표현하기

 round()
   - 소수점 특정 자리 수에서 반올림
   - 사용 : round( 실수형 데이터 , 반올림 위치-1) 
   - 예시 : round(123.54, 1)  -> 출력 : 123.5
# 0.899999999 출력으로 False 출력
a = 0.3 + 0.6
print(a)	# 출력 : 0.8999999999999999

if a == 0.9:
	print(True)
else:
	print(False)	# 출력 : False
# round() 함수 이용하여 0.9, True 출력
b = 0.3 + 0.6
print(round(b,4))	# 출력 : 0.9
			# 5번째 자리에서 반올림하여 4번째 자리까지 출력, 코테에서는 5번째 반올림이 정답인 경우 다수

if round(b,4) == 0.9:
	print(True)
else:
	print(False)	# 출력 :True

 

    - 수 자료형 연산

 나누기 연산자(/)와 몫 연산자(//)
   - 나누기 연산자(/) : 나눠진 결과 실수형으로 처리
      예제) 7 / 3      답) 2.333333333333
   - 몫 연산자(//) :나눠진 결과 정수형
       예제) 7 // 3      답) 2
 거듭제곱 연산자(**)
   - a**b 형식으로 사용
a = 7
b = 3

# 더하기
print(a+b)	# 출력 : 10

# 빼기
print(a-b)	# 출력 : 4

# 곱하기
print(a*b)	# 출력 : 21

# 나누기
print(a/b)	# 출력 : 2.3333333333333335

# 나머지
print(a%b)	# 출력 : 1

# 몫
print(a//b)	# 출력 : 2

# 거듭제곱
print(a**b)	# 출력 : 343

 2) 리스트 자료형 

 리스트
   - 여러 개의 데이터를 연속적으로 담아 처리하기 위해 사용
   - 내부적으로 배열을 채택
   - 연결 리스트 자료구조 기능 포함(append(), remove() 메서드 지원)
   - 배열 or 테이블로 불리기도 함 

 

    - 리스트 만들기

 리스트 만들기
   - 리스트 초기화 : list() , a = []
   - 리스트 원소 접근 : 인덱스 값을 괄호 안에 넣기 (a[1] , 인덱스는 0부터 시작)
# 빈 리스트 선언 방법_1
b = list()
print(b)

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

# 리스트 만들기
a = [1,2,3,4,5,6,7,8,9]
print(a)

# 다섯번째 원소에 접근
print(a[4])
  •  코딩 테스트에서 많이 사용되는 크기 N인 1차원 리스트 초기화
# (in 코딩테스트) 크기가 N이고 1차원 리스트 초기화
n = 10
a = [0] * n
print(a)	# 출력 : [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

 

    - 리스트의 인덱싱과 슬라이싱

 인덱싱과 슬라이싱
   - 인덱싱 : 인덱스 값을 입력하여 특정한 원소에 접근
                인덱스 값은 양의 정수, 음의 정수 사용 가능 (예시 : a[5], a[-1])
   - 슬라이싱 : 리스트에서 연속적인 위치를 갖는 원소 가져올때 사용
                    a[시작 : 끝 인덱스-1] (예시 : a[2:6])
a = [1,2,3,4,5,6,7,8,9]

# 뒤에서 첫번째 원소 출력
print(a[-1])

# 뒤에서 세번째 원소 출력
print(a[-3])

# 네번째 원소 값 변경
a[3] = 10
print(a)	# 출력 : [1,2,3,10,5,6,7,8,9]

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

 

    - 리스트 컴프리헨션

 리스트 컴프리헨션
   - 리스트를 초기화 하는 방법 중 하나
   - [] 안에 조건문과 반목문을 넣는 방식으로 리스트 초기화 할 수 있음
   - 리스트 컴프리헨션 사용 시 소스코드가 훨씬 짧고 간결
# 0부터 19까지의 수 중에서 홀수만 포함하는 리스트 만들기
a = [i for i in range(0,20) if i % 2 == 1]
print(a)	# 출력 : [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

# 1부터 9까지 수의 제곱 값을 포함하는 리스트 만들기
b = [i*i for i in range(1,10)]
print(b)	# 출력 : [1, 4, 9, 16, 25, 36, 49, 64, 81]
  • 리스트 컴프리헨션은 코딩테스트에서 2차원 리스트 초기화 할때 효과적으로 사용
# N * M 크기의 2차원 리스트 초기화
n = 3
m = 5
a = [[0] *m for _ in range(n)]
print(a)	# 출력 : [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
# (잘못된 예시) N * M 크기의 2차원 리스트 초기화
n = 3
m = 5
a = [[0] * m] * n
print(a)	# 출력 : [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

a[1][1] = 5
print(a)	# 출력 : [[0, 5, 0, 0, 0], [0, 5, 0, 0, 0], [0, 5, 0, 0, 0]]
		# 내부적으로 포함된 3개의 리스트가 동일한 객체에 대한 3개의 레퍼런스로 인식

 

    - 리스트 관련 기타 메서드

 리스트 기타 메서드
   - append() : 리스트에 원소 하나 삽입할 때 사용
                   (예시 : a.append(4) , 시간복잡도 : O(1))
   - sort()
     1) 기본 정렬 기능으로 오름차순으로 정렬 (예시 : a.sort() , 시간복잡도 : O(NlogN))
     2) 내림차순으로 정렬 (예시 : a.sort(reverse = True) , 시간복잡도 : O(NlogN))
   - reverse() : 리스트의 원소 순서를 모두 뒤집어 놓음
                   (예시 : a.reverse() , 시간복잡도 : O(N))
   - insert() : 특정한 인덱스 위치에 원소 삽입할 때 사용
                 (예시 : a.insert(삽입할 위치 인덱스,삽입할 값) a.insert(3,5), 시간 복잡도 : O(N))
   - count() : 리스트에서 특정 값을 가지는 데이터 개수를 셀 때 사용
                 (예시 : a.count(특정 값) a.count(2) , 시간복잡도 : O(N))
   - remove() : 특정한 값을 갖는 원소를 제거하는데 값을 가진 원소가 여러개이면 하나만 제거
                   (예시 : a.remove(특정 값) a.remove(8) , 시간복잡도 : O(N)) 
a = [1,5,7]
print("기본 리스트:",a)

# 리스트에 원소 삽입
a.append(2)
print("삽입:",a)	# 출력 : 삽입: [1, 5, 7, 2]

# 오름차순 정렬
a.sort()
print("오름차순 정렬:",a)	# 출력 : 오름차순 정렬: [1, 2, 5, 7]

# 내림차순 정렬
a.sort(reverse=True)
print("내림차순 정렬:",a)	# 출력: 내림차순 정렬: [7, 5, 2, 1]

# 리스트 원소 뒤집기
a.reverse()
print("원소 뒤집기:",a) # 출력 : 원소 뒤집기: [1, 2, 5, 7]

# 특정 인덱스에 데이터 추가
a.insert(3,6)
print("데이터 추가:",a)	# 출력 : 데이터 추가: [1, 2, 5, 6, 7]

# 특정 값인 데이터 개수 세기
print("1인 원소 개수 세기:",a.count(1))	# 출력 : 1인 원소 개수 세기: 1

# 특정 데이터 값 삭제
a.remove(5)
print("원소 5 삭제:", a)	# 출력 : 원소 5 삭제: [1, 2, 6, 7]
  • insert() 중간에 원소 삽입한 후에 리스트 원소 위치 조정 필요 - 시간복잡도 O(N) => insert() 함수 많이 사용시 '시간초과'로 테스트 통과 못할 수 있다.
  • remove() 또한 중간에 있는 원소 삭제한 다음에 리스트 원소 위치 조정 - 시간복잡도 O(N)

    +) 특정한 값의 원소 모두 제거

# 특정한 값의 원소 모두 제거
a = [1,2,3,4,5,5,5]
remove_set = {3,5}

# remove_set에 포함되지 않는 값만을 저장
result = [i for i in a if i not in remove_set]
print(result)	# 출력 : [1, 2, 4]

 3) 문자열 자료형

    - 문자열 초기화

 문자열 초기화
   - "(큰따옴표), '(작은따옴표)를 이용
   - 문자열을 큰따옴표(")로 구성하는 경우, 작은따옴표(')를 포함할 수 있다. 반대의 경우도 가능
   - \ 이용하면 원하는 만큼 문자열 표시 가능 (\" or \')
# 문자열 연습
data = 'Hello Python'
print(data)		# 출력 : Hello Python

data = "Don't you know \"Python\"?"
print(data)		# 출력 : Don't you know "Python"?

   

   - 문자열 연산

# 문자열 변수 덧셈(+)
a = "Hello"
b = "World"
print(a+b)		# 출력 : HelloWorld

# 문자열 곱셈
c = "String"
print(c * 3)		# 출력 : StringStringString

# 문자열 인덱싱과 슬라이싱
d = "ABCDEF"
print(d[2:5])		# 출력 : CDE

 4) 튜플 자료형

  튜플
   - 리스트와 유사하지만 다른점이 있다
   - 튜플은 한번 선언된 값을 변경할 수 없다
   - 리스트 [], 튜플 () 이용
   - 리스트에 비해 공간 효율적
   - 각 원소의 성질이 다를 때 주로 사용
# 튜플 값 변경 시 생기는 오류
a = (1,2,3,4,5)
a[2] = 7

# ---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-25-38a8875b10de> in <module>()
      1 a = (1,2,3,4,5)
----> 2 a[2] = 7

TypeError: 'tuple' object does not support item assignment

 -  튜플 그래프 알고리즘 구현 시 자주 사용

  • (다익스트라 최단 경로) 우선순위 큐 사용, 우선순위 큐 값 변경되지 않음
  • 우선순위 큐의 데이터 -> 튜플로 구성하여 소스코드 작성
  • 변경하면 안되는 값이 변경되고 있지 않는지 체크 가능
  • (비용, 노드 번호) 형태로 튜플과 묶어서 관리

 5) 사전 자료형

   - 사전 자료형 소개

 사전 자료형
   - key, value의 쌍을 데이터로 가지는 자료형
   - key를 사용하여  value에 접근 가능
   - 내부적으로 '해시 테이블' 이용 -> 데이터 검색 및 수정에 있어 O(1) 시간에 처리 가능
   - key, value 쌍으로 구성된 데이터를 리스트보다 훨씬 빠르게 동작
# dictionary 예제
data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'
data['코코넛'] = 'Coconut'

print(data)		# 출력 : {'사과': 'Apple', '바나나': 'Banana', '코코넛': 'Coconut'}
  •  사전 자료형에 특정한 원소 있는지 검사
# 특정 원소 있는지 검사하기
data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'
data['코코넛'] = 'Coconut'

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

   

   - 사전 자료형 관련 함수

 사전 자료형 관련 함수
   - keys() : 키 데이터만 뽑아서 리스트로 이용 (함수 자체가 리스트로 뽑힌다)
   - values() : 값 데이터만 뽑아서 리스트로 이용 (함수 자체가 리스트로 뽑힌다)
data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'
data['코코넛'] = 'Coconut'

# 키 데이터만 담은 리스트
keys_ = data.keys()
print(keys_)		# 출력 : dict_keys(['사과', '바나나', '코코넛'])

# 값 데이터만 담은 리스트
values_ = data.values()
print(values_)		# 출력 : dict_values(['Apple', 'Banana', 'Coconut'])

 6) 집합 자료형

  - 집합 자료형 소개

 집합 자료형
   - 특징 : 중복을 허용하지 않는다, 순서가 없다
   - 순서가 없어 인덱싱으로 값을 얻을 수 없다
   - 초기화 : set(), {}
   - 시간복잡도 : O(1)

    +) '학생 번호가 주어졌을때 해당 학생이 선택되었는지 여부를 출력'하는 문제에 효과적으로 사용

    +) '특정한 데이터가 이미 등장한 적 있는지 여부 확인' 할때 매우 효과적

# 집합 자료형 초기화_1
data = set([1,1,2,2,3,4,5])
print(data)		# 출력 : {1, 2, 3, 4, 5}

# 집합 자료형 초기화_2
data = {1,1,2,2,3,4,5}
print(data)		# 출력 : {1, 2, 3, 4, 5}

 

   - 집합 자료형의 연산

 집합 자료형의 연산
   - 합집합(|), 교집합(&), 차집합(-)
# 집합 자료형의 연산
a = set([1,2,3,4,5])
b = set([3,4,5,6,7])

# 합집합
print(a|b)		# 출력 : {1, 2, 3, 4, 5, 6, 7}

# 교집합
print(a&b)		# 출력 : {3, 4, 5}

#차집합 
print(a-b)		# 출력 : {1, 2}

 

  - 집합 자료형 관련 함수

 집합 자료형 관련 함수
   - add() : 집합 데이터에 값을 추가 (시간복잡도 : O(1))
   - update() : 여러 개의 값을 한꺼번에 추가
   - remove() : 특정한 값 제거 (시간복잡도 : O(1))
data = set([1,2,3])
print(data)

# 새로운 원소 추가
data.add(4)
print(data)		# 출력 : {1, 2, 3, 4}

# 새로운 원소 여러 개 추가
data.update([5,6])
print(data)		# 출력 : {1, 2, 3, 4, 5, 6}

# 특정한 값을 갖는 원소 삭제
data.remove(3)
print(data)		# 출력 : {1, 2, 4, 5, 6}

이후 문법들은 다음 포스팅에서 정리하겠습니다!

728x90
Comments