데이터사이언스 기록기📚

[이것이 취업을 위한 코딩테스트다 with 파이썬] 코딩테스트를 위한 파이썬 문법_입출력,주요 라이브러리의 문법과 유의점 본문

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

[이것이 취업을 위한 코딩테스트다 with 파이썬] 코딩테스트를 위한 파이썬 문법_입출력,주요 라이브러리의 문법과 유의점

syunze 2022. 3. 18. 23:14

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

 

목차

1. 자료형

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

2. 조건문

3. 반복문

  • while문
  • for문

4. 함수

5. 입출력

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


 5. 입출력

 1) 데이터 입력 받기

  • (알고리즘 순서) 적절한 입력 -> 적절한 알고리즘 수행 -> 결과 출력
  • 알고리즘의 첫번째 단계, 데이터 입력받기
 데이터 입력받기
  - 한 줄의 문자열을 입력받기 -> input()
  - 입력받은 데이터 정수형 데이터로 처리 -> int(input())
  - 입력받은 문자열을 띄어쓰기로 구분 후, 각각 정수 자료형의 리스트 데이터로 저장 -> list(map(int,input().split()))
     •  input().split() : 입력받은 문자열 공백으로 나누어 리스트로 저장
     •  map(int, input().split()) : 해당 리스트 모든 원소에 int() 함수 적용
     •  list(map(int,input().split())) : 마지막으로 결과를 list로 바꿈

 

# 입력을 위한 전형적인 소스코드
n = int(input())

# 각 데이터를 공백으로 구분하여 입력
data = list((map(int, input().split()))

data.sort(reverse = True)
print(data)

# 공백을 기준으로 구분하여 적은 수의 데이터 입력
n ,m, k = map(int,input().split())
print(n, m, k)

 

  • (입력 받는 것만으로도 시간 초과를 받을 수 있으므로) 입력을 최대한 빠르게 받는 방법 알고있어야함 -> sys.stdin.readline()
# 입력 빨리 받는 소스코드(input()은 동작 속도가 느려 시간 초과로 오답판정 받을 수 있음)
import sys
sys.stdin.readline().rstrip()		# readline() 입력 후 엔터가 줄바꿈으로 입력, 공백문자 제거 위해 rstrip() 사용

# readline() 사용 소스코드 예시
import sys
data = sys.stdin.readline().rstrip()
print(data)

 2) 데이터 출력하기

  • print() : 변수, 상수를 매개변수로 입력 -> 표준출력으로 출력
# 변수 출력 예시
a = 1
b = 2
print(a,b)

# 출력 줄 바꿈 예시
a = 1
b = 2
print(a)
print(b)
# 출력시 오류 발생하는 코드 예시
ans = 7
print("정답은"+ ans + "입니다.")		# 오류 : 문자열 자료형끼리만 더하기 연산 가능

# 해결책1) 변수 -> 문자열로 바꾸어 출력
ans = 7
print("정답은"+ str(ans) + "입니다.")

# 해결책2) 각 변수를 ,로 구분하여 출력
ans = 7
print("정답은", ans, "입니다.")

# 해결책3) f-string 문법 사용
ans = 7
print(f"정답은 {ans} 입니다.")		# 문자열 앞에 f붙이기, {}안에 변수 넣기

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

  - 표준 라이브러리 : 특정한 프로그래밍 언어에서 자주 사용되는 표준 소스코드를 미리 구현해 놓은 라이브러리

 

  1) 내장 함수

 내장함수
  - print(), input()과 같은 기본 입출력 기능과 sorted()와 같은 정렬 기능을 포함한 기본 내장 라이브러리
  - import 명령어 없이 바로 사용 가능
  • sum() : iterable 객체(반복가능한 객체 - 리스트, 사전, 튜플)가 입력으로 주어졌을 때 모든 원소의 합 반환
  • min() : 파라미터 2개 이상일 때 가장 작은 값 반환
  • max() : 파라미터 2개 이상일 때 가장 큰 값 반환
  • eval() : 수학 수식이 문자열 형식으로 들어오면 해당 수식 계산 결과 반환
  • sorted() : iterable 객체가 들어왔을 때 정렬된 결과를 반환
# sum 예시
result = sum([1,2,3,4,5])
print(result)		# 출력 : 15

# min 예시
result = min(7,3,5,2)
print(result)		# 출력 : 2

# max 예시 
result = max(7,3,5,2)
print(result)		# 출력 : 7

# eval 예시
result = eval("(3+5)*7")
print(result)		# 출력 : 56

# sorted 예시
result = sorted([9,1,8,5,4])
print(result)		# 출력 : [1, 4, 5, 8, 9]
result = sorted([9,1,8,5,4], reverse = True)
print(result)		# 출력 : [9, 8, 5, 4, 1]

result = sorted([('홍길동', 35), ('이순신', 75), ('아무개', 50)], key = lambda x : x[1], reverse = True)
print(result)		# 출력 : [('이순신', 75), ('아무개', 50), ('홍길동', 35)]

# list는 sort()함수 내장
data = [9,1,8,5,4]
data.sort()
print(data)		# 출력 : [1, 4, 5, 8, 9]

 2) itertools

  - itertools : 파이썬에서 반복되는 데이터를 처리하는 기능

  • permutations : iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열) 계산
    -> 클래스여서 객체 초기화 이후 리스트 자료형으로 변환하여 사용
  • combinations : iterable 객체에서 r개의 데이터를 뽑아 순서를 고려하지 않고 나열하는 모든 경우(조합) 계산
    -> 클래스여서 객체 초기화 이후 리스트 자료형으로 변환하여 사용
  • product : iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열)을 계산. 원소를 중복하여 뽑음
    -> 객체 초기화 시, repeat 속성값으로 넣어줌 
    -> 클래스여서 객체 초기화 이후에는 리스트 자료형으로 변환하여 사용
  • combinations_with_replacement : iterable 객체에서 r개의 데이터를 뽑아 순서를 고려하지 않고 나열하는 모든 경우(조합) 계산. 원소를 중복하여 뽑음
    -> 클래스여서 객체 초기화 이후에는 리스트 자료형으로 변환하여 사용
# permutations 예제
from itertools import permutations

data = ['A','B','C']
result = list(permutations(data,3))		# 모든 순열 구하기

print(result)		# 출력 : [('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]


# combinations 예제
from itertools import combinations

data = ['A','B','C']
result = list(combinations(data, 2))		# 2개를 뽑는 모든 조합 구하기

print(result)		# 출력 : [('A', 'B'), ('A', 'C'), ('B', 'C')]


# product 예제 
from itertools import product

data = ['A','B','C']
result = list(product(data, repeat = 2))

print(result)		# 출력 : [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]


# combinations_with_replacement 예제
from itertools import combinations_with_replacement

data = ['A','B','C']
result = list(combinations_with_replacement(data,2))
print(result)		# 출력 : [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]

 3) heapq

  - heapq : heap 기능을 제공하는 라이브러리. 우선순위 큐 기능을 구현하기 위해 사용

  • heapq.heappush() : 힙에 원소를 삽입
  • heapq.heappop() :  힙에 원소를 꺼내고자 할 때

   +) 최소 힙으로 구성, 원소 넣었다 빼기 -> 시간복잡도 O(NlogN) 오름차순 정렬

# heapq 예제_heap 정렬
import heapq

def heapsort(iterable):
  h = []
  result = []
  # 모든 원소를 차례대로 힙에 삽입
  for value in iterable:
    heapq.heappush(h, value)
  # 힙에 삽입된 모든 원소를 차례대로 꺼내어 담기
  for _ in range(len(h)):
    result.append(heapq.heappop(h))
  return result
result = heapsort([1,3,5,7,9,2,4,6,8,0])
print(result)		 # 출력 : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# heap예제_최대 힙 구현으로 내림차순 힙 정렬 구현(삽입 전 부호 반대로, 꺼낸 후 부호 반대로)
import heapq

def heapsort(iterable):
  h = []
  result = []
  # 모든 원소를 차례대로 힙에 삽입
  for value in iterable:
    heapq.heappush(h, -value)
  # 힙에 삽입된 모든 원소를 차례대로 꺼내어 담기
  for _ in range(len(h)):
    result.append(-heapq.heappop(h))
  return result
result = heapsort([1,3,5,7,9,2,4,6,8,0])
print(result)		 # 출력 : [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

 4) bisect

 - bisect : 이진탐색 기능을 제공하는 라이브러리, 정렬된 배열에서 특정원소 찾기에 효과적

  • bisect_left(a,x) : 정렬된 순서를 유지하면서 리스트 a에 데이터 x를 삽입할 가장 왼쪽 인덱스를 찾는 메서드
  • bistect_right(a,x) : 정렬된 순서를 유지하도록 리스트 a에 데이터 x를 삽입할 가장 오른쪽 인덱스를 찾는 메서드
# bisect 예제
from bisect import bisect_left, bisect_right

a = [1,2,4,4,8]
x = 4

print(bisect_left(a, x))		# 출력 : 2
print(bisect_right(a, x))		# 출력 : 4
# bisect 예제_ 정렬된 리스트에서 값이 특정 범위에 속하는 원소의 개수 구하기
from bisect import bisect_left, bisect_right

def count_by_range(a, left_value, right_value):
  right_index = bisect_right(a, right_value)
  left_index = bisect_left(a, left_value)
  return right_index - left_index

a = [1,2,3,3,3,3,4,4,8,9]

print(count_by_range(a, 4,4))		# 출력 : 2
print(count_by_range(a, -1, 3))		# 출력 : 6

 5) collections 

  - collections : deque, Counter 등의 유용한 자료구조를 포함하고 있는 라이브러리

  • deque() : deque를 이용하여 큐 구현, 스택이나 큐 자료구조의 대용으로 사용 가능
    -> popleft() : 첫번째 원소 제거 / pop() : 마지막 원소 제거
    -> appendleft(x) : 첫번째 인덱스에 원소 x 삽입 / append(x) : 마지막 인덱스에 원소 x 삽입
    -> 인덱싱, 슬라이싱 기능 사용 불가
    -> list와 deque의 비교
  list deque
가장 앞쪽 원소 추가 O(N) O(1)
가장 뒤쪽 원소 추가 O(1) O(1)
가장 앞쪽 원소 제거 O(N) O(1)
가장 뒤쪽 원소 제거 O(1) O(1)
# deque 예제
from collections import deque

data = deque([2,3,4])
data.appendleft(1)
data.append(5)

print(data)		# 출력 : deque([1, 2, 3, 4, 5])
print(list(data))		# 출력 : [1, 2, 3, 4, 5]

   +) 큐 자료구조로 이용 - 원소 삽입 append(), 원소 삭제 popleft() 사용

 

  • Counter() : 등장 횟수를 세는 기능, 해당 객체 내부의 원소가 몇 번씩 등장했는지 알려줌
# Counter 예제
from collections import Counter

counter = Counter(['red','blue','red','green','blue','blue'])

print(counter['blue'])		# 출력 : 3
print(counter['green'])		# 출력 : 1
print(dict(counter))		# 출력 : {'red': 2, 'blue': 3, 'green': 1}

 6) math

  - math : 자주 사용되는 수학적인 기능을 포함하는 라이브러리.팩토리얼, 제곱근, 최대공약수 등을 계산하는 기능 포함

  • factorial(x) : x! 값 반환
  • sqrt(x) : x의 제곱근
  • gcd(a,b) : 최대공약수 구하기
  • pi : 파이, e : 자연상수 e
# factorial 예제
import math
print(math.factorial(5))		# 출력 : 120

# sqrt 예제
import math
print(math.sqrt(7))		# 출력 : 2.6457513110645907

# 최대공약수 예제
import math
print(math.gcd(21,14))		#  출력 : 7

# 파이, 자연상수e 예제
import math
print(math.pi)		# 출력 : 3.141592653589793
print(math.e)		# 출력 : 2.718281828459045

코딩 테스트를 위한 파이썬 문법 정리 끝!

728x90
Comments