[Python]🔥코딩 테스트를 위한 파이썬🔥

2024. 10. 14. 01:00·코딩테스트 대비
728x90

죽이 되든 밥이 되든 일단 시작 🚀🚀🚀

 

이 글은 Covenant 님의 용감하게 시작하는 코딩테스트 시리즈를 정리한 글입니다.

 

 

 

1. 입출력

✨ 입력 받기

입력 문자열을 공백을 기준으로 분리하여 각 값을 변수에 할당
a, b = map(int(), input().split())

 

✨ 빠른 입출력

많은 양의 데이터 처리 시 속도를 개선하기 위해 표준 입출력을 사용
from sys import stdin, stdout
input = stdin.readline
print = stdout.write

n = int(intput())
print(str(n))

❗주의 sys.stdout.write() 은 문자열인 경우에만 출력이 가능

 

 

 

2. 배열 입력

✨ 코드 한 줄로 배열 입력 받기

첫 번째 줄에 입력될 줄의 수가 주어지고, 이후 공백으로 구분된 숫자들이 각 줄마다 주어지는 경우
3 # 입력되는 숫자의 줄 수
1 2 3
4 5 6
7 8 9
arr = [list(map(int(), input().split())) for _ in range(int(input()))]

 

✨ 정수와 배열이 같은 줄로 입력되는 경우

각 줄에서 첫 번째 값은 배열 요소의 개수가 주어지고, 이후 공백으로 구분된 숫자들이 주어지는 경우
4 10 20 30 50 	# 숫자의 개수 숫자1 숫자2 숫자3 숫자4
3 5 6 7			 
3 100 200 300
n, *arr = map(int, input().split())

변수 앞에 * 연산자를 붙이면 나머지 값을 리스트로 묶어 처리하는 unpacking을 수행

 

✨ 문자열을 한 글자씩 배열에 저장

첫 번째 줄에 입력될 줄 수가 주어지고, 그 다음 줄부터 문자열이 주어지는 경우
# 입력 데이터
3
AAAA
ABCA
AAAA

# 문자열을 한 글자씩 배열에 저장
data = [['A', 'A', 'A', 'A']
       ['A', 'B', 'C', 'A']
       ['A', 'A', 'A', 'A']]
arr = [list(input()) for _ in range(int(input())]

 

 

 

3. 배열 출력

✨ 공백 없이 출력

리스트의 요소를 공백 없이 이어서 출력
print("".join(map(str, arr)))
print(*arr)

 

 

 

4. 기타 배열 관련

✨ 배열 초기화

입력으로 주어진 배열의 가로, 세로 크기에 따라 0으로 초기화된 배열 생성
N, M = map(int, input().split())
arr = [[0] * N for _ in range(M)]

 

✨ 원소를 거꾸로

arr.reverse()

❗주의 반환값이 없음

 

✨ 원소의 개수

arr.count(찾고자 하는 값)

 

✨ 원소의 중복 제거

set 자료형 사용
data = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'c', 'd' ] 
data = list(set(data))

# 실행 결과 예시
# ['d', 'a', 'b', 'f', 'e', 'g', 'c']

❗ 주의 set을 리스트로 변환하는 과정에서 순서가 보장되지 않음

 

중복을 제거하면서도 순서를 유지
data = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'c', 'd']
data = list(dict.fromkeys(data))

# 출력 결과 예시
['a', 'b', 'c', 'd', 'e', 'f', 'g']

 

2차원 리스트에서 중복 제거
data = [[1, 2], [1, 2], [1]] 
unique_data = list(map(list, set(map(tuple, data))))

# 출력 결과
# [[1], [1, 2]]

 

 

✨ 정렬

기본 배열 정렬
arr.sort()	# 오름차순 정렬
arr.sort(reverse=True)	# 내림차순 정렬

❗ 주의 sort() 는 리스트 자체를 변경함

 

2차원 배열에서 특정 기준으로 정렬
# x[0]을 기준으로 먼저 오름차순 정렬한 후, x[0] 값이 같다면 x[1] 값을 기준으로 오름차순 정렬
arr.sort(key=lambda x: (x[0], x[1]))

# x[0]을 기준으로 먼저 내림차순 정렬한 후, x[0] 값이 같다면 x[1] 값을 기준으로 오름차순 정렬
arr.sort(key=lambda x: (-x[0], x[1]))

 

 

 

5. 정수

✨ 최댓값 및 최솟값

임의로 최댓값 또는 최솟값을 지정하여 최솟값 또는 최댓값 구하기
import sys 

MAXVALUE = sys.maxsize
MINVALUE = -sys.maxsize - 1

❗주의 파이썬에서 int 자료형은 크기 제한이 없기 때문에 sys.maxsize + 1 과 같은 연산도 가능

 

✨ 진법

10진수 → 2, 8, 16 진수로 변환
bin()	# 2진수로 변환
oct()	# 8진수로 변환
hex()	# 16진수로 변환

 

2, 8, 16 진수 → 10 진수로 변환
int('2진수', 2)
int('8진수', 8)
int('16진수', 16)

 

 

 

6. 문자열

✨ 문자열 뒤집기

리스트 인덱싱을 사용
data = "ABCD"
data[::-1]

 

✨ 문자 ↔ 아스키 코드

ord()	# 문자 → 아스키 코드
chr()	# 문자 ← 아스키 코드

 

 

 

7. 삼항 연산자

(True일 때의 값) if 조건 else (False일 때의 값)

 

 

 

8. 순열과 조합

✨ 조합

순서와 상관없이 n개의 요소를 뽑는 경우
from itertools import combinations

print(list(combinations(arr, n)))

 

✨ 순열

순서를 고려하여 n개의 요소를 뽑는 경우
from itertools import permutations

print(list(permutations(arr, n)))

 

✨ 중복 순열

반복 가능한 객체 간의 모든 가능한 조합을 생성
from itertools import product

product(*iterables, repeat=1)

 

✨ 중복 조합

중복을 허용한 조합
from itertools import combinations_with_replacement

combinations_with_replacement(iterable, r)

 

 

 

9. 빈도 계산

✨ 배열의 요소별 빈도 계산

from collections import Counter

print(Counter(배열))

 

✨ 문자열의 문자별 빈도 계산

from collections import Counter

print(Counter(문자열))

 

✨ 딕셔너리처럼 사용

키를 통해 값 읽기
from collections import Counter

counter = Counter("hello world")
print(counter["o"], counter["l"])

 

특정 키에 해당하는 값 업데이트
counter["l"] += 1
counter["h"] -= 1

 

특정 키 존재 확인
if "o" in counter:
	print("o in counter")

 

특정 키 삭제
del counter["o"]

if "o" not in counter:
	print("o not in counter")

 

최빈값 찾기
print(counter.most_common(k))	# 상위 k개의 최빈값

 

덧셈 및 뺄셈 연산
c1 = Counter(["a", "b", "a"])
c2 = Counter(["a", "c"])

print(c1 + c2)  # 두 카운터를 더함
print(c1 - c2)  # c2에 있는 값을 뺌

 

 

 

10. 힙 (Heap)

✨ 최소 힙

이진 트리 구조로 데이터를 관리하며, 가장 작은 값이 루트에 위치
import heapq

heap = []
heapq.heappush(heap, 3)
heapq.heappush(heap, 1)
heapq.heappush(heap, 10)
heapq.heappush(heap, 5)
heapq.heappush(heap, 8)

print(heap)	# [1, 3, 10, 5, 8]
    1
   / \
  3  10
 / \
5   8

힙의 길이: len()

힙의 루트 원소 제거: heappop()

 

✨ 최대 힙

값을 넣을 때 음수로 넣고, 최종적인 값을 출력할 때 -1을 곱해줘서 출력
import heapq

heap = []

heapq.heappush(heap, -3)
heapq.heappush(heap, -1)
heapq.heappush(heap, -10)
heapq.heappush(heap, -5)
heapq.heappush(heap, -8)

print([-x for x in heap])	# [10, 8, 3, 1, 5]
    -10
   /   \
 -8     -3
 / \   
-1  -5

 

 

 

11. 덱 (Deque)

✨ 초기화

from collections import deque

deq = deque()

deq = deque([i for i in range(1, 5)])
print(deq)	# deque([1, 2, 3, 4])

 

✨ 양쪽에서의 삽입 및 삭제

오른쪽 끝에서 값 추가 및 제거: append(), pop()
왼쪽 끝에서 값 추가 및 제거: appendleft(), popleft()
deq.append(5)
print(deq)	# deque([1, 2, 3, 4, 5])

deq.append(0)
print(deq)	# deque([0, 1, 2, 3, 4, 5])

deq.pop()
print(deq)	# deque([0, 1, 2, 3, 4])

deq.popleft()
print(deq)	# deque([1, 2, 3, 4])

 

✨ 길이 구하기

print(len(deq))

 

✨ 회전

# 시계 방향으로 한 칸 회전
deq.rotate(1)
print(deq)	# deque([4, 1, 2, 3])

# 반시계 방향으로 한 칸 회전
deq.rotate(-1)
print(deq)	# deque([1, 2, 3, 4])

 

 

 

12. 우선순위 큐

✨ 값 삽입

우선순위를 따로 지정하지 않는 경우, 기본적으로 작은 값이 높은 우선순위로 처리됨
from queue import PriorityQueue

que = PriorityQueue()

que.put((우선순위, 값))

 

✨ 값 제거

가장 우선순위가 높은 값을 제거하고 반환
que.get()

 

 

 

728x90

'코딩테스트 대비' 카테고리의 다른 글

[알고리즘] 구현 (Implementation)  (0) 2024.10.16
[알고리즘] 그리디 알고리즘 (Greedy Algorithm)  (0) 2024.10.14
[코드트리 챌린지] [Novice Low] 5. 단순 반복문(10) - cnt 활용하기  (0) 2023.10.28
[코드트리 챌린지] [Novice Low] 5. 단순 반복문(9) - for 안의 if  (0) 2023.10.27
[코드트리 챌린지] [Novice Low] 5. 단순 반복문(8) - if 안의 for  (0) 2023.10.26
'코딩테스트 대비' 카테고리의 다른 글
  • [알고리즘] 구현 (Implementation)
  • [알고리즘] 그리디 알고리즘 (Greedy Algorithm)
  • [코드트리 챌린지] [Novice Low] 5. 단순 반복문(10) - cnt 활용하기
  • [코드트리 챌린지] [Novice Low] 5. 단순 반복문(9) - for 안의 if
랑뎁
랑뎁
  • 랑뎁
    RangDev.
    랑뎁
  • 전체
    오늘
    어제
    • 분류 전체보기 (256)
      • 취준 (59)
        • 경제신문스크랩 (59)
      • 파이썬 (2)
      • 코딩테스트 대비 (154)
      • 수학 (2)
      • 머신러닝 (0)
      • 컴퓨터비전 (1)
      • 강화학습 (33)
      • Git (3)
      • 자격증 (1)
        • 한국사 능력 검정 1급 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
  • 인기 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.2
랑뎁
[Python]🔥코딩 테스트를 위한 파이썬🔥
상단으로

티스토리툴바