7/ 04 파이썬 공부
1. 백준 24365 ПЧЕЛИЧКАТА МАЯ
На три цветя, подредени в редица на разстояние през 1 метър, са кацнали пчели. На лявото цвете пчелите не са повече от тези на средното, а на средното не са повече от пчелите, кацнали на дясното цвете.
Ръководител на всички е пчеличката Мая. Тя пресметнала, че ако определи някои от пчелите да се преместят, то на трите цветя ще има по равен брой пчели. За съжаление, работливите пчели трябва да пестят силите си. Затова Мая иска първо да изчисли минималния брой метри, които може да се прелетят и след това вече ще определи коя пчела на кое цвете да се премести.
За да помогнете на пчеличката Мая, напишете програма bee, която извежда този минимален брой метри.
От първия ред на стандартния вход се въвеждат три цели числа А, В и C - брой на пчелите съответно на лявото, средното и дясното цвете. Числата са разделени с по един интервал.
На един ред на стандартния изход програмата трябва да изведе едно цяло число – минималния общ брой прелетени метри от пчелите.
>>>해석
꿀벌이 각각 1m 간격으로 떨어진 꽃 세 송이에 앉아있습니다. 왼쪽 꽃에 앉은 벌의 수는 가운데 꽃에 앉은 벌의 수보다 적고, 가운데 꽃에 앉은 벌의 수는 오른쪽 꽃에 앉은 벌의 수보다 적습니다.
마야는 여왕벌입니다. 그녀는 몇 마리의 벌을 움직인다면, 세 꽃에 똑같은 숫자의 벌이 앉게 됨을 발견했습니다. 꿀벌은 일을 하려면 에너지를 아껴야 하기에, 마야는 목표를 달성하기 위해 꿀벌이 날아야 하는 최소 거리의 합을 계산한 후 그에 맞춰 벌을 어느 꽃으로 이동할지 정하려 합니다.
여왕벌 마야를 도와 꿀벌이 날아야 하는 최소 거리의 합을 출력하는 프로그램을 작성합시다.
표준 입력의 첫 줄에 각각 왼쪽, 가운데, 오른쪽 꽃에 있는 벌의 수를 나타내는 세 정수 A, B, C가 주어집니다. 정수는 공백으로 나뉘어져 있습니다.
프로그램은 하나의 줄에 꿀벌이 날아야 하는 최소 거리의 합을 의미하는 정수 하나를 출력해야 합니다.
>>>코드
a, b, c = map(int, input().split())
print(c-a)
2. 백준 11282 한글
한글의 각 글자는 초성, 중성, 종성으로 이루어져 있고, 이 세 가지를 모아써서 한 글자를 나타낸다.
초성은 ㄱ, ㄲ, ㄴ, ㄷ, ㄸ, ㄹ, ㅁ, ㅂ, ㅃ, ㅅ, ㅆ, ㅇ, ㅈ, ㅉ, ㅊ, ㅋ, ㅌ, ㅍ, ㅎ로 총 19개가 있고, 중성은 ㅏ, ㅐ, ㅑ, ㅒ, ㅓ, ㅔ, ㅕ ㅖ, ㅗ, ㅘ, ㅙ, ㅚ, ㅛ, ㅜ, ㅝ, ㅞ, ㅟ, ㅠ, ㅡ, ㅢ, ㅣ로 총 21개, 종성은 없음, ㄱ, ㄲ, ㄳ, ㄴ, ㄵ, ㄶ, ㄷ, ㄹ, ㄺ, ㄻ, ㄼ, ㄽ, ㄾ, ㄿ, ㅀ, ㅁ, ㅂ, ㅄ, ㅅ, ㅆ, ㅇ, ㅈ, ㅊ, ㅋ, ㅌ, ㅍ, ㅎ로 총 28개가 있다.
첫 번째 글자는 초성에서 ㄱ, 중성에서 ㅏ, 종성에서 없음을 합친 "가"가 되고, 두 번째 글자는 초성에서 ㄱ, 중성에서 ㅏ, 종성에서 ㄱ을 합친 "각"이 된다. 마지막 글자는 초성에서 ㅎ, 중성에서 ㅣ, 종성에서 ㅎ를 합친 "힣"이 된다.
초성과 중성, 그리고 종성을 합쳐서 만들 수 있는 글자의 개수는 총 19*21*28 = 11,172개가 된다.
입력으로 N이 주어졌을 때, N번째 글자를 구하는 프로그램을 작성하시오.
첫째 줄에 N(1 ≤ N ≤ 11,172)이 주어진다.
첫째 줄에 N번째 글자를 출력한다. 문자열의 인코딩은 UTF-8을 사용해야 한다.
>>>코드
print(chr(44031 + int(input())))
3. 백준 11283 한글 2
한글의 각 글자는 초성, 중성, 종성으로 이루어져 있고, 이 세 가지를 모아써서 한 글자를 나타낸다.
초성은 ㄱ, ㄲ, ㄴ, ㄷ, ㄸ, ㄹ, ㅁ, ㅂ, ㅃ, ㅅ, ㅆ, ㅇ, ㅈ, ㅉ, ㅊ, ㅋ, ㅌ, ㅍ, ㅎ로 총 19개가 있고, 중성은 ㅏ, ㅐ, ㅑ, ㅒ, ㅓ, ㅔ, ㅕ ㅖ, ㅗ, ㅘ, ㅙ, ㅚ, ㅛ, ㅜ, ㅝ, ㅞ, ㅟ, ㅠ, ㅡ, ㅢ, ㅣ로 총 21개, 종성은 없음, ㄱ, ㄲ, ㄳ, ㄴ, ㄵ, ㄶ, ㄷ, ㄹ, ㄺ, ㄻ, ㄼ, ㄽ, ㄾ, ㄿ, ㅀ, ㅁ, ㅂ, ㅄ, ㅅ, ㅆ, ㅇ, ㅈ, ㅊ, ㅋ, ㅌ, ㅍ, ㅎ로 총 28개가 있다.
첫 번째 글자는 초성에서 ㄱ, 중성에서 ㅏ, 종성에서 없음을 합친 "가"가 되고, 두 번째 글자는 초성에서 ㄱ, 중성에서 ㅏ, 종성에서 ㄱ을 합친 "각"이 된다. 마지막 글자는 초성에서 ㅎ, 중성에서 ㅣ, 종성에서 ㅎ를 합친 "힣"이 된다.
초성과 중성, 그리고 종성을 합쳐서 만들 수 있는 글자의 개수는 총 19*21*28 = 11,172개가 된다.
한글이 주어졌을 때, 몇 번째 글자인지 구하는 프로그램을 작성하시오.
첫째 줄에 글자 하나가 주어진다. 주어지는 글자는 UTF-8로 인코딩 되어 있는 한글이며, 문제 설명에 나온 방법으로 만들 수 있다. 입력으로 주어진 글자가 몇 번째인지 출력한다.
>>>코드
print(ord(input())-44031)
4. 백준 20232 Archivist
The team of problemsetters of Northwestern Russia Regional Contest welcomes you! Our regional contest was founded in 1995 under the name "Collegiate Programming Championship of St Petersburg". Here is the list of the contest winners:
1995: ITMO
1996: SPbSU
1997: SPbSU
1998: ITMO
1999: ITMO
2000: SPbSU
2001: ITMO
2002: ITMO
2003: ITMO
2004: ITMO
2005: ITMO
2006: PetrSU, ITMO
2007: SPbSU
2008: SPbSU
2009: ITMO
2010: ITMO
2011: ITMO
2012: ITMO
2013: SPbSU
2014: ITMO
2015: ITMO
2016: ITMO
2017: ITMO
2018: SPbSU
2019: ITMO
Help the contest archivist to remember the results of each contest and write a program that will read the year and print contest winners of that year in exactly the same format as above.
The only line of input contains a single integer y (1995 <= y <= 2019), denoting the year. You don't need to process year numbers less than 1995 or greater than 2019, or incorrect year formats. It is guaranteed that you will be given a number between 1995 and 2019, inclusive.
Print the winner of the contest in year y exactly in the same format as in the list above.
>>>해석
러시아 북서 지역 대회의 문제 출제 팀이 당신을 환영합니다!
이 지역 대회는 1995년 "상트페테르부르크 대학 프로그래밍 챔피언십"이라는 이름으로 시작됐습니다.
아래는 역대 대회 우승자입니다:
1995: ITMO
1996: SPbSU
1997: SPbSU
1998: ITMO
1999: ITMO
2000: SPbSU
2001: ITMO
2002: ITMO
2003: ITMO
2004: ITMO
2005: ITMO
2006: PetrSU, ITMO
2007: SPbSU
2008: SPbSU
2009: ITMO
2010: ITMO
2011: ITMO
2012: ITMO
2013: SPbSU
2014: ITMO
2015: ITMO
2016: ITMO
2017: ITMO
2018: SPbSU
2019: ITMO
대회 아카이브 담당자를 도와 각 대회 결과를 기억하고 년도를 입력 받아 위와 똑같은 형식으로 그 해의 우승자를 출력하는 프로그램을 작성합시다.
딱 한 줄에 년도를 의미하는 하나의 정수 y (1995 <= y <= 2019)가 입력됩니다.
1995보다 작은 수나 2019보다 큰 수, 혹은 형식이 잘못된 년도는 처리할 필요가 없습니다.
1995와 2019를 포함하는 범위 사이의 숫자가 주어짐은 보장됩니다.
위와 똑같은 형식으로 y년도 대회의 우승자를 출력합니다.
>>>코드
l = {1995: 'ITMO', 1996: 'SPbSU', 1997: 'SPbSU', 1998: 'ITMO', 1999: 'ITMO', 2000: 'SPbSU', 2001: 'ITMO', 2002: 'ITMO', 2003: 'ITMO', 2004: 'ITMO', 2005: 'ITMO', 2006: 'PetrSU, ITMO', 2007: 'SPbSU', 2008: 'SPbSU', 2009: 'ITMO', 2010: 'ITMO', 2011: 'ITMO', 2012: 'ITMO', 2013: 'SPbSU', 2014: 'ITMO', 2015: 'ITMO', 2016: 'ITMO', 2017: 'ITMO', 2018: 'SPbSU', 2019: 'ITMO'}
print(l[int(input())])
5. 백준 24087 アイスクリーム (Ice Cream)
JOI アイスクリーム店は,非常に高さのあるアイスクリームタワーが名物のアイスクリーム店である.アイスクリームタワーとは,ベースとなるアイスクリームの上に,追加のアイスクリームを 0 個以上積み重ねたものである.
ベースとなるアイスクリームの金額は 250 円で,高さは A cm である.追加のアイスクリームは 1 個につき 100 円で,1 個追加するごとにアイスクリームタワーの高さが B cm 増える.
あなたは,この店で高さが S cm 以上のアイスクリームタワーを買いたい.
高さが S cm 以上のアイスクリームタワーを買うために必要な金額の最小値を求めよ.
入力は以下の形式で標準入力から与えられる.
S
A
B
高さ S cm 以上のアイスクリームタワーを買うために必要な金額の最小値を,単位 (円) を省いて出力せよ.
>>>해석
JOI 아이스크림 가게는 말도 안 되게 높은 아이스크림 타워로 유명한 가게입니다.
아이스크림 타워란, 기본 제공되는 아이스크림 위에 추가로 아이스크림을 0개 이상 쌓아 올린 것입니다.
기본으로 제공되는 아이스크림의 가격은 250엔으로, 그 높이는 Acm입니다. 추가로 올라가는 아이스크림은 한 개 당 100엔으로, 한 개를 추가할 때마다 아이스크림 타워의 높이는 Bcm 증가합니다.
당신은 이 가게에서 높이가 Scm 이상인 아이스크림 타워를 사고 싶습니다.
높이가 Scm 이상인 아이스크림 타워를 사기 위해 필요한 최소 금액을 구합시다.
아래의 형식으로 표준 입력이 주어집니다.
S
A
B
높이 Scm 이상의 아이스크림 타워를 사기 위한 최소 금액을, 단위를 생략하고 출력합니다.
>>>코드
s = int(input())
a = int(input())
b = int(input())
i = 0
while a<s:
a += b
i += 1
print(250 + 100*i)
6. 백준 24072 帰省 (Homecoming)
ビーバーのビ太郎は帰省することにした.今日から A 日後の午前に実家に着き,今日から B 日後の午前に実家を去る.
それを聞きつけたビーバーのビバ子は,今日から C 日後の午後にビ太郎の実家を訪れることにした.
ビバ子がビ太郎に会えるか判定せよ.
入力は以下の形式で標準入力から与えられる.
A B C
ビバ子がビ太郎に会える場合は 1 を,そうでない場合は 0 を出力せよ.
>>>해석
비버인 비버타로는 고향에 내려가기로 했습니다.
오늘부터 A일 후 오전에 본가에 들러, 오늘부터 B일 후 오전에 본가를 떠나기로 결정했습니다.
그 얘기를 우연히 들은 비버 비버코는, 오늘부터 C일 후 오후에 본가를 방문하기로 했습니다.
비버코가 비버타로를 만날 수 있을지 없을지를 판단합시다.
아래의 형식으로 표준 입력이 주어집니다.
A B C
비버코가 비버타로를 만날 수 있는 경우 1을, 그렇지 않은 경우 0을 출력합니다.
>>>코드
a, b, c = map(int, input().split())
if c>=a and c<b:
print(1)
else:
print(0)
7. 백준 24079 移動 (Moving)
A 地点から B 地点に移動するのに X 時間,B 地点から C 地点に移動するのに Y 時間かかる.
A 地点から B 地点を経由して C 地点に移動するとき,Z 時間 30 分以内に移動することができるか判定せよ.
入力は以下の形式で標準入力から与えられる.
X
Y
Z
Z 時間 30 分以内に移動することができるならば 1 を,そうでない場合は 0 を出力せよ.
>>>해석
A 지점에서 B 지점으로 이동하는 데 X시간, B 지점에서 C 지점으로 이동하는데 Y시간이 걸립니다.
A 지점에서 B 지점을 경유해 C 지점으로 이동할 때, Z시간 30분 이내에 이동이 가능할지 판단합시다.
아래의 형식으로 표준 입력이 주어집니다.
X
Y
Z
Z시간 30분 이내에 이동이 가능할 경우 1, 그렇지 않을 경우 0을 출력합니다.
>>>코드
x = int(input())
y = int(input())
z = int(input())
if x+y<=z:
print(1)
else:
print(0)
8. 백준 13496 The Merchant of Venice
“The Merchant of Venice” has perhaps one of the most interesting “villains” in Shylock, a Jewish moneylender who has been hurt many times and in different ways by Christians in general, and Antonio, the titular merchant, in particular. When Antonio’s friend Bassanio urgently needs to borrow 3000 ducats to woo the lady he loves, Antonio’s money is tied up in his trading fleet; instead, he signs a loan contract with Shylock promising him a pound of his own flesh in case the 3000 ducats are not repaid by the due date. When his fleet is lost in a storm, the plot thickens and the story turns more ominous.
We will ignore here the risk analysis that Antonio should probably have carried out, asking how likely each of his ships would return, and what the probability was that he would not be able to repay the money by the due date. Instead, we will focus on the question of how much money Antonio could repay Shylock by a given date, depending on where his ships are located at the start of the contract.
Specifically, you will be given the number of days until the due date and the speed at which ships travel. You will also be given, for each ship, its distance from Venice and the value of its load in ducats. You are to output the number of ducats Antonio can repay by the due date.
The first line contains a number K ≥ 1, which is the number of input data sets in the file. This is followed by K data sets of the following form:
The first line of a data set contains three integers n, s, d; 0 ≤ n ≤ 200 is the number of ships Antonio owns, 1 ≤ s ≤ 100 is the speed of the ships in miles per day, and 1 ≤ d ≤ 365 the number of days until the contract’s due date.
This is followed by n lines, each containing two integers di, vi. 0 ≤ di ≤ 10000 is the distance of ship i from Venice, in miles, and 0 ≤ vi ≤ 100000 is the value of ship i’s load.
For each data set, first output “Data Set x:” on a line by itself, where x is its number. Then, output the total number of ducats that Antonio could repay Shylock after d days. If a ship exactly arrives after d days, we assume that Antonio can use its cargo already to repay Shylock.
Each data set should be followed by a blank line.
>>>해석
"베니스의 상인"에는 가장 흥미로운 "악당" 중 하나로 기독교도에게 여러 차례 다양한 방식으로 된통 당하는 유대인 고리대금업자 샤일록과, 말만 상인인 안토니오가 등장합니다. 안토니오의 친구 바사니오가 사랑하는 여인에게 구애하기 위해 3000 두카트를 급하게 필요로 할 때, 안토니오의 돈은 무역선에 묶여 있었습니다; 대신 그는 샤일록에게 기한까지 3000 두카트를 돌려주지 못할 경우 살 1파운드를 주겠다는 계약을 하죠. 돌풍으로 함선이 침몰하며 이야기는 불길한 방향으로 흥미진진해집니다.
이 문제에서 무역선이 얼마 정도를 벌어올 수 있는지, 기한까지 돈을 못 갚을 가능성은 얼마인지 등 안토니오가 해야 했던 위기 분석은 무시합시다. 대신 계약을 맺을 때 무역선의 위치에 따라 기한까지 안토니오가 샤일록에게 얼마를 갚을 수 있었는지에 초점을 맞춰보려 합니다.
당신에게는 기한까지 남은 일 수와 무역선이 항해하는 속도가 주어집니다.
또한 각 배가 베니스로부터 얼마나 떨어져 있는지와 각 배에 몇 두카트가 있는지도 주어집니다.
기한까지 안토니오가 갚을 수 있는 두카트의 값을 출력합시다.
첫 줄에 데이터의 수를 나타내는 K >= 1이 주어집니다. 이후 아래의 형식으로 K개의 데이터가 주어집니다:
데이터의 첫 줄에 세 정수 n, s, d가 주어집니다; 0 <= n <= 200은 안토니오가 소유한 무역선의 수, 1 <= s <= 100은 배의 속도를 일당 마일로 표시한 값, 1 <= d <= 365는 기한까지 남은 일 수입니다.
다음 n개의 줄에 두 정수 di, vi가 주어집니다. 0 <= di <= 1000는 배 i에서 베니스까지의 거리를 마일로 나타낸 값, 0 <= vi <= 100000는 배 i에 있는 두카트의 값입니다.
각 데이터에 대해 x가 데이터 번호인 "Data Set x:"를 별개의 줄에 출력합니다.
이후 안토니오가 d일 후 샤일록에게 갚을 수 있는 두카트의 값을 출력합니다. 배가 정확히 d일 후에 도착한 경우에도, 안토니오가 수하물을 샤일록에게 갚는 데 사용할 수 있다고 가정합시다.
각 데이터 뒤에는 공백 한 줄이 이어집니다.
>>>코드
for k in range(int(input())):
n, s, d = map(int, input().split())
r = 0
for i in range(n):
di, vi = map(int, input().split())
if di%s == 0:
if di//s <= d:
r += vi
else:
if di//s < d:
r += vi
print('Data Set %d:' %(k+1))
print(r)
print()
9. 백준 24083 短針 (Hour Hand)
JOI 高校の生徒である葵はアナログ時計を手に入れた.
この時計には外周に沿って 12 個の目盛りがあり,時計回りに 1 から 12 までの番号が順に付けられている.
この時計の短針は時計回りに回っており,1 時間で目盛り 1 つ分進む.
たった今,短針がある目盛りを指した.この目盛りの番号は A である.
この状態からちょうど B 時間が経過したときに短針が指す目盛りの番号を出力せよ.
入力は以下の形式で標準入力から与えられる.
A
B
短針が A を指してからちょうど B 時間が経過したときに短針が指す目盛りの番号を出力せよ.
>>>해석
JOI 고등학교 학생인 아오이는 아날로그 시계를 가지고 있습니다.
시계에는 둘레를 따라 12개의 눈금이 있고, 1부터 12까지 번호가 순서대로 붙여져 있습니다.
이 시계의 시침은 시계를 도는데, 1시간에 눈금 하나만큼 이동합니다.
방금 시침이 어느 눈금을 가리켰습니다. 이 눈금의 번호를 A라 합시다.
이 상태로부터 딱 B시간이 경과했을 때 시침이 가리키고 있는 번호를 출력합시다.
아래의 형식으로 표준 입력이 주어집니다.
A
B
시침이 A를 가리키고 딱 B시간이 경과한 때 시침이 가리키고 있는 눈금의 번호를 출력합시다.
>>>코드
a = int(input())
b = int(input())
print((a+b-1)%12 +1)
10. 백준 16693 Pizza Deal
There’s a pizza store which serves pizza in two sizes: either a pizza slice, with area A1 and price P1, or a circular pizza, with radius R1 and price P2.
You want to maximize the amount of pizza you get per dollar.
Should you pick the pizza slice or the whole pizza?
The first line contains two space-separated integers A1 and P1.
Similarly, the second line contains two space-separated integers R1 and P2.
It is guaranteed that all values are positive integers at most 10^3. We furthermore guarantee that the two will not be worth the same amount of pizza per dollar.
If the better deal is the whole pizza, print ‘Whole pizza’ on a single line.
If it is a slice of pizza, print ‘Slice of pizza’ on a single line.
>>>해석
두 가지 크기의 피자를 파는 피자 가게가 있습니다:
조각 피자는 A1의 넓이에 가격은 P1이며, 원형 피자는 R1의 반지름에 가격은 P2입니다.
당신은 달러 당 받는 피자의 양을 최대로 만들고 싶습니다.
조각 피자를 사는 게 낫습니까, 원형 피자를 사는 게 낫습니까?
첫 줄에 공백으로 구분된 두 정수 A1과 P1이 주어집니다.
비슷하게, 두 번째 줄에 공백으로 구분된 두 정수 R1와 P2가 주어집니다.
모든 양의 정수의 값은 최대 10^3임이 보장됩니다.
두 가지 옵션에서 달러 당 받는 피자의 양을 같지 않음도 추가로 보장됩니다.
원형 피자를 사는 게 나을 경우, 'Whole pizza'를 한 줄에 출력합니다.
조각 피자를 사는 게 나을 경우, 'Slice of pizza'를 한 줄에 출력합니다.
>>>해석
import math
a, p1 = map(float, input().split())
r, p2 = map(float, input().split())
if a/p1 > (math.pi * (r**2))/p2:
print('Slice of pizza')
else:
print('Whole pizza')
11. 백준 15080 Every Second Counts
Meredith runs a taxi service called Ruber which offers rides to clients in small towns in western Pennsylvania. She wants to get every possible dime out of people who use her taxis, so her drivers charge a flat fee not per minute but per second. It’s important, therefore, to be able to determine the exact amount of elapsed time between the moment a client enters a cab until the moment they leave. Trying to write a program to do this has driven Meredith crazy (pun intended) so she’s come to you for some help.
Input consists of two lines: the first contains the start time and the second contains the end time for a single taxi ride. Each time is of the form hh : mm : ss, giving the hour, minute and seconds. Meredith uses a 24 hour clock, with 0 : 0 : 0 representing 12 midnight and 23 : 59 : 59 representing one second before midnight. Note that the end time may have a value less than the start time value if the ride spans midnight (see the last sample test case for an example of this).
Display the number of seconds between the two times. No cab ride will be equal to or longer than 24 hours.
>>>해석
메레디트는 펜실베니아 서부 작은 마을의 고객에게 택시를 제공하는 루버라는 택시 서비스를 운영 중입니다. 그녀는 그녀의 택시를 이용하는 사람들로부터 가능한 많은 돈을 뽑아내고 싶어하므로, 운전자는 1분 당이 아닌 1초 당 요금을 지불해야 합니다. 따라서 고객이 택시에 탄 순간부터 떠난 순간까지 흐른 시간의 양을 정확하게 측정하는 것이 중요합니다. 메레디트는 이 문제로 미쳐 (드립 주의 - 역자 : 미국 드라마 관련 드립인 거 같은데 잘 모르겠습니다.) 직접 도움을 청하러 왔으므로, 프로그램을 작성합시다.
입력은 두 줄로 주어집니다: 한 번의 택시 운행에 대해 첫 줄에는 시작 시각이, 둘째 줄에는 종료 시각이 주어집니다. 각 시간은 시간, 분, 초를 나타내는 hh : mm : ss 형식으로 주어집니다. 메레디트는 24시간 기준 시계를 사용하는데, 0 : 0 : 0은 자정 12시를 나타내고 23 : 59 : 59가 자정 1초 전을 나타냅니다.
택시 운전이 자정을 걸쳐 진행됐다면 종료 시각이 시작 시각보다 낮은 값일 수 있음을 명심합시다.
(마지막 예제를 확인합시다.)
두 시각 사이가 몇 초인지 출력합니다. 그 어떤 택시 운행도 24시간과 같거나 그보다 길지는 않습니다.
>>>코드
a = list(map(int, input().split(' : ')))
b = list(map(int, input().split(' : ')))
r = (b[0]*3600+b[1]*60+b[2]) - (a[0]*3600+a[1]*60+a[2])
if r>=0:
print(r)
else:
print(r+24*3600)
12. 백준 21638 SMS from MCHS
You work for MCHS (Russian Ministry of Emergency Situations). You have just received a report from Hydro-meteorological Center containing an information about today's weather and the forecast for tomorrow.
According to this report, the air temperature is t_1 degrees today, and the wind speed is v_1 meters per second. Tomorrow the air temperature will be t_2 degrees, and the wind speed will be v_2 meters per second.
You are given a task to notify citizens about the weather for tomorrow via SMS.
The most important goal is to warn citizens in case the storm is possible.
If, according to the forecast, the temperature tomorrow will be negative, and the wind speed will be at least 10 meters per second, you should send a message with following text:
A storm warning for tomorrow! Be careful and stay home if possible!
Otherwise, you may just notify citizens about bad weather changes.
If the temperature tomorrow will be lower than today, then you should send a message with a warning about a cold snap. It should have the following text:
MCHS warns! Low temperature is expected tomorrow.
Otherwise, if wind speed tomorrow will be higher than today, then you should send a message with a warning about strong wind. It should have the following text:
MCHS warns! Strong wind is expected tomorrow.
If none of the above conditions is satisfied, the you don't have to send a message at all.
Given the report from Hydro-meteorological Center, determine, what message has to be sent.
The first line of input contains two integers t_1 and v_1 --- the temperature and the wind speed for today (-50 <= t_1 <= 50; 0 <= v_1 <= 20).
The second line contains two integers t_2 and v_2 --- the temperature and the wind speed for tomorrow (-50 <= t_2 <= 50; 0 <= v_2 <= 20).
In case if any message has to be sent, output its text.Otherwise, output phrase "No message".
You can separate message words with spaces and line feeds arbitrarily.
>>>해석
당신은 MCHS(러시아 긴급상황부)에서 일합니다.
당신은 방금 해양 기상청으로부터 오늘의 날씨 및 내일의 기상 예측 정보를 담은 보고서를 받았습니다.
이 보고서에 따르면, 오늘의 기온은 t1도이며 풍속은 초속 v1미터입니다.
내일의 기온은 t2도이며 풍속은 초속 v2미터로 예상됩니다.
당신은 문자를 통해 시민들에게 내일의 날씨 정보를 알려야 합니다.
가장 중요한 과제는 폭풍이 예상되면 시민들에게 경고하는 것입니다.
만약 내일의 기온이 영하이고 풍속이 초속 10m 이상으로 예측되면,
당신은 아래와 같은 문자 메시지를 보내야 합니다:
A storm warning for tomorrow! Be careful and stay home if possible!
그렇지 않다면, 당신은 좋지 않은 기상 변화만 시민들에게 알려주면 됩니다.
만약 내일의 기온이 오늘보다 낮아진다면, 당신은 한파를 경고하는 메시지를 보내야 합니다.
내용은 아래와 같습니다:
MCHS warns! Low temperature is expected tomorrow.
만약 기온이 떨어지지 않고 내일의 풍속이 오늘보다 빨라진다면,
당신은 강풍을 경고하는 메시지를 보내야 합니다. 내용은 아래와 같습니다:
MCHS warns! Strong wind is expected tomorrow.
만약 위의 조건이 아무것도 충족되지 않는다면, 당신은 메시지를 보내지 않아도 됩니다.
해양 기상청으로부터 받은 보고서가 주어질 때, 무슨 메시지를 보내야 하는지 판단합시다.
첫 줄에 오늘의 기온과 풍속을 나타내는 두 정수 t1과 v1이 주어집니다.
(-50 <= t1 <= 50; 0 <= v1 <= 20)
둘째 줄에는 내일의 기온과 풍속을 나타내는 두 정수 t2와 v2가 주어집니다.
(-50 <= t2 <= 50; 0 <= v2 <= 20)
만약 특정 메시지를 출력해야 한다면, 그 메시지를 출력합니다.
그렇지 않다면, "No message"를 출력합니다.
단어 간 공백이나 줄 바꿈은 임의로 설정해도 됩니다.
>>>코드
t1, v1 = map(int, input().split())
t2, v2 = map(int, input().split())
if t2<0 and v2>=10:
print('A storm warning for tomorrow! Be careful and stay home if possible!')
elif t2<t1:
print('MCHS warns! Low temperature is expected tomorrow.')
elif v2>v1:
print('MCHS warns! Strong wind is expected tomorrow.')
else:
print('No message')
13. 백준 17903 Counting Clauses
It’s time for the annual 3-SAT competition, where the contestants compete to answer as many instances of 3-SAT as possible within the time limit. 3-SAT is a classic NP-complete problem, where you are given a boolean formula in conjunctive normal form, in which we have a set of clauses each consisting of exactly three literals. Each literal refer either positively or negatively to a variable, which can be assigned a value of either True or False. The question is whether there exists an assignment to the variables such that every clause evaluates to True. No clause will contain duplicates of a literal (however it is possible that a clause contain both ¬xi and xi). An example of a 3-SAT instance is shown below (from sample input 1):
(¬x1 ∨ x2 ∨ x3) ∧ (¬x1 ∨ ¬x2 ∨ x3) ∧ (x1 ∨ ¬x2 ∨ x3) ∧ (x1 ∨ ¬x2 ∨ ¬x3) ∧ (x1 ∨ x2 ∨ ¬x3)
Øyvind is a judge in the competition, responsible for verifying the quality of problem instances crafted by the other judges before the contest starts. Øyvind hates 3-SAT instances with less than eight clauses – as these are always satisfiable they provide no real challenge for the contestants. Therefore, he will deem such problem instances to be unsatisfactory. Whenever Øyvind encounters an instance with eight or more clauses he knows that it is a real challenge to figure out whether this instance is satisfiable or not – and therefore he will judge these problem instances to be satisfactory. Given an instance of 3-SAT, can you help find Øyvind’s judgement?
The input is a single instance of the 3-SAT problem. The first line is two space-separated integers: m (1 ≤ m ≤ 20), the number of clauses and n (3 ≤ n ≤ 20), the number of variables. Then m clauses follow, one clause per line. Each clause consists of 3 distinct space-separated integers in the range [−n, n] \ {0}. For each clause, the three values correspond to the three literals in the clause. If the literal is negative, that means that the clause is satisfied if the corresponding variable is set to False, and if it is positive the clause is satisfied if the variable is set to True.
Print “satisfactory” on a single line if Øyvind finds the 3-SAT instance to be satisfactory, and “unsatisfactory” otherwise.
>>>해석
참가자가 제한 시간 안에 최대한 많은 3-SAT 문제를 푸는 3-SAT 문제 대회가 돌아왔습니다. 3-SAT 문제는 대표적인 NP 문제로, 불 논리식이 각 절이 정확히 세 개의 리터럴로 이루어진 논리곱 표준형으로 주어집니다. 각 리터럴은 참 또는 거짓을 값으로 갖는 변수를 긍정하거나 부정함으로써 형성됩니다.
모든 절이 참이 되도록 변수를 설정할 수 있는지 여부를 판단하는 것이 문제입니다.
그 어떤 절도 똑같은 리터럴을 중복해 포함하지는 않습니다
(다만 절이 ¬xi와 xi를 동시에 포함할 수는 있습니다).
아래는 3-충족 가능성 문제의 예시입니다 (샘플 입력 1이기도 합니다.):
(¬x1 ∨ x2 ∨ x3) ∧ (¬x1 ∨ ¬x2 ∨ x3) ∧ (x1 ∨ ¬x2 ∨ x3) ∧ (x1 ∨ ¬x2 ∨ ¬x3) ∧ (x1 ∨ x2 ∨ ¬x3)
오이빈드는 대회의 심판으로, 대회가 시작하기 전 다른 심판이 만든 문제의 질을 검사할 책임이 있습니다.
오이빈드는 절이 8개 미만인 3-SAT 문제를 싫어합니다 - 대회 참가자에게 큰 어려움이 되지 않기 때문입니다.
그러므로 그는 이러한 문제에 만족하지 못할 것입니다.
오이빈드는 절이 8개 이상인 문제는 문제의 답을 구하는 것이 어려움을 알고 있으므로 - 이러한 문제에는 만족할 것입니다. 3-SAT 문제의 예시가 주어질 때, 오이빈드가 어떤 판단을 할지 찾아줄 수 있나요?
입력은 3-SAT 문제의 예시입니다. 첫 줄에는 공백으로 나뉜 두 정수가 들어옵니다:
절의 수를 나타내는 m (1 <= m <= 20)과 변수의 수를 나타내는 n (3 <= n <= 20)입니다.
그리고 m개의 절이 줄마다 하나 입력됩니다.
각 절은 공백으로 나누어진 [-n, n] \ {0} 범위의 3개의 정수로 구성됩니다.
각 절에서, 세 정수는 절의 세 리터럴에 대응됩니다. 만약 리터럴 값이 음수이면 상응하는 변수가 거짓일 때 참이 됨을 의미하며, 양수이면 상응하는 변수가 참일 때 참이 됨을 의미합니다.
만약 오이빈드가 3-SAT 문제 예시에 만족하면 "satisfactory"를, 아니면 "unsatisfactory"를 출력합니다.
>>>코드
n, m = map(int, input().split())
for i in range(n):
input()
if n<8:
print('unsatisfactory')
else:
print('satisfactory')
문제가 긴데 그냥 n(절의 길이)가 8 이상이면 만족한다.
14. 백준 14065 Gorivo
Mirko je nedavno otputovao u Ameriku i tamo je iznajmio moderan američki kabriolet narančaste boje s bijelim crtama, automatskim mjenjačem, navigacijom, i . . . prikaznikom na engleskom jeziku s imperijalnim sustavom mjera. Najviše ga muči to što je potrošnja goriva izražena u miljama po galonu, pa mu je teško procijeniti koliko mu mašina zapravo "guta" benzina.
Napišite program koji će preračunati potrošnju goriva iz broja milja po galonu u broj litara po 100 kilometara.
Napomena: 1 galon jednak je točno 3.785411784 litara, a 1 milja jednaka je točno 1609.344 metara.
U prvom i jedinom retku ulaznih podataka nalazi se decimalni broj x (1 ≤ x ≤ 1000) s dvije decimale, koji predstavlja koliko milja po galonu prijede Mirkov automobil.
Potrebno je ispisati jedan decimalan broj, koliko litara troši automobil na 100 kilometara. Tolerirat će se apsolutno i relativno odstupanje od službenog rješenja za 10−6 .
>>>해석
미르코는 최근 미국으로 여행을 가 하얀 줄무늬, 자동 변속기, 내비게이션, 그리고... 영어 계기판과 영국식 도량형을 장착한 오렌지색 미국 차를 빌렸습니다. 그를 가장 당황스럽게 한 것은 연료 소모량이 1갤런 당 마일 단위로 표시되어 차가 실제로 가솔린을 얼마나 "잡아먹는지" 알기 어렵다는 점이었습니다.
연료 소모량을 1갤런당 마일에서 100km당 L로 변환하는 프로그램을 작성합시다.
참고: 1갤런은 정확히 3.785411784L이며, 1마일은 정확히 1609.344m입니다.
딱 한 줄에 미르코의 차가 1갤런 당 몇 마일을 가는지 나타내는 소수 두 자리 수 x (1 <= x <= 1000)가 주어집니다.
차가 100km 당 몇 L를 소비하는지 나타내는 하나의 소수를 출력합니다.
정답으로부터의 절대 오차 또는 상대 오차는 10 ^ (-6)까지 허용됩니다.
>>>코드
print(1/(float(input()) *(0.01609344/3.785411784)))
15. 백준 21631 Checkers
Dima is bored of playing checkers with himself. Since there is nothing but checker pieces to play with, he came up with the following game.
Each piece he has is either white or black. Dima builds a tower by stacking his pieces on top of each other in some order. A black stripe is a sequence of adjacent black pieces, with either a white piece, or the end of the tower at the bottom and top of it. In other words, two adjacent black pieces always belong to the same black stripe. The goal of the game is to get the maximum number of black stripes in the tower.
The game has just started. Dima has a white and b black pieces.
What is the maximum number of black stripes he can get in his tower?
The only line of input contains two integers a and b --- the number of white and black pieces, respectively (0 <= a, b <= 10^18).
Output a single integer --- the maximum possible number of black stripes.
>>>해석
디마는 이제 혼자 체커 게임을 하는 것도 질렸습니다.
하지만 가지고 놀 게 체커 말밖에 없으므로, 아래와 같은 게임을 생각해냈습니다.
디마는 흰색 또는 검은색 말을 가지고 있습니다. 그는 어떤 규칙에 따라 말을 쌓아 탑을 만듭니다.
검은색 줄무늬는 아래 위로 흰색 말 또는 타워의 끝으로 둘러싸인 연속된 검은 말의 모임을 의미합니다.
다시 말해, 두 개의 인접한 검은 말은 언제나 같은 검은색 줄무늬에 속합니다.
이 게임의 목표는 탑에서 얻을 수 있는 검은색 줄무늬의 최댓값을 구하는 것입니다.
게임이 막 시작됐습니다. 디마는 a개의 흰색 말과 b개의 검은색 말을 가지고 있습니다.
그가 탑에서 최대로 얻을 수 있는 검은색 줄무늬의 개수는 몇 개입니까?
한 줄에 각각 흰색 말과 검은색 말의 개수를 의미하는 두 정수 a, b가 주어집니다.
최대로 얻을 수 있는 검은색 줄무늬의 개수를 의미하는 정수 하나를 출력합니다.
>>>코드
a, b = map(int, input().split())
if a>=b:
print(b)
else:
print(a+1)
16. 백준 22155 Простая задача
Жюри Russian Code Cup приготовило большое количество различных интересных задач. Но все они не нравятся председателю жюри. Он говорит, что все они слишком сложные. А для того, чтобы больше участников решило хотя бы одну задачу, нужна простая задача.
Председатель жюри называет задачу простой, если у нее существует решение, использующее не более одного оператора ветвления и не более двух операторов цикла, либо решение, использующее не более двух операторов ветвления и не более одного оператора цикла. Члены жюри подготовили n различных задач с решениями и представили их на рассмотрение председателю жюри. Он подсчитал количество операторов ветвления и операторов циклов в решении каждой задачи и теперь хочет понять, какие из преложенных ему задач являются простыми.
Вам дано n описаний задач, каждое описание представляет собой два числа: количество операторов ветвления и количество операторов цикла, использующихся в решении задачи.
Необходимо для каждой задачи выяснить, является ли она простой.
Первая строка содержит одно целое число n (1 ≤ n ≤ 121) — количество задач. Далее, в n строках задано по два целых числа i и f (0 ≤ i, f ≤ 10) — количество операторов ветвления и количество операторов цикла, использующихся в решении соответствующей задачи.
Для каждой задачи выведите в отдельной строке «Yes», если задача является простой, и «No» в противном случае.
>>>해석
러시안 코드 컵의 심사위원은 여러 흥미로운 문제를 준비했습니다.
하지만 모든 문제가 심사위원장에 눈에 들지는 않았죠. 심사위원장은 문제가 다 너무 복잡하다고 했습니다.
더 많은 참가자가 최소 한 문제는 풀 수 있도록 하려면, 간단한 문제가 하나는 필요하다며 말입니다.
심사위원장은 풀이가 조건문 하나, 반복문 두 개를 넘게 쓰지 않거나 조건문 두 개, 반복문 하나를 넘게 쓰지 않으면 문제가 간단하다고 판단합니다. 심사위원은 n개의 문제를 풀이와 함께 심사위원장에게 제출했습니다. 심사위원장은 풀이의 조건문과 반복문의 수를 세었고, 이제 어떤 문제가 간단한지 판정하려 합니다.
당신에게 각각 두 숫자로 된 n개의 문제에 관한 설명이 주어집니다:
이는 문제 풀이의 조건문의 수와 반복문의 수입니다.
각 문제마다 간단한 문제인지 아닌지 판단합시다.
첫 줄에 문제의 수를 나타내는 하나의 정수 n (1 <= n <= 121)이 주어집니다.
다음 n개의 줄에 두 정수 i와 f (0 <= i, f <= 10)가 주어집니다.
- 이는 해당하는 문제 풀이에 필요한 조건문과 반복문의 수입니다.
각 문제에 대해 별개의 줄에 문제가 간단하면 <<Yes>>를, 아니면 <<No>>를 출력합니다.
>>>코드
for _ in range(int(input())):
i, f = map(int, input().split())
if (i<=1 and f<=2) or (i<=2 and f<=1):
print('Yes')
else:
print('No')
17. 백준 24183 Affischutskicket
VE OCH FASA! PostNord har för det 1337:e året i rad höjt portot, vilket riskerar att bräcka Programmeringsolympiadens budget.
Varje år skickar PO ut affischer till ca 450 gymnasieskolor.
Ett utskick består av tre saker:
- ett kuvert av C4-storlek (229 mm * 324 mm)
- två affischer av A3-storlek (297 mm * 420 mm)
- ett informationsblad av A4-storlek (210 mm * 297 mm)
Det är mycket viktigt att brevet väger högst 50 gram, eftersom portot annars blir dubbelt så högt. För att klara denna magiska viktgräns kan PO styra över vilken sorts papper som används för de tre sakerna. Varje sort har en ytvikt (vikt per area) som typiskt anges i gram / m^2. Notera att kuvertet består av två sammanklistrade ark av C4-storlek, medan ytvikter och ovanstående mått gäller för ett ark.
Skriv ett program som räknar ut den totala vikten för ett brev.
Indatan består av tre heltal mellan 50 och 200, ytvikterna i gram / m^2 för sorterna som används till kuvertet, affischerna respektive informationsbladet.
Skriv ut ett enda decimaltal: vikten på ett fullständigt brevutskick i gram. Svaret ska anges med minst 3 decimalers noggrannhet (d.v.s. vara inom 5 * 10^{-4} från rätt svar).
>>>해석
충격과 공포! 1337년 연속으로 PostNord가 우편 가격을 인상해, 프로그래밍 올림피아드의 예산이 초과될 위기에 처했습니다.
매년 주최 측은 약 450개의 고등학교에 우편을 보냅니다. 우편은 세 가지로 이루어져 있습니다.
- C4 크기의 봉투 (229mm * 324mm)
- A3 크기의 포스터 2개 (297mm * 420mm)
- A4 크기의 대회 안내지 (210mm * 297mm)
우편은 50g을 초과해서는 안 되는데, 초과할 경우 우편 요금이 거의 두 배가 되기 때문입니다. 무게 조절을 위해 주최 측은 세 부속품의 종이의 종류를 정하려 합니다. 종이는 종류에 따라 기본 무게(기본 단위 당 무게)가 달라지는데, 통상적으로 g / m^2으로 나타냅니다. 단위 무게나 크기는 한 장을 기준으로 주어지는 반면, C4 크기의 봉투는 C4 크기의 종이 두 장을 붙여 만듦을 유의합시다.
우편의 총 무게를 계산하는 프로그램을 작성합시다.
봉투, 포스터, 대회 안내지에 사용된 종이의 기본 무게를 나타내는 50과 200 사이의 세 정수가 순서대로 g / m^2으로 주어집니다.
우편의 총 무게를 g으로 표현한 하나의 소수를 출력하시오. 정답은 소수 셋째 자리까지는 일치해야 합니다. (즉, 정답과의 오차 범위는 5 * 10 ^ -4 이하입니다.)
>>>코드
a, b, c = map(float, input().split())
print(2*a*(0.229 * 0.324) + 2*b*(0.297 * 0.420) + c*(0.210 * 0.297))
18. 백준 24860 Counting Antibodies
Immunoglobulins also known as antibodies are protein molecules. Antibodies play one of the key roles in the immune reaction --- they detect harmful foreign agents --- bacteria or viruses --- and help to eliminate them. Every foreign molecule binds with unique type of antibody. There are plenty of potential harmful agents, so, there should be a tremendous number of immunoglobulin types to neutralize all threats. Huge required amount of immunoglobulin types make it impossible to encode each type in DNA. Luckily, there is a solution.
Immunoglobulins are produced by immune cells: B-lymphocytes based on DNA information --- genes. Immunoglobulin genes are combined from DNA fragments like constructor. Each fragment exists in several variants and is responsible for variable region of immunoglobulin molecule. This process is called somatic recombination.
Immunoglobulin molecule consists of two identical heavy chains and two identical light chains. There are two types of light chains with similar structure --- kappa and lambda. Both of two light chain types have two variable regions --- V and J. To form a variable region one gene fragment is selected from multiple variants: V_kappa and J_kappa variants for V and J regions respectively in kappa-light chain, or V_lambda and J_lambda variants for V and J regions respectively in lambda-light chain.
There is only one heavy chain type with three variable regions --- V, D and J. To form each of them one gene fragment from V_h, D_h and J_h variants respectively is selected.
You need to count how many possible immunoglobulin molecules can be produced for given values of V_kappa, J_kappa, V_lambda, J_lambda, V_h, D_h and J_h.
The first line contains two integers V_kappa, J_kappa (1 <= V_kappa, J_kappa <= 1500) --- number of gene fragment variants for kappa-light chain V and J variable regions, respectively.
The second line contains two integers V_lambda, J_lambda (1 <= V_lambda, J_lambda <= 1500) --- number of gene fragment variants for lambda-light chain V and J variable regions, respectively.
The third line contains three integers V_h, D_h and J_h (1 <= V_h, D_h, J_h <= 1000) --- number of gene fragment variants for heavy chain V, D and J variable regions, respectively.
Output one integer --- number of immunoglobulin variants that can be produced.
>>>해석
짧게 항체라고 불리는 면역 글로불린 항체는 단백질 분자입니다.
항체는 면역 반응에서 중요한 역할을 담당합니다 - 박테리아나 바이러스 같은 위험한 외부 물질을 탐지해 차단하죠. 모든 외부 분자는 특수한 항체에 결합합니다. 잠재적으로 위험한 외부 물질은 정말 많으므로, 이 위협을 모두 중화하기 위해서 면역 글로불린 항체의 종류도 어마어마하게 많습니다. 엄청난 양의 면역 글로불린 항체 유형은 각각을 DNA로 부호화하는 것을 사실상 불가능하게 만듭니다. 다행히, 해법은 있습니다.
면역 글로불린 항체는 면역 세포가 만듭니다: B-세포가 유전자의 DNA 정보를 바탕으로 만들죠.
면역 글로불린 유전자는 DNA 조각이 합쳐져 형성됩니다.
각 조각에는 다양한 변종이 존재하고 이는 면역 글로불린 분자의 가변부를 담당합니다.
이 과정을 통틀어 체세포 재조합이라고 부릅니다.
면역 글로불린 분자는 두 동일한 중쇄와 두 동일한 경쇄로 이루어져 있습니다.
경쇄는 비슷한 구조를 가진 두 종류로 나눠집니다 - κ와 λ입니다.
두 경쇄 종류는 모두 두 가변부를 지니고 있습니다 - V와 J입니다.
면역 글로불린 분자 하나의 가변부를 형성할 때 다양한 변종 중 하나의 유전자 조각이 선택됩니다:
κ-경쇄에서 V 가변부와 J 가변부로부터 각각 Vκ와 Jκ 변종이 선택되거나,
λ-경쇄에서 V 가변부와 J 가변부로부터 각각 Vλ와 Jλ 변종이 선택됩니다.
중쇄는 세 개의 가변부 - V, D, J - 로 이루어지며 종류는 하나밖에 없습니다.
면역 글로불린 분자 하나의 가변부를 형성할 때 Vh, Dh, Jh 변종에서 각각 하나의 유전자 조각이 선택됩니다.
(그림 참조)
Vκ, Jκ, Vλ, Jλ, Vh, Dh, Jh가 주어질 때,
얼마나 많은 면역 글로불린 분자가 형성될 수 있는지 계산합시다.
첫 줄에 두 정수 Vκ, Jκ가 주어집니다.
(1 <= Vκ, Jκ <= 1500) - 이는 각각 κ-경쇄 V와 J 가변부의 유전자 조각 변종 수입니다.
둘째 줄에 두 정수 Vλ, Jλ가 주어집니다.
(1 <= Vλ, Jλ <= 1500) - 이는 각각 λ-경쇄 V와 J 가변부의 유전자 조각 변종 수입니다.
셋째 줄에는 세 정수 Vh, Dh, Jh가 주어집니다.
(1 <= Vh, Dh, Jh <= 1000) - 이는 각각 중쇄 V, D, J 가변부의 유전자 조각 변종 수입니다.
하나의 정수를 출력합니다 - 이 수는 형성 가능한 면역 글로불린 항체 수를 나타냅니다.
>>>코드
Vκ, Jκ = map(int, input().split())
Vλ, Jλ = map(int, input().split())
Vh, Dh, Jh = map(int, input().split())
print((Vκ * Jκ)*(Vh * Dh * Jh) + (Vλ * Jλ) * (Vh * Dh * Jh))
19. 백준 25784 Easy-to-Solve Expressions
When one looks at a set of numbers, one usually wonders if there is a relationship among them? This task is more manageable if there are only three numbers.
Given three distinct positive integers, you are to determine how one can be computed using the other two. Print 1 if any of the three numbers is the sum of the other two numbers, print 2 if any of the three numbers is the product of the other two numbers, print 3 otherwise. Assume that exactly one of these three messages will apply.
There is only one input line; it contains three distinct positive integers, each between 2 and 1000 (inclusive).
Print the appropriate message as described above.
>>>해석
여러분이 숫자 집합을 볼 때, 여러분은 보통 그 숫자들 사이의 관계가 있는지 궁금해합니다.
숫자가 세 개뿐인 경우라면 이 작업은 쉽게 풀 수 있을 겁니다.
세 개의 중복이 없는 세 개의 0이 아닌 정수가 주어집니다.
여러분은 다른 두 개의 정수를 사용하여 하나를 계산하는 방법을 결정해야 합니다.
세 숫자 중 하나가 다른 두 숫자의 합이면 1을 출력하고, 세 숫자 중 하나가 다른 두 숫자의 곱이면 2를 출력하고, 그렇지 않으면 3을 출력합니다. 이 세 개의 조건 중 정확히 한 개가 적용된다에 가정합니다.
입력은 오직 한 줄에서 주어집니다.
2에서 1000 사이의 정수 세 개를 공백 구분하여 입력으로 합니다.
위 문제에서 설명한 조건에 맞는 답을 출력합니다.
>>>코드
l = list(map(int, input().split()))
l.sort()
if l[2] == l[0]+l[1]:
print(1)
elif l[2] == l[0]*l[1]:
print(2)
else:
print(3)
20. 백준 25828 Corona Virus Testing
Testing for Corona can be done individually, e.g., 100 people require 100 test kits. Alternatively, the test can be done in groups (pools), e.g., 100 people can be divided into five group of 20 people each and then using only one test kid per group. If one or more groups test positive, then individual tests are needed for each person in those group. So, for our example, five groups will need 5 test kits and let’s say two groups test positive, so we would need additional 40 (2*20) test kits for a total of 45 (5+40) test kits.
Given the data for the two possible testing approaches, determine which approach will use fewer test kits.
There is only one input line; it provides three integers: g (2 ≤ g ≤ 50), indicating the number of groups, p (2 ≤ p ≤ 50), indicating the number of people in each group, and t (0 ≤ t ≤ g), indicating how many groups tested positive (i.e., people in these groups need to be tested individually).
Print 1 (one) if testing everyone individually will use fewer kits, 2 (two) if testing in groups will use fewer kits, and 0 (zero) if the two approaches use the same number of kits.
>>>해석
코로나 바이러스 검사는 개별적으로 수행할 수 있습니다.
예를 들어 100명의 사람은 100개의 테스트 키트를 필요로 합니다.
또는 그룹(풀)에서 테스트를 수행할 수 있습니다.
예를 들어 100명을 각각 20명씩 5개의 그룹으로 나눈 다음 그룹당 한 개의 테스트 키트만 사용할 수 있습니다.
하나 이상의 그룹이 양성 판정을 받으면 해당 그룹의 각 사람에 대한 개별 테스트가 필요합니다.
예를 들어, 5개 그룹은 5개의 테스트 키트가 필요하고 2개 그룹이 양성 판정을 받았다고 가정하면, 40개(2*20)개의 테스트 키트가 추가로 필요하여 총 45개(5+40)개의 테스트 키트가 필요합니다.
두 가지 가능한 테스트 접근 방식에 대한 데이터가 주어지면 어떤 접근 방식이 더 적은 테스트 키트를 사용할지 결정하십시오.
첫째 줄에 그룹의 수를 나타내는 g(2 <= g <= 50), 각 그룹의 사람 수를 나타내는 p(2 <= p <= 50), 양성 판정을 받은 그룹(개별 테스트가 필요한 그룹)의 수를 나타내는 t(0 <= t <= g)가 공백으로 구분되어 주어진다.
개별적으로 검사를 수행할 경우 테스트 키트를 적게 사용하면 1을, 그룹 별로 검사를 수행할 경우 테스트 키트를 적게 사용하면 2를, 두 경우가 같은 양의 테스트 키트를 사용하면 0을 출력한다.
>>>코드
g, p, t = map(int, input().split())
if g*p < g + p*t:
print(1)
elif g*p > g + p*t:
print(2)
else:
print(0)