[백준] 수학 2 두번째

ddalkigum·2020년 12월 2일
2

알고리즘

목록 보기
5/15
post-thumbnail

백준 1929 소수 구하기

문제

https://www.acmicpc.net/problem/1929

풀이

import sys

N, M = map(int, sys.stdin.readline().split())
arr = list(range(N, M + 1))


def prime_number(a):
    if a == 1:
        return False
    else:
        for i in range(2, int(a ** 0.5) + 1):
            if a % i == 0:
                return False
        return True


for i in arr:
    if prime_number(i):
        sys.stdout.write(str(i) + "\n")

시간초과에서 벗어나지 못하고 다른분들의 해설을 참고했습니다.

소수를 구하는데 있어서 숫자의 제곱근을 가지고 실행을 하게되면
그만큼 돌아가는 수가 줄어들어 시간초과에서 벗어날 수 있다고 하네요 ...

소수를 구하는 방법에 대해 새로운 걸 배웠습니다.
전혀 생각도 못했던...


백준 4948 베르트랑 공준

문제

https://www.acmicpc.net/problem/4948

풀이

def prime_number(number):
    if number == 1:
        return False
    for i in range(2, int(number ** 0.5) + 1):
        if number % i == 0:
            return False
    return True

arr = []

for k in range(2, 123456 * 2):
    if prime_number(k):
        arr.append(k)

num = int(input())

while num != 0:
    count = 0
    for j in arr:
        if j > num and j <= 2 * num:
            count += 1
    print(count)
    num = int(input())

이 문제는 자꾸 답이 틀려서 왜 그러지 생각하다가
N 부터 2N 까지의 숫자를 구하는거에서 힌트를 얻었습니다.

소수를 123456 까지만 구해서 삽질을 너무 많이 했네요 😂😂

2N 까지 구하게 되면 소수를 담고있는 리스트에 들어가는 숫자도
2배 큰 숫자를 넣어서 구해줘야 count가 정상적으로 반환되기 때문에
모든 소수를 구하고 그중에 범위 안에있는 숫자들을 골라서 카운트 했습니다.


백준 1085 직사각형에서 탈출

문제

https://www.acmicpc.net/problem/1085

풀이

x, y, w, h = map(int, input().split())

value_arr = [h - y, w - x, y - 0, x - 0]
print(min(value_arr))

난이도가 급하락해서 이렇게 푸는게 맞나 싶었던 문제


백준 3009 네 번째 점

문제

https://www.acmicpc.net/problem/3009

풀이

arr = []
x_list = []
y_list = []

for _ in range(3):
    arr.append(list(map(int, input().split())))

for i in range(len(arr)):
    x_list.append(arr[i][0])
    y_list.append(arr[i][1])

for j in x_list:
    if x_list.count(j) == 1:
        x = j
for k in y_list:
    if y_list.count(k) == 1:
        y = k

print(x, y)

이 문제는 정답비율이 높아서 쉽겠다 생각했는데
생각보다 오래 걸렸다

규칙을 못찾아서 ..😖😖😖

  1. 같은 길이인 변이 2개씩이면 되나 ?

정사각형이 있어서 패스

  1. 제일 큰 숫자에서 제일 작은숫자를 비교해서...??

그러기엔 점 위치 경우의 수가 4가지라 패스


백준 4153 직각삼각형

문제

https://www.acmicpc.net/problem/4153

풀이

a, b, c = map(int, input().split())

while a != 0 or b != 0 or c != 0:
    arr = list([a, b, c])
    max_number = max(arr)
    arr.remove(max_number)

    if max_number ** 2 == arr[0] ** 2 + arr[1] ** 2:
        print("right")
    else:
        print("wrong")
    a, b, c = map(int, input().split())

고등학교때 엿나? 중학교때 엿나

직각삼각형 변 길이 구하는게 생각나서 금방 풀었던 문제


백준 1002 터렛

문제

https://www.acmicpc.net/problem/1002

풀이

import math

n = int(input())

for _ in range(n):
    jox, bax, jr, joy, bay, br = map(int, input().split())
    between = math.sqrt((jox- bax)**2 + (joy- bay)**2)
 
    if between == 0 and jr == br :
        print(-1)
    elif abs(jr-br) == distance or jr + br == distance: 
        print(1)
    elif abs(jr-br) < distance < (jr+br) : 
        print(2)
    else:
        print(0)

이 문제는 정답 확률이 낮은 이유가 문제가 더러워서 그런게 아닐까 싶다

이 문제는 수학보다는 if 문에 있어야 할 문제인 것같다.

위에 풀었던 직각 삼각형문제를 이용해서 두 친구 사이의 거리를 구하고
주어진 r을 반지름으로 하는 원을 만들어서 구하는 방법이다.

겹치게되는 점의수는 0, 1, 2, 완전히 같은 원에 같은 위치
이렇게 4가지인데 if문으로 각각의 상황을 구해주면 된다.

profile
딸기검 -본캐🐒 , 김준형 - 현실 본캐 🐒

0개의 댓글