관리 메뉴

100세까지 코딩

코딩 테스트를 위한 파이썬 기초 문법 정리 본문

코딩테스트/파이썬

코딩 테스트를 위한 파이썬 기초 문법 정리

100세까지 코딩 2023. 12. 4. 00:30
  • round() : 실수 값을 제대로 비교하지 못할 수도 있으니 반올림 한다.
    ex) round( 123.456 , 2 ) = 123.46   // 소숫점 둘째 자리까지 (셋째에서 반올림)
  • 나누기 연산자(/)는 결과를 실수형으로 반환한다.
  • 몫 연산자는 (//), 거듭 제곱 연산자는 (**)
  • list 자료형 : 자바의 배열의 기능 & 연결 리스트
a = [1, 2, 3, 4, 5, 6]
# 여섯 번째 원소만 출력
print(a[5])  # ans : 6
# 뒤에서 세 번째 원소 출력
print(a[-3])  # ans : 4
# 두 번쨰 원소부터 네 번째 원소까지
print(a[1:4])  # ans : [2,3,4]
# 0부터 9까지의 수를 포함하는 리스트
b = [i for i in range(10)] # ans : [0,1,2,3,4,5,6,7,8,9]
# 0부터 10까지의 수 중에서 홀수만 포함하는 리스트
c = [i for i in range(10) if i % 2 == 1]  # ans : [1,3,5,7,9]
# N X M 크기의 2차원 리스트 초기화
N,M = 3,4
Array = [[0] * M for _ in range(N)]  # [0,0,0,0],[0,0,0,0],[0,0,0,0]
  • list 관련 기타 메서드
함수명 설명
append() 리스트에 원소를 하나 삽일할 때 사용
sort() 기본 정렬 기능으로 오름차순 정렬
sort(reverse = True) 내림차순 정렬
reverse() 리스트의 원소의 순서를 모두 뒤집어 놓는다
insert(삽입할 위치 인덱스, 삽입할 값) 특정한 인덱스 위치에 원소를 삽입할 때
count(특정 값) 리스트에서 특정한 값을 가지는 데이터 개수를 셀 때
remove(특정 값) 특정한 값을 갖는 원소를 제거할 때 (여러 개면 하나만 제거)
a = [1, 4, 3]
# 리스트에 원소 삽입
a.append(2)  # [1,4,3,2]
# 리스트 오름차순 정렬
a.sort()  # [1,2,3,4]
# 리스트 내림차순 정렬
a.sort(reverse=True)  # [4,3,2,1]

b = [4, 3, 2, 1]
# 원소 뒤집기
b.reverse()  # [1,2,3,4]
# 인덱스 2에 3 추가
b.insert(2, 3)  # [1,2,3,3,4]
# 특정 값인 데이터 개수 세기
print(b.count(3))
# 특정 값 데이터 삭제
b.remove(1)

a = [1, 2, 3, 4, 5, 5, 5]
remove_set = {3, 5}
result = [i for i in a if i not in remove_set]  # [1,2,4]
  • 문자열 연산
a = "String"
print(a * 3) # StringStringString

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

a[2] = 'a' # Error 문자열은 특정 인덱스의 값 변경 불가(Immutable)
  • 튜플 자료형 : 한 번 선언된 값 변경 불가, 리스트에 비해 공간 효율적, () 소괄호를 사용하여 선언
a = (1,2,3,4,5,6,7)
print(a[3]) # 4
print(a[1:4])  # (2, 3, 4)
a[2] = 7 # Error 특정 인덱스의 값 변경 불가
  • 튜플을 사용할 때 
1. 서로 다른 성질의 데이터를 묶어서 관리할 때 ex) 최단 경로 알고리즘에서 (비용, 노드 번호)
2. 데이터의 나열을 해싱의 키 값으로 사용할 때
3. 리스트보다 메모리 효율적으로 사용할 때

 

  • 사전 자료형 : 키와 값의 쌍을 데이터로 가지는 자료형, 자바의 HashMap
data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'

b = {    # 또 다른 선언 방법
    '홍길동': 97,
    '이순신': 98
}

if '사과' in data:
    print("'사과'를 키로 가지고 있습니다.")

key_list = list(data.keys())  # 키 데이터만 담은 리스트
value_list = list(data.values())  # 값 데이터만 담은 리스트

# 각 키에 따른 값을 하나씩 출력
for key in key_list:
    print(data[key])
  • 집합 자료형 : 중복 X, 순서 X, {} 중괄호를 사용하여 선언 또는 set(리스트)를 이용
# 집합 자료형 초기화 방법 1
data = set([1, 1, 2, 3, 4, 4, 5])  # {1,2,3,4,5}
# 집합 자료형 초기화 방법 2
data = {1, 1, 2, 3, 4, 4, 5}  # {1,2,3,4,5}

# 새로운 원소 추가
data.add(8)  # {1,2,3,4,5,8}
# 새로원 원소 여러 개 추가
data.update([9, 10])  # {1,2,3,4,5,8,9,10}
# 특정한 값을 삭제
data.remove(3)  # {1,2,4,5,6,9,10}

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}
  • 기본 입력
n = int(input())  # 정수 1개 입력받기
a, b, c = map(int, input().split())  # 정수 여러개 공백기준으로 입력받기
data = list(map(int, input().split()))  # 공백기준으로 정수받아 리스트에 넣기

import sys
data = sys.stdin.readline().rstrip() # 입력을 최대한 빨리 받기
  • 기본 출력
a = 1
b = 2
# 콤마를 이용하여 띄어쓰기 구분 출력
print(a, b)  # 1 2
# print()의 default는 출력 이후에 줄 바꿈
print(b, end=" ")  
print("정답은" + str(a) + "입니다.") # 2 정답은1입니다.

answer = 7
print(f"정답은 {answer}입니다.")  # 간단한 문자열과 정수를 함께 넣을 수 있다.
  • 조건문
score = 85

if score >= 70:
    print('성적이 70점 이상')
    if score >= 90:
        print('우수한 성적')
elif score >= 60:
    pass
else:
    print('조금 더 분발하세요')

print('프로그램 종료')
  • 논리 연산자 : java와 달리 기호(&& || !)를 쓰지않고 직접 단어 사용
논리 연산자 설명
 X and Y X와 Y가 모두 참일 때 참.
X or Y X와 Y중 하나만 참이어도 참.
not X X가 거짓일 때 참.
a = 15
if 0 <= a and a <= 20:  # 0 <= a <= 20 도 파이썬에서는 가능
    print("0이상이면서 20이하이다")
  • 기타 연산자 : 리스트, 튜플, 문자열, 딕셔너리 모두에서 사용 가능
연산자 설명
x in 리스트 리스트 안에 x가 들어가 있을 때 참.
x not in 문자열 문자열 안에 x가 들어가 있지 않을 때 참.
pass if 안에서 아무것도 처리하고 싶지 않을 때
  • 반복문
i = 1
result = 0
while i <= 9:
    result += i
    i += 1
print(result)  # 45

array = [9, 8, 7, 6, 5]
for x in array:  # 데이터에 포함되어 있는 원소를 처음부터 하나씩 방문
    print(x, end=" ")  # 9 8 7 6 5

sum = 0
for i in range(1, 10):  # 연속적인 값 차례대로 순회 range(시작 값, 끝 값 + 1)
    if i % 2 == 0:  # 짝수면
        continue  # 남은 코드 건너뛰고 다음 반복 진행
    if i == 9:
        break  # 반복문 즉시 탈출
    sum += i
print(sum)  # 16
  • 함수
def 함수명(매개변수):
      실행할 소스코드
       return 반환값
def add(a, b):
    return a + b

print(add(3, 4))  # 7
print(add(b=3, a=4)) # 변수를 직접 지정할 수 있고 순서 달라져도 됨 7
  • global 키워드
a = 10

def func():
    global a  # 함수 밖의 변수를 사용하고 싶을 때
    a += 1

func()
print(a) # 11
  • 여러개 반환
def operator(a, b):
    add = a + b
    substract = a - b
    multi = a * b
    divide = a / b
    return add, substract, multi, divide # 여러 개 반환 가능

a, b, c, d = operator(7, 3) 
print(a,b,c,d) # 10 4 21 2.333
  • 람다 표현식 : 함수를 간단하게 작성할 수 있다.
array = [('홍길동', 50), ('이순신', 32), (('아무개'), 74)]

def my_key(x):
    return x[1]

print(sorted(array, key=my_key))
# [('이순신', 32), ('홍길동', 50),  (('아무개'), 74)]
print(sorted(array, key=lambda x: x[1]))
# [('이순신', 32), ('홍길동', 50),  (('아무개'), 74)]

list1 = [1, 2, 3, 4, 5]
list2 = [6, 7, 8, 9, 10]

result = map(lambda a, b: a + b, list1, list2)
print(list(result))  # [7,9,11,13,15]
  • 유용한 표준 라이브러리

         1. 내장 함수 : 기본 입출력 함수부터 정렬 함수까지 기본적인 함수

         2. itertools : 반복되는 형태의 데이터 처리 (순열, 조합)

         3. heapq : 힙 자료구조를 제공 (우선순위 큐)

         4. bisect : 이진 탐색 기능 제공

         5. collections : 덱(deque), 카운터(Counter)등의 유용한 자료구조 포함

         6. math : 수학적 기능 (팩토리얼, 제곱근, 최대공약수, 삼각함수, 파이)

 

  • 내장 함수
result = sum([1, 2, 3, 4, 5])  # 합
print(result)  # 15

min_result = min(7, 3, 5, 2)  # 최솟값 찾아줌
max_result = max(7, 3, 5, 2)  # 최댓값 찾아줌
print(max_result, min_result)  # 7 2

result = eval("(3+5)*7")  # 식을 계산해서 숫자로 반환
print(result)  # 56

result = sorted([9, 1, 8, 5, 4])
reverse_result = sorted([9, 1, 8, 5, 4], reverse=True)
print(result)  # [1,4,5,8,9]
print(reverse_result)  # [9,8,5,4,1]

array = [[('홍길동', 50), ('이순신', 32), ('아무개', 74)]]
result = sorted(array, key=lambda x: x[1], reverse=True)
print(result)  # [[ ('아무개', 74),('홍길동', 50), ('이순신', 32)]]
  • 순열과 조합
from itertools import permutations

data = ['A', 'B', 'C']
result = list(permutations(data, 3))  # 3개를 뽑는 순열
print(result)
# [('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]

from itertools import combinations

data = ['A', 'B', 'C']
result = list(combinations(data, 2))  # 2개를 뽑는 모든 조합
print(result)
# [('A', 'B'), ('A', 'C'), ('B', 'C')]
  • Counter : 등장 횟수를 세는 기능
from collections import Counter

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

print(counter['blue'])  # 'blue'가 등장한 횟수 출력
print(dict(counter))  # {'red': 2, 'blue': 3, 'green': 1}
  • 최대 공약수와 최소 공배수
import math

def lcm(a, b):
    return a * b // math.gcd(a, b)

print(math.gcd(21, 14))  # 7 최대 공약수 계산
print(lcm(21, 14)) # 42