반응형

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

 

4153번: 직각삼각형

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

www.acmicpc.net

문제

과거 이집트인들은 각 변들의 길이가 3, 4, 5인 삼각형이 직각 삼각형인것을 알아냈다. 주어진 세변의 길이로 삼각형이 직각인지 아닌지 구분하시오.

입력

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

출력

각 입력에 대해 직각 삼각형이 맞다면 "right", 아니라면 "wrong"을 출력한다.


# 직각삼각형

while True:
    num = list(map(int,input().split()))
    if sum(num) == 0:
        break
    max_num = max(num)

    add = 0

    for i in range(3):
        if num[i] != max_num:
            add += num[i]*num[i]


    if max_num*max_num == add:
        print('right')
    else:
        print('wrong')

피타고라스의 정의를 사용해서 문제를 풀어야한다!

가장 큰 숫자를 미리 변수에 넣어두고 나머지 두 숫자를 제곱해서 더한 후

숫자가 같으면 right 다르면 wrong을 출력하도록 하였다.

반응형
반응형

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

 

3009번: 네 번째 점

세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.

www.acmicpc.net

문제

세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.

입력

세 점의 좌표가 한 줄에 하나씩 주어진다. 좌표는 1보다 크거나 같고, 1000보다 작거나 같은 정수이다.

출력

직사각형의 네 번째 점의 좌표를 출력한다.


# 네 번째 점

dotx_1, doty_1 = map(int,input().split())
dotx_2, doty_2 = map(int,input().split())
dotx_3, doty_3 = map(int,input().split())

x = [dotx_1, dotx_2, dotx_3]
y = [doty_1, doty_2, doty_3]

for i in range(3):
    if x.count(x[i]) == 1:
        print(x[i], end =' ')
for i in range(3):
    if y.count(y[i]) == 1:
        print(y[i])

처음에는 빈 리스트를 만들고 첫번째 점을 넣은 후 같은 값이 들어오면 해당값을 빼고 다른 값이 들어오면 해당값을 리스트에 더한 후 최후에 남은 값을 출력하도록 짜려고 했는데

그냥 리스트에 다 넣고 개수가 하나인 것을 출력하는게 훨씬 쉽다는걸 너무 늦게 알았다.

반응형
반응형

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

 

1085번: 직사각형에서 탈출

한수는 지금 (x, y)에 있다. 직사각형은 각 변이 좌표축에 평행하고, 왼쪽 아래 꼭짓점은 (0, 0), 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램

www.acmicpc.net

문제

한수는 지금 (x, y)에 있다. 직사각형은 각 변이 좌표축에 평행하고, 왼쪽 아래 꼭짓점은 (0, 0), 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 x, y, w, h가 주어진다.

출력

첫째 줄에 문제의 정답을 출력한다.


# 직사각형에서 탈출

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

min =1000

if x < min:
    min = x
if y < min:
    min = y
if w - x < min:
    min = w-x
if h - y < min:
    min = h-y

print(min)

대각선 길이를 고려해 줄 필요가 없으므로 -만으로 단순하게 표현할 수 있었다

첫 min값이 1000인 이유는 제한사항이 1<= w, h <= 1,000이라서!

 

기본 수학2의 소수문제가 점점 풀기 어려워져서

일단 소수로부터 탈출했다.

내가 풀기에 어렵지 않은 알고리즘을 풀면 스트레스가 풀리는 기분이다.

반응형

+ Recent posts