AtCoder 콘테스트용 정리【Python】
AtCoder
이 기사의 목적
【수시 갱신 예정】
목차
1. 입력편
appendix[해답 용지]
2. 리스트편
3. 수치편
4. 쓰기 편
5. 출력편
입력편
1.0 입력용
import sys
input = sys.stdin.readline
이제 input()
1.1 단일 입력
n=int(input())
이 때 입력
1.2 다중 입력
n,m=(int(x) for x in input().split())
N K와 같은 경우 입력
1.3 목록 입력
l = [int(i) for i in input().split()]
h1 h2 ... hN 같은 때 사용
j1
j2
.
.
.
jN
같이 세로에 늘어서 있으면
j=[]
for _ in range(n):
j.append(input())
appendix
답변 용지
contest_base.pyimport sys
import itertools
input = sys.stdin.readline
n=int(input())
n,m=(int(x) for x in input().split())
l = [int(i) for i in input().split()]
print()
기본적으로 이것을 복사하여 사용합니다.
필요한 입력만 남겨두고 나중에 지우기
리스트편
2.1 빈 리스트, 요소가 0만의 리스트
l=[]
l=[0]*n
2.2 목록에 요소 추가
l.append(n)
2.3 중복 없음 목록
l=set(l)
2.4 목록을 큰 순서 (내림차순)로 정렬
l.sort(reverse=True)
2.5 우선 순위 큐
예로서, 【「리스트 a의 최대치를 1/2로 리스트 a에 되돌린다」를 m회 반복한다】
import heapq
a = list(map(lambda x: int(x)*(-1), input().split()))
heapq.heapify(a)
for _ in range(m):
temp = heapq.heappop(a)
heapq.heappush(a, (-1)*(-temp//2))
우선 순위가 지정된 대기열을 사용하지 않는 경우 :
a = [int(i) for i in input().split()]
a.sort(reverse=True)
for _ in range(m):
a[0]=a[0]//2
a.sort(reverse=True)
이 경우 일일이 모든 요소를 재정렬하기 때문에 계산량이 방대해져 TLE가 된다
수치편
3.1 소인수 분해 목록 열거
def factorize(n):
b = 2
fct = []
while b * b <= n:
while n % b == 0:
n //= b
fct.append(b)
b = b + 1
if n > 1:
fct.append(n)
return fct
3.2 우기 판단 : 짝수 True 홀수 False
n%2==0
3.3 최대 공약수, 최소 공배수
n과 m의 최대 공약수 ans를 구한다.
import math
ans=math.gcd(n,m)
최소 공배수는 gcd를 사용하여
def lcm(n,m):
return (n*m)//math.gcd(n,m)
3.4 약수 열거, 공약 수 열거
def make_divisors(n):
divisors = []
for i in range(1, int(n**0.5)+1):
if n % i == 0:
divisors.append(i)
if i != n // i:
divisors.append(n//i)
divisors.sort()
return divisors
공약수열거는 make_divisors
ansdiv=set(make_divisors(n))&set(make_divisors(m))
쓰기 편
4.1 이중 루프를 한 줄로
import itertools
for i,j in itertools.product(range(n), range(n)):
pass
계산량은 변하지 않기 때문에 경쟁 프로적으로 필요하지 않습니까?
4.2 목록 내 조합
import itertools
itertools.combinations(list,n)
계산량이 많기 때문에 주의
출력편
5.1 공간 구분 출력
print(s,end=' ')
이런 출력이 요구될 때 사용
대체로 루프에 넣어
ToDo
import sys
input = sys.stdin.readline
n=int(input())
n,m=(int(x) for x in input().split())
l = [int(i) for i in input().split()]
j=[]
for _ in range(n):
j.append(input())
import sys
import itertools
input = sys.stdin.readline
n=int(input())
n,m=(int(x) for x in input().split())
l = [int(i) for i in input().split()]
print()
2.1 빈 리스트, 요소가 0만의 리스트
l=[]
l=[0]*n
2.2 목록에 요소 추가
l.append(n)
2.3 중복 없음 목록
l=set(l)
2.4 목록을 큰 순서 (내림차순)로 정렬
l.sort(reverse=True)
2.5 우선 순위 큐
예로서, 【「리스트 a의 최대치를 1/2로 리스트 a에 되돌린다」를 m회 반복한다】
import heapq
a = list(map(lambda x: int(x)*(-1), input().split()))
heapq.heapify(a)
for _ in range(m):
temp = heapq.heappop(a)
heapq.heappush(a, (-1)*(-temp//2))
우선 순위가 지정된 대기열을 사용하지 않는 경우 :
a = [int(i) for i in input().split()]
a.sort(reverse=True)
for _ in range(m):
a[0]=a[0]//2
a.sort(reverse=True)
이 경우 일일이 모든 요소를 재정렬하기 때문에 계산량이 방대해져 TLE가 된다
수치편
3.1 소인수 분해 목록 열거
def factorize(n):
b = 2
fct = []
while b * b <= n:
while n % b == 0:
n //= b
fct.append(b)
b = b + 1
if n > 1:
fct.append(n)
return fct
3.2 우기 판단 : 짝수 True 홀수 False
n%2==0
3.3 최대 공약수, 최소 공배수
n과 m의 최대 공약수 ans를 구한다.
import math
ans=math.gcd(n,m)
최소 공배수는 gcd를 사용하여
def lcm(n,m):
return (n*m)//math.gcd(n,m)
3.4 약수 열거, 공약 수 열거
def make_divisors(n):
divisors = []
for i in range(1, int(n**0.5)+1):
if n % i == 0:
divisors.append(i)
if i != n // i:
divisors.append(n//i)
divisors.sort()
return divisors
공약수열거는 make_divisors
ansdiv=set(make_divisors(n))&set(make_divisors(m))
쓰기 편
4.1 이중 루프를 한 줄로
import itertools
for i,j in itertools.product(range(n), range(n)):
pass
계산량은 변하지 않기 때문에 경쟁 프로적으로 필요하지 않습니까?
4.2 목록 내 조합
import itertools
itertools.combinations(list,n)
계산량이 많기 때문에 주의
출력편
5.1 공간 구분 출력
print(s,end=' ')
이런 출력이 요구될 때 사용
대체로 루프에 넣어
ToDo
def factorize(n):
b = 2
fct = []
while b * b <= n:
while n % b == 0:
n //= b
fct.append(b)
b = b + 1
if n > 1:
fct.append(n)
return fct
n%2==0
import math
ans=math.gcd(n,m)
def lcm(n,m):
return (n*m)//math.gcd(n,m)
def make_divisors(n):
divisors = []
for i in range(1, int(n**0.5)+1):
if n % i == 0:
divisors.append(i)
if i != n // i:
divisors.append(n//i)
divisors.sort()
return divisors
ansdiv=set(make_divisors(n))&set(make_divisors(m))
4.1 이중 루프를 한 줄로
import itertools
for i,j in itertools.product(range(n), range(n)):
pass
계산량은 변하지 않기 때문에 경쟁 프로적으로 필요하지 않습니까?
4.2 목록 내 조합
import itertools
itertools.combinations(list,n)
계산량이 많기 때문에 주의
출력편
5.1 공간 구분 출력
print(s,end=' ')
이런 출력이 요구될 때 사용
대체로 루프에 넣어
ToDo
print(s,end=' ')
github
htps : // 기주 b. 코 m / 코바유 0902 아 rt / 아 t 코로 r
Reference
이 문제에 관하여(AtCoder 콘테스트용 정리【Python】), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kobayu0902/items/1e4007102a7a564f3b58텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)