[Pythhon] AtCoder 버전!개미책 정진 일기

서문


파이톤 정진 건차 선생AtCoder Edition!개미책 (초급편)의 일기다.
매일 정진하다.
더 좋은 코드 작성법이 있다면 언제든지 의견을 제시하세요.
START(2020/12/04)

1-6 가볍게 몸 풀기


예제 1-6-1 삼각형


[AtCoder의 클래스 문제!]


· ARC004A 2시간 최대 거리


【해답례】
arc004a.py
import math
N=int(input())
X=[]
Y=[]
for i in range(N):
    x,y=input().split()
    X.append(int(x))
    Y.append(int(y))

ans = 0
for j in range(N):
    for t in range(N):
        if math.sqrt(pow(X[t] - X[j],2) + pow(Y[t] - Y[j],2)) > ans:
            ans = math.sqrt(pow(X[t] - X[j],2) + pow(Y[t] - Y[j],2))

print(ans)
[소감]
압도적인 전탐색.제곱근 sqrt,멱pow 대응.
더 간결한 내용을 입력할 수 있습니다.

・ABC 051B Sum of There Integers


[오답]
k,s = map(int,input().split())

ans = 0
for x in range(k + 1):
    for y in range(k + 1):
        for z in range(k + 1):
            if x + y + z == s:
                ans += 1
print(ans)

시간이 모자라다.해설부터 계산량이 O(K^3)이기 때문에 안 된다.그래서 나는 아래의 내용을 개작했다.
【해답례】
abc051b.py
k,s = map(int,input().split())

ans = 0
for x in range(k + 1):
    for y in range(k + 1):
        z = s - x - y
        if 0 <= z <= k:
            ans += 1
print(ans)
[소감]
간단하게 X+Y+Z=S에서 Z=S-X-Y로 결정되기 때문에 X, Y가 정하는 시점 Z도 정해져 있어 더블 루프를 사용할 수 있다.계산량도 O(K^2)로 줄여서 해결했다.

ARC061C 많은 공식


arc061c.py
s = input()
n = len(s)

ans = 0

for bit in range(1 << (n - 1)): #左へビットシフト
    #各場合で式fを生成
    f = s[0]
    for i in range(n - 1):
        if bit & (1 << i):
            f += "+"
        f += s[i + 1]
    ans += sum(map(int, f.split("+")))

print(ans)
[소감]
모두는bit 전체 탐색을 가장 좋아한다.다음 기사를 참고하였습니다.아직 익숙하지 않은 느낌이 많아서 연습을 쌓고 싶어요.
【참고】
bit 전체 탐색
(to be continue... 할까요??)

좋은 웹페이지 즐겨찾기