728x90
반응형

문제:

김탑은 TV를 사러 인터넷 쇼핑몰에 들어갔다. 쇼핑을 하던 중에, TV의 크기는 그 TV의 대각선 길이로 나타낸다는 것을 알았다. 하지만, 김탑은 대각선의 길이가 같다고 해도, 실제 TV의 크기는 다를 수도 있다는 사실에 직접 TV를 보러갈걸 왜 인터넷 쇼핑을 대각선의 길이만 보고있는지 후회하고 있었다.

인터넷 쇼핑몰 관리자에게 이메일을 보내서 실제 높이와 실제 너비를 보내달라고 했지만, 관리자는 실제 높이와 실제 너비를 보내지 않고 그것의 비용을 보내왔다.

TV의 대각선 길이와, 높이 너비의 비율이 주어졌을 때, 실제 높이와 너비의 길이를 출력하는 프로그램을 작성하시오.

입력:

첫째 줄에 TV의 대각선 길이, TV의 높이 비율, TV의 너비 비율이 공백 한 칸을 사이에 두고 주어진다. 대각선 길이는 5보다 크거나 같고, 1,000보다 작거나 같은 자연수, 높이 비율은 1보다 크거나 같고, 99보다 작거나 같은 자연수 너비 비율은 2보다 크거나 같고, 100보다 작거나 같은 자연수이다. 너비 비율은 항상 높이 비율보다 크다.

출력:

첫째 줄에 TV의 높이와 TV의 너비를 공백 한 칸을 이용해서 구분지은 후 출력한다. 만약 실제 TV의 높이나 너비가 소수점이 나올 경우에는 그 수보다 작으면서 가장 큰 정수로 출력한다. (예)1.7->1

풀이방법:

높이와 너비의 비율이 주어졌으므로 이들의 비율 1에 해당하는 r을 구하면 된다. 이 r은 대각선의 길이로 구할 수 있게 된다. 너비를 x, 높이를 y라고 했을 때, x2+y2=기울기2 를 만족하고, x:y=a:b 의 비율을 만족시키는 r이 있다고 하자.

(r은 x=a*r, y=b*r 을 만족한다.)

그러면 다음을 만족한다.

a2r2+b2r2=기울기2

따라서 r로 묶어서 계산할 수 있고, 최종적으론 a*r, b*r을 출력하면 된다.

1
2
3
4
5
6
7
import math
 
d,x,y=map(int,input().split())
 
r=math.sqrt((d*d)/(x*x+y*y))
 
print(int(r*x),int(r*y))
cs

문제링크:

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

 

1297번: TV 크기

첫째 줄에 TV의 대각선 길이, TV의 높이 비율, TV의 너비 비율이 공백 한 칸을 사이에 두고 주어진다. 대각선 길이는 5보다 크거나 같고, 1,000보다 작거나 같은 자연수, 높이 비율은 1보다 크거나 같고, 99보다 작거나 같은 자연수 너비 비율은 2보다 크거나 같고, 100보다 작거나 같은 자연수이다. 너비 비율은 항상 높이 비율보다 크다.

www.acmicpc.net

 

728x90
반응형

'Algorithm > Python' 카테고리의 다른 글

[BOJ]1431. 시리얼 번호  (1) 2020.02.13
[BOJ]6603. 로또  (0) 2020.02.11
[BOJ]10026. 적록색약  (0) 2020.02.04
[Programmers]Lv 4. 카드 게임  (0) 2020.01.23
[BOJ]1012. 유기농 배추  (0) 2020.01.21
728x90
반응형

문제:

상근이는 창고에서 링 N개를 발견했다. 상근이는 각각의 링이 앞에 있는 링과 뒤에 있는 링과 접하도록 바닥에 내려놓았다. 

상근이는 첫 번째 링을 돌리기 시작했고, 나머지 링도 같이 돌아간다는 사실을 발견했다. 나머지 링은 첫 번째 링보다 빠르게 돌아가기도 했고, 느리게 돌아가기도 했다. 이렇게 링을 돌리다 보니 첫 번째 링을 한 바퀴 돌리면, 나머지 링은 몇 바퀴 도는지 궁금해졌다.

링의 반지름이 주어진다. 이때, 첫 번째 링을 한 바퀴 돌리면, 나머지 링은 몇 바퀴 돌아가는지 구하는 프로그램을 작성하시오,

입력:

첫째 줄에 링의 개수 N이 주어진다. (3<=N<=100)

다음 줄에는 링의 반지름이 상근이가 바닥에 놓은 순서대로 주어진다. 반지름은 1과 1000을 포함하는 사이의 자연수이다.

출력:

출력은 총 N-1 줄을 해야 한다. 첫 번째 링을 제외한 각각의 링에 대해서, 첫 번째 링을 한 바퀴 돌리면 그 링은 몇 바퀴 도는지 기약 분수 형태 A/B로 출력한다.

풀이 방법:

 모든 링은 첫 번째 링의 크기에 따라서 돌아가는 횟수가 정해지게 된다. 예제의 경우로 보면 첫 번째 링이 12이므로 두 번째 링은 12/3 인 4이고, 세 번째 링은 12/8=3/2, 마지막 링은 12/4 이므로 3이 되게 된다. 

python에서는 이러한 분수 약분 및 계산을 해주는 fraction이라는 모듈이 있다. 따라서 첫 번째 링을 기준으로 나머지 링에 대해 분수형태로 만들면 된다. 하지만 정수인 경우에도 분수 형태로 만들어 줘야 하는 작업이 필요하므로, 따로 분류해서 만들어주도록 한다.

1
2
3
4
5
6
7
8
9
from fractions import Fraction
a=int(input())
number=list(map(int,input().split()))
for i in range(1,len(number)):
    result=Fraction(number[0],number[i])
    if int(result)==result:
        print(str(result)+"/"+"1")
    else:
        print(str(result))
cs


728x90
반응형

'Algorithm > Python' 카테고리의 다른 글

[BOJ]1547. 공  (0) 2019.05.15
[BOJ]10253. 헨리  (0) 2019.05.14
[BOJ]2591. 이항 쇼다운  (0) 2019.05.12
[BOJ]2407. 조합  (0) 2019.05.11
[BOJ]1676. 팩토리얼 0의 개수  (0) 2019.05.10

+ Recent posts