본문 바로가기
알고리즘?/기본3 탐색&시뮬레이션(string, 1차원 2차원 리스트 탐색)

코딩테스트 파이썬 테크닉 모음

by 몰라닉네임 2023. 5. 19.

*입력, 출력

파일에서 입력받기

#input.txt 안에 입력값 저장
import sys
sys.stdin=open("input.txt", "rt")
string=input()

 

숫자 입력 나눠서 받기

#8 3
n, m=map(int, input().split())

 

 

숫자 입력 한꺼번에 받기

#2 4 9 10 15 12
num=list(map(int, input().split()))
print(num)

output: [2, 4, 9, 10, 15, 12]

 

 

숫자 줄바꿈 받기

'''
4 11
802
743
457
539
'''
k, m=map(int, input().split())
Line=[]
res=0
for i in range(k):
    tmp=int(input())
    Line.append(tmp)
    
print(Line)

>>>[802, 743, 457, 539]

 

2차원 배열 받기

'''
1 2 3 4
8 7 6 5
9 1 2 3
4 5 8 3
2 1 0 2
'''

num=[list(map(int, input().split())) for _ in range(5)]
print(num)

output: [[1, 2, 3, 4], [8, 7, 6, 5], [9, 1, 2, 3], [4, 5, 8, 3], [2, 1, 0, 2]]

 

2차원 배열 이쁘게 출력하기

num=[list(map(int, input().split())) for _ in range(5)]
print(*num, sep='\n')

output:

[1, 2, 3, 4]

[8, 7, 6, 5]

[9, 1, 2, 3]

[4, 5, 8, 3]

[2, 1, 0, 2]

 

*자료구조

from collections import deque
q = deque()
q.append(2)
print(q.popleft())  # 2

최소 힙

import heapq
q = []
heapq.heappush(q, (1, 'apple'))
print(heapq.heappop(q)[1])    # 'apple'

 

유틸리티 함수

문자를 ASCII로 변환

print(ord('a'))    # 97

 

순열과 조합

배열로 순열 생성

from itertools import permutations
data = ['A', 'B', 'C']
result = list(permutations(data, 3))
print(result)   # [('A', 'B', 'C'), ('A', 'C', 'B'), ..., ('C', 'B', 'A')]

 

배열로 조합 생성

from itertools import combinations
data = ['A', 'B', 'C']
result = list(combinations(data, 2))
print(result)   # [('A', 'B'), ('A', 'C'), ('B', 'C')]

 

배열로 중복 생성

from itertools import product
data = ['A', 'B', 'C']
result = list(product(data, repeat=2))
print(result)   # [('A', 'A'), ('A', 'B'), ..., ('C', 'C')]

 

*기타 

list comprehension 을 사용한 리스트 값 필터링

arr = [7, 1, 2, 5, 4, 2, 0]
pivot = 3
left_side = [x for x in arr if x <= pivot]
print(left_side)    # [1, 2, 2, 0]

 

튜플 리스트 정렬

arr = [('apple', 17), ('banana', 8), ('candy', 3)]
arr.sort(key=lambda x: x[1])
print(arr)    # [('candy', 3), ('banana', 8), ('apple', 17)]

 

for 반복문 인덱스 가져오기

arr = ['a', 'b', 'c']
for i, char in enumerate(arr):
    print(f'{i}: {char} ', end='')   # 0: a 1: b 2: c

 

두 배열 tuple로 묶기

numbers = [1, 2, 3]
letters = ["A", "B", "C"]
for pair in zip(numbers, letters):
    print(pair, end='')     # (1, 'A')(2, 'B')(3, 'C')

 

이진 탐색

from bisect import bisect_left, bisect_right
numbers = [1, 4, 6, 8, 11, 19]
target = 11
print(bisect_left(numbers, target))     # 4
print(bisect_right(numbers, target))     # 5