728x90

5/ 19 파이썬 공부
1. 백준 9517 아이 러브 크로아티아
"I love Croatia"는 네델란드의 인기 티비 프로그램 "I love my country"의 포맷 라이센스를 수입해 만든 크로아티아의 티비쇼이다. 이 티비쇼에서 가장 인기있는 게임은 "Happy Birthday"이며, 이 게임에 대한 문제를 풀게 된다.
플레이어 8명이 오른쪽 그림과 같이 원을 이루어서 앉아있다. 한 사람은 게임이 시작한지 3분 30초가 지나면 터지는 폭탄을 들고 있다. 폭탄을 들고있는 사람에게 질문을 하면서 게임은 시작된다. 어떤 문제의 정답을 맞추지 못한 경우나, 문제를 스킵한 경우에는 그 즉시 다음 문제를 받게 된다. 문제의 정답을 맞춘 경우에는 폭탄을 바로 왼쪽에 있는 플레이어에게 넘겨주고, 넘겨받은 플레이어에게 다음 질문이 나가게 된다.
게임이 시작했을 때 폭탄을 들고 있는 사람의 번호와 처음 N개의 질문을 대답할때까지 걸린 시간이 주어진다. 이때, 폭탄을 터뜨린 사람의 번호를 구하는 프로그램을 작성하시오.
각 사람이 질문을 듣고 대답할 때까지 걸린 시간과, 그 사람의 대답이 맞았는지(T), 틀렸는지(N), 스킵했는지(P)가 주어진다. 정답을 말하는 시간, 질문을 듣는 시간은 모두 0이라고 가정하며, 박스를 전달하는 시간도 0이라고 가정한다. 항상 사람이 폭탄을 들고있었을 때 터지는 입력만 주어진다.
첫째 줄에 게임이 시작했을 때 폭탄을 들고 있는 사람의 번호 K (1 ≤ K ≤ 8)가 주어진다.
둘째 줄에는 질문의 개수 N (1 ≤ N ≤ 100)이 주어진다.
다음 N개 줄에는 i번째 질문을 대답하기까지 걸린 시간(단위: 초) T (1 ≤ T ≤ 100), 그 플레이어의 대답 Z (T, N, P중 하나) 가 주어진다.
폭탄을 터뜨린 사람의 번호를 출력한다.

>>>코드

k = int(input())
n = int(input())
T, r = 0, 0
for i in range(n):
    t, z = input().split()
    T += int(t)   
    if z == 'T' and T < 210:
        r += 1
if k + (r%8) >8:
    print(k + (r%8)-8)
else:
    print(k + (r%8))



2. 백준 9550 아이들은 사탕을 좋아해
승택이의 아들이 생일을 맞았다. 승택이는 아들을 위해 생일 파티를 하려고 한다.
하지만 아들의 친구들을 모두 초대할 수는 없다. 아이들에게 나눠 줄 사탕이 부족하기 때문이다.
아이들은 항상 한 종류의 사탕만을 먹고 싶어한다. 게다가, 한 종류의 사탕을 최소한 K개 이상 먹어야만 행복해한다.
K가 주어지고 승택이가 현재 갖고 있는 사탕의 종류와 개수가 주어진다. 
이때, 생일파티에 올 수 있는 아이들은 최대 몇 명일까?
첫 줄에 테스트 케이스의 수 T가 주어진다. ( 1 ≤ T ≤ 100 )
각 테스트 케이스의 첫 줄엔 승택이가 갖고 있는 사탕의 종류의 수 N과 K가 주어진다. ( 1 ≤ N, K ≤ 100 )
두 번째 줄엔 N개의 정수로 승택이가 각 종류의 사탕을 몇 개 갖고 있는지가 주어진다.
모든 종류에 대해, 사탕은 최소 1개 최대 100개이다.
각 테스트 케이스마다 생일파티에 최대 몇 명의 아이들이 참석할 수 있는지 하나의 정수로 출력한다.

>>>코드

T = int(input())
for i in range(T):
    N, K = map(int, input().split())
    candy = list(map(int, input().split()))
    print(sum(candy[i]//K for i in range(N)))



3. 백준 9610 사분면
2차원 좌표 상의 여러 점의 좌표 (x,y)가 주어졌을 때, 
각 사분면과 축에 점이 몇 개 있는지 구하는 프로그램을 작성하시오.
첫째 줄에 점의 개수 n (1 ≤ n ≤ 1000)이 주어진다. 
다음 n개 줄에는 점의 좌표 (xi, yi)가 주어진다. (-106 ≤ xi, yi ≤ 106)
각 사분면과 축에 점이 몇 개 있는지를 예제 출력과 같은 형식으로 출력한다.

>>>예제
입력
5
0 0
0 1
1 1
3 -3
2 2

출력
Q1: 2
Q2: 0
Q3: 0
Q4: 1
AXIS: 2

>>>코드

N = int(input())
q1, q2, q3, q4, axis = 0, 0, 0, 0, 0
for i in range(N):
    x, y = map(int, input().split())
    if x>0 and y>0:
        q1 += 1
    elif x<0 and y>0:
        q2 += 1
    elif x<0 and y<0:
        q3 += 1
    elif x>0 and y<0:
        q4 += 1
    else:
        axis += 1
print('Q1: %d\nQ2: %d\nQ3: %d\nQ4: %d\nAXIS: %d' %(q1, q2, q3, q4, axis))



4. 백준 10102 개표
A와 B가 한 오디션 프로의 결승전에 진출했다. 결승전의 승자는 심사위원의 투표로 결정된다.
심사위원의 투표 결과가 주어졌을 때, 어떤 사람이 우승하는지 구하는 프로그램을 작성하시오.
입력은 총 두 줄로 이루어져 있다. 첫째 줄에는 심사위원의 수 V (1 ≤  V ≤  15)가 주어지고, 둘째 줄에는 각 심사위원이 누구에게 투표했는지가 주어진다. A와 B는 각각 그 참가자를 나타낸다.
A가 받은 표가 B보다 많은 경우에는 A, B가 받은 표가 A보다 많은 경우에는 B, 같은 경우에는 Tie를 출력한다.

>>>코드

V = int(input())
v = input()
if v.count('A') > v.count('B'):
    print('A')
elif v.count('B') > v.count('A'):
    print('B')
else:
    print('Tie')



5. 백준 10103 주사위 게임
창영이와 상덕이는 게임을 하고 있다.
게임을 시작하는 시점에서, 두 사람의 점수는 모두 100점이다.
게임은 여섯 면 주사위를 사용하며, 라운드로 진행된다. 
매 라운드마다, 각 사람은 주사위를 던진다. 
낮은 숫자가 나온 사람은 상대편 주사위에 나온 숫자만큼 점수를 잃게 된다. 
두 사람의 주사위가 같은 숫자가 나온 경우에는 아무도 점수를 잃지 않는다.
게임이 끝난 이후에 두 사람의 점수를 구하는 프로그램을 작성하시오.

첫째 줄에 라운드의 수 n (1 ≤ n ≤ 15)가 주어진다. 다음 n개 줄에는 두 정수가 주어진다. 
첫 번째 정수는 그 라운드에서 창영이의 주사위에 나타난 숫자, 두 번째 정수는 상덕이의 주사위에 나타난 숫자이다. 
두 정수는 항상 1보다 크거나 같고, 6보다 작거나 같다.
첫째 줄에 게임이 끝난 이후에 창영이의 점수, 둘째 줄에는 상덕이의 점수를 출력한다.

>>>코드

n = int(input())
C, S = 100, 100
for i in range(n):
    c, s = map(int, input().split())
    if c<s:
        C -= s
    elif c>s:
        S -= c
print(C)
print(S)



6. 백준 10162 전자레인지
3개의 시간조절용 버튼 A B C가 달린 전자레인지가 있다. 
각 버튼마다 일정한 시간이 지정되어 있어 해당 버튼을 한번 누를 때마다 그 시간이 동작시간에 더해진다. 
버튼 A, B, C에 지정된 시간은 각각 5분, 1분, 10초이다.
냉동음식마다 전자레인지로 요리해야할 시간 T가 초단위로 표시되어 있다. 
우리는 A, B, C 3개의 버튼을 적절히 눌러서 그 시간의 합이 정확히 T초가 되도록 해야 한다. 
단 버튼 A, B, C를 누른 횟수의 합은 항상 최소가 되어야 한다. 이것을 최소버튼 조작이라고 한다.
만일 요리시간이 100초라고 하면(T=100) B를 1번, C는 4번 누르면 된다. 
이와 다르게 C를 10번 눌러도 100초가 되지만 이 경우 10번은 최소 횟수가 아니기 때문이 답이 될 수 없다. 
이 경우 B 1번, C 4번, 총 5번이 최소버튼 조작이다. 
그리고 T=234와 같이 3개의 버튼으로 시간을 정확히 맞출 수 없는 경우도 있다.
여러분은 주어진 요리시간 T초를 맞추기 위한 최소버튼 조작 방법을 구하는 프로그램을 작성해야 한다.

첫 번째 줄에는 요리시간 T(초)가 정수로 주어져 있으며 그 범위는 1 ≤ T ≤ 10,000 이다.
여러분은 T초를 위한 최소버튼 조작의 A B C 횟수를 첫 줄에 차례대로 출력해야 한다. 
각각의 횟수 사이에는 빈 칸을 둔다. 해당 버튼을 누르지 않는 경우에는 숫자 0을 출력해야한다. 
만일 제시된 3개의 버튼으로 T초를 맞출 수 없으면 음수 -1을 첫 줄에 출력해야 한다.

>>>코드

T = int(input())
a = T//300
b = (T%300) // 60
c = ((T%300)%60) // 10
if ((T%300)%60)%10 != 0:
    print(-1)
else:
    print('%d %d %d' %(a, b, c))



7. 백준 10178 할로윈의 사탕
할로윈데이에 한신이네는 아부지가 사탕을 나눠주신다. 하지만 한신이의 형제들은 서로 사이가 좋지않아 서른이 넘어서도 사탕을 공정하게 나누어 주지 않으면 서로 싸움이 난다. 매년 할로윈데이때마다 아부지는 사탕을 자식들에게 최대한 많은 사탕을 나누어 주시기 원하며 자신에게는 몇개가 남게되는지에 알고 싶어 하신다. 이런 아부지를 도와서 형제간의 싸움을 막아보자.
가장 첫 번째 줄에는 테스트 케이스의 수가 입력되고, 
각 테스트 케이스마다 사탕의 개수 c와 형제의 수 v가 차례대로 입력된다.
출력은 예제를 보고 ”You get __ piece(s) and your dad gets __ piece(s).” 형식에 맞추어 적절하게 출력하라.

>>>코드

T = int(input())
for i in range(T):
    c, v = map(int, input().split())
    print('You get %d piece(s) and your dad gets %d piece(s).' %(c//v, c%v))



8. 백준 10179 쿠폰
당신은 어떤 물건이라도 20% 할인해주는 쿠폰을 가지고 있다.
원래 가격이 주어질 때, 쿠폰을 사용하면 얼마가 되는지 알려주는 프로그램을 작성하시오.
첫 번째 줄에 테스트케이스의 수가 주어진다.
각 줄에는 물건의 원래가격이 소수점 둘째자리까지 주어진다.
할인된 가격을 달러 단위로 출력한다.
나누어떨어지지 않을 때는 소수점 셋째 자리에서 반올림해서 둘째 자리까지 출력한다.

>>>코드

T = int(input())
for i in range(T):
    price = float(input())
    print('$%.2f' %(price*0.8))



9. 백준 10205 헤라클레스와 히드라
헤라클레스는 그리스 신화의 유명한 비극적인 영웅이다. 
그는 제우스의 사생아로 태어났는데, 이때문에 제우스의 아내 헤라는 그를 매우 싫어했다. 그는 매우 강한 힘과 높은 지식을 가졌지만, 동시에 자신의 아이들이나, 그의 많은 스승들, 연인들 등을 스스로 죽이는 광기도 함께 가졌다. 그는 그의 아이들을 죽인 죄로, 에우리스테우스 왕이 내린 12가지의 과업을 수행해야 했던 인물로 잘 알려져 있다.
그 과업 중 두 번째는 바로 거대하고, 여러 개의 머리를 가진 히드라를 죽이라는 것이었다. 그런데 이 히드라는 헤라가 헤라클레스를 죽이려는 목적으로 만든 괴물이었다.
히드라를 죽이는 데 있어 큰 문제는, 머리 하나를 날려버리면, 2개의 새 머리가 나온다는 것이었고, 히드라는 머리가 하나 이상 남아있다면 죽지 않았다. 헤라클레스의 조카 이올라우스는 그 머리들을 자를 때 그 밑동에 불을 지지면 머리가 다시 자라나지 않는다는 사실을 깨달았다.
이런 상황에서, 헤라클레스와 이올라우스는 일련의 연속된 행동을 수행하는데, 이 행동은 그냥 히드라의 머리를 자르는 것과, 자름과 동시에 불로 지지는 두 가지 중 하나이다. 이 일련의 행동이 끝난 뒤 몇 개의 머리가 남아있는지를 결정하라.
입력의 첫 번째 줄은 data set의 개수 K가 주어진다.
각 data set의 첫 번째 줄에는 히드라의 머리 개수 1 ≤ h ≤ 50 가 주어진다.
두 번째 줄에는 헤라클레스와 이올라우스의 일련의 행동들이 100글자 이하로 이루어진 문자열로 주어지는데, 이때 'c'는 불로 지지지 않고 머리만 자르는 것을 뜻하고, 'b'는 머리를 자른 후 불로 지지는 것을 뜻한다.
입력은 히드라의 머리를 모두 제거했다면 더 이상의 행동은 없도록 주어진다.
각 data set에 대한 출력의 첫 번째 줄은 "Data Set x:" 이다.
그 다음 줄에 헤라클레스와 이올라우스의 행동이 끝난 후 남아있는 히드라의 머리 개수를 출력한다.
각각의 data set 사이에는 빈 칸이 존재한다.

>>>코드

K = int(input())
for i in range(K):
    h = int(input())
    action = input()
    print('Data Set %d: %d\n' %(i+1, h + action.count('c') -action.count('b')))


10. 백준 10409 서버
당신은 FCFS(First-Come, First-Served)의 규칙에 따라 요청된 일을 처리하는 서버를 담당하게 되었다. 
매일, 당신은 일을 처리하기 위해 최대 T분 동안 서버에 시간을 할당할 수 있다.
당신은 오늘 주어진 시간동안 몇개의 일이 완료될 수 있는지 알고싶다.
예시를 들어보겠다. T = 180이고, 요청된 일들의 수행시간이 요청된 순으로 각각 45, 30, 55, 20, 80, 20분이다. 그러면, 단 4개의 일만이 완료될 수 있다. 처음 4개의 일의 수행시간은 150분으로 주어진 시간 내에 완료될 수 있지만, 처음 5개의 일의 수행시간은 230분으로 주어진 시간 180분보다 크기 때문에 완료될 수 없다. 처음 4개의 일을 수행한 뒤 6번째의 일을 수행해도 T를 초과하지 않지만 5번째 일을 수행할 수 없기 때문에 6번째 일을 수행할 수 없음을 참고해라.
첫 줄은 두 정수 n과 T이며 (1 ≤ n ≤ 50, 1 ≤ T ≤ 500) n은 일의 개수를 나타낸다. 
두 번째 줄은 n개의 100 이하인 자연수가 입력되며, 입력된 각 일의 수행 시간을 나타낸다.
일이 First-come, First-served 규칙에 따라 처리될 때, T분 안에 완료될 수 있는 일들의 개수를 출력하라.

>>>코드

n, T = map(int, input().split())
task = list(map(int, input().split()))
r, t = n, 0
for i in range(n):
    t += task[i]
    if t > T:
        r = i
        break
print(r)



11. 백준 10419 지각
창영이는 이번학기에 어떤 교양수업을 듣고 있다. 그런데, 그 교수님은 매우 지각을 자주 하시고 게다가 수업에 지각을 하였을 경우 수업을 일찍 마쳐 주기까지 하는 것을 발견하였다.
창영이는 교수님의 지각시간 0이상의 정수 t와 수업을 일찍 마쳐주는 시간 s 사이에 다음과 같은 관계가 있음을 알았다.
s = t**2
문득 창영이는 수업시간 d가 주어졌을 때, 교수님이 얼마나 지각을 할 수 있는지 궁금해졌고, 여러분은 창영이를 도와서 교수님이 지각할 수 있는 최대의 시간을 알아보자. 
물론, 교수님이 도착하자마자 수업을 일찍 마쳐서 수업이 끝나는 것도 가능하다. 
예를 들어, 수업시간이 6분인 경우, 교수님이 2분 지각을 하면, 4분간 수업을 일찍 마치게 되고, 2+4=6이기 때문에 바로 수업을 끝낼 수 있다. 또 다른 예로, 수업시간이 7분인 경우 교수님이 2분 지각을 하면, 수업을 4분 일찍 마쳐줄 수 있고, 2+4≤7 이므로 가능한 경우가 되고, 교수님이 3분 지각을 하게 되면, 수업을 9분 일찍 마쳐야 되고, 3+9>7 이므로, 교수님이 3분 지각을 하는 것은 불가능하다. 따라서, 교수님은 수업시간이 7분인 경우 교수님은 최대 2분간 지각을 할 수 있다.
창영이가 궁금한 경우의 수 T(1 ≤ T ≤ 100)가 첫 번째 줄에 주어지고, 이어서 T 개의 줄에 수업시간 d(1 ≤ d ≤ 10,000, d는 정수)가 차례대로 주어진다.
수업시간에 따른 교수님이 지각할 수 있는 최대 시간 t를 정수로 구해서 출력한다.

>>>코드

T = int(input())
for i in range(T):
    d = float(input())
    r = int(((1+4*d)**0.5 -1)/2)
    print(r)



그냥 근의 공식에 때려 넣으면 된다.

728x90

+ Recent posts