반응형

 

 

 

이게 웬 난리.....

 

 

www.acmicpc.net/problem/1002

 

1002번: 터렛

각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.

www.acmicpc.net

 

 

파이썬 코드

n = (int)(input())

for i in range(n):
    x1, y1, r1, x2, y2, r2 = map(int, input().split())

    # 피타고라스 거리 : y
    y = ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5
    rs = r1 + r2
    rm = abs(r1 - r2)

    if y == 0:
        if r1 == r2:
            print(-1)
        else:
            print(0)
    else:
        if rs == y or rm == y:
            print(1)
        elif rs > y and rm < y:
            print(2)
        else:
            print(0)

 

두 점이 같고, 거리도 같으면 완전히 원이 겹치기 때문에 -1

두 점이 같고, 거리는 다르면 겹치는 점이 하나도 없기 때문에 0

 

두 거리를 합한 값이 두 점 사이의 거리와 같거나(두 원이 맞닿아 만남),

두 거리의 차이가 두 점 사이의 거리와 같으면(한 원이 다른 원을 포함하면서 한 점에서 겹침)

한 점에서 만나기 때문에 1

 

두 거리의 합이 두 점 사이의 거리보다 크면서, 두 거리의 차이가 두 점 사이의 거리보다 작으면

두 점에서 만나기 때문에 2

=> 여기서 뒤에 조건을 설정해주지 않아 계속 틀렸는데요 ㅠㅠ

만약 두 거리의 차이가 두 점 사이의 거리보다 크면 한 원이 다른 원을 완전히 포함하기 때문에 만나는 점이 없습니다.

 

그 이외에서는 모두 0

 

 

 

 

새롭게 알게된 사실 )

제곱근 구할 때, 굳이 import math해서 구하지 않아도 ** 0.5 해주면 구할 수 있습니다..!

 

 

 

 

 

 

 

반응형
반응형

 

Asterisk

우리가 흔히 알고 있는 * 을 의미한다.

단순 곱셈, 제곱 연산, 가변 인자 활용 등 다양하게 사용된다.

 

가변 인자 활용 => 변수 여러 개를 packing하여 한번에 넘겨줄 때

def astarick_test(a, *args):
    print(a, args)
    print(type(args))

astarick_test(1,2,3,4,5,6)
def astarick_test(a, *args):
    print(a, args)
    print(type(args))

astarick_test(1,*(2,3,4,5,6))
1 (2, 3, 4, 5, 6)
<class 'tuple'>

 

*(2,3,4,5,6) = 2,3,4,5,6 이기 때문이다.

 

 

 

키, 밸류 값을 한번에 넘겨줄 때 => ** 을 쓴다.

def astarick_test(a, **karg):
    print(a, karg)
    print(type(karg))

astarick_test(1, b=2, c=3, d=4, e=5)
1 {'b': 2, 'c': 3, 'd': 4, 'e': 5}
<class 'dict'>

 

 

 

변수 여러 개를 unpacking할 때 

def astarick_test(a, args):
    print(a, *args)     # unpacking
    print(type(args))

astarick_test(1,(2,3,4,5,6))
1 2 3 4 5 6
<class 'tuple'>

 

 

 

 

이미 packing 되어있는 튜플에 asterisk를 하면 )

def asterisk_test(a, *args):
    print(a, args[0])
    print(type(args))

asterisk_test(1, (2, 3, 4, 5, 6))
1 (2, 3, 4, 5, 6)
<class 'tuple'>

 

args = ((2, 3, 4, 5, 6),) 가 된다. 따라서 args의 첫 번째 인덱스만 꺼내 주어야 한다.

 

 

 

 

일반적인 unpacking

a, b, c = ([1,2],[3,4],[5,6])
print(a,b,c)

data = ([1,2],[3,4],[5,6])      #unpacking
print(*data)
[1, 2] [3, 4] [5, 6]
[1, 2] [3, 4] [5, 6]

 

def asterick_test(a,b,c,d):
    print(a,b,c,d)

data = {"b":1,"c":2,"d":3}
asterick_test(10, **data)
10 1 2 3

 

 

for data in zip(*([1,2],[3,4],[5,6])):
    print(sum(data))
9
12

 

 

반응형

'AI > python' 카테고리의 다른 글

Pythonic Code - Set()  (0) 2021.01.15
Pythonic Code - Deque, Ordered Dict, Counter  (0) 2021.01.12
Pythonic Code - Lambda & MapReduce  (0) 2021.01.11
Pythonic Code - Enumerate, Zip  (0) 2021.01.10
Pythonic Code - List Comprehension  (0) 2021.01.10
반응형

 

 

 

 

 

Lambda는 함수를 다르게 쓴 것이라고 보면 된다.

f = lambda x, y: x + y
print(f(1,2))

f = lambda x: x ** 2
print(f(3))

f = lambda x: x / 2
print(f(4))

 

 

꼭 함수의 이름을 지정하지 않고도 사용할 수 있다.

print((lambda x: x+1)(5))

 

 

 

lambda에 필터 껴주기 

=> lambda에서 if 문 쓸 때에는 꼭 else도 써 주어야 한다.

# lambda에 필터 껴주기
a = list(map(lambda x: x ** 2 if x % 2 == 0 else x, ex))
print(a)
[1, 4, 3, 16, 5]

 

 

 

python 3에서는 list comprehension으로 편하게 쓸 수 있기 때문에 lambda의 사용이 권장되지 않는다.

b = [x ** 2 for x in ex]
print(b)
[1, 4, 9, 16, 25]

 

 

Reduce 

: 값을 하나하나 꺼내면서 수식 처리를 해 주는 것이다.

 

예시 ) 값을 하나하나 꺼내면서 더해준다.

# Reduce
from functools import reduce
print(reduce(lambda x,y: x+y, [1,2,3,4,5]))
15

 

 

 

예시 ) 값을 하나하나 꺼내면서 곱해준다.

def factorial(n):
    print(reduce(lambda x,y: x*y, range(1,n+1)))

factorial(4)
24

 

 

 

 

 

 

 

 

 

반응형

'AI > python' 카테고리의 다른 글

Pythonic Code - Deque, Ordered Dict, Counter  (0) 2021.01.12
Pythonic Code - asterisk  (0) 2021.01.12
Pythonic Code - Enumerate, Zip  (0) 2021.01.10
Pythonic Code - List Comprehension  (0) 2021.01.10
파이썬 기초 끝 ! + map 함수  (0) 2021.01.10
반응형

 

 

 

 

www.acmicpc.net/problem/4153

 

4153번: 직각삼각형

입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.

www.acmicpc.net

 

 

 

세 수 중 가장 큰 값을 maxInt에 넣어놓고 리스트에서 그 값을 뺀다.

나머지 두 수의 제곱의 합이 maxInt와 같으면 right, 다르면 wrong을 출력한다.

 

while(True):
    listA = list(map(int, input().split()))

    if sum(listA) == 0:
        break

    maxInt = max(listA)
    listA.remove(maxInt)

    if listA[0] ** 2 + listA[1] ** 2 == maxInt ** 2:
        print('right')
    else:
        print("wrong")

 

 

 

새로 알게된 사실 )

list 이름을 list로 하면 안된다 ! 당연히 안 되는 건데 왜 썼는지 모르겠다 ㅋㅋ

그리고 max(list), sum(list) !!

 

 

 

 

 

반응형
반응형

 

 

 

 

www.acmicpc.net/problem/13305

 

13305번: 주유소

표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1

www.acmicpc.net

 

 

그리디 알고리즘으로 주유소를 지나면서

가장 주유비가 작은 비용으로 계속 더하는 방식으로 풀었습니다.

 

import sys

min = sys.maxsize
n = (int)(input())

# list에 값 넣기
listDis = list(map(int,input().split()))
listCost = list(map(int,input().split()))

# 도시를 다니면서 비용을 더하기
result = 0
for i in range(n-1):
    if(i == 0):
        result += listDis[i] * listCost[i]
        min = listCost[i]
    else:
        if listCost[i] < min:
            min = listCost[i]
        result += listDis[i] * min

print(result)

 

 

새롭게 알게된 문법 )

리스트에 값을 입력받아서 바로 넣기

listDis = list(map(int,input().split()))
listCost = list(map(int,input().split()))

 

 

 

 

 

반응형
반응형

 

 

 

sort vs sorted

sort()는 one dimensional list에서 많이 쓰이고,

sorted()는 여러 차원이나 조건들을 설정할 때 많이 쓰인다.

 

sort()

오름차순

a = [1,4,2,5,3]
print(a.sort())
[1,2,3,4,5]

 

내림차순

a = [1,4,2,5,3]
print(a.sort(reverse=True))
[5,4,3,2,1]

 

 

 

 

sorted()

>>> students = [
        ('홍길동', 3.9, 2016303),
        ('김철수', 3.0, 2016302),
        ('최자영', 4.3, 2016301),
]

 

오름차순(세 번째 값을 기준으로)

>>> sorted(students, key=lambda student: student[2])
[('최자영', 4.3, 2016301), ('김철수', 3.0, 2016302), ('홍길동', 3.9, 2016303)]

 

내림차순

>>> sorted(students, key=lambda student: -student[2])
[('홍길동', 3.9, 2016303), ('김철수', 3.0, 2016302), ('최자영', 4.3, 2016301)]

 

 

 

 

만약 세 번째 값은 오름차순, 두 번째 값은 내림차순으로 정렬하고 싶다면?

>>> sorted(students, key=lambda student: (student[2],-student[1]))
[('최자영', 4.3, 2016301), ('김철수', 3.0, 2016302), ('홍길동', 3.9, 2016303)]

 

 

 

반응형

+ Recent posts