백준/백준 파이썬

백준 파이썬 Today I Learn 2023.05.20

군청레프 2023. 5. 21. 10:30
728x90

5/ 20 파이썬 공부
1.  백준 10817 세 수
세 정수 A, B, C가 주어진다. 이때, 두 번째로 큰 정수를 출력하는 프로그램을 작성하시오. 
첫째 줄에 세 정수 A, B, C가 공백으로 구분되어 주어진다. (1 ≤ A, B, C ≤ 100)
두 번째로 큰 정수를 출력한다.

>>>코드
n = list(map(int, input().split()))
n.sort()
print(n[1])

2. 백준 10824 네 수
네 자연수 A, B, C, D가 주어진다. 이때, A와 B를 붙인 수와 C와 D를 붙인 수의 합을 구하는 프로그램을 작성하시오.
두 수 A와 B를 합치는 것은 A의 뒤에 B를 붙이는 것을 의미한다. 즉, 20과 30을 붙이면 2030이 된다.
첫째 줄에 네 자연수 A, B, C, D가 주어진다. (1 ≤ A, B, C, D ≤ 1,000,000)
A와 B를 붙인 수와 C와 D를 붙인 수의 합을 출력한다.

>>>코드
n = list(input().split())
A, B = int(n[0] + n[1]), int(n[2] + n[3])
print(A+B)

문자열 + 문자열 = 문자열 붙이기

3. 백준 10833 사과
경상북도 특산품인 사과를 학생들에게 나눠주기 위해 여러 학교에 사과를 배정하였다. 
배정된 사과 개수는 학교마다 다를 수 있고, 학생 수도 학교마다 다를 수 있다. 
각 학교에서는 배정된 사과를 모든 학생들에게 똑같이 나눠주되, 남는 사과의 개수를 최소로 하려고 한다. 
(서로 다른 학교에 속한 학생이 받는 사과 개수는 다를 수 있다.)

예를 들어, 5개 학교의 학생 수와 배정된 사과 수가 다음과 같다고 하자.

학교       A B C D E
학생 수 24 13 5 23 7
사과 개수 52 22 53 10 70

A 학교에서는 모든 학생에게 사과를 두 개씩 나눠주고 4개의 사과가 남게 된다. B 학교에서는 모든 학생에게 사과를 한 개씩 나눠주고 9개의 사과가 남게 된다. 비슷하게 C 학교에서는 3개의 사과가, D 학교에서는 10개의 사과가, E 학교에서는 0개의 사과가 남게 되어, 남는 사과의 총 수는 4+9+3+10+0 = 26이다. 

각 학교의 학생 수와 사과 개수가 주어졌을 때, 학생들에게 나눠주고 남는 사과의 총 개수를 구하는 프로그램을 작성하시오.

첫 번째 줄에는 학교의 수를 나타내는 정수 N (1 ≤ N ≤ 100)이 주어진다. 다음 N 개의 줄에 각 학교의 학생 수와 배정된 사과 개수를 나타내는 두 개의 정수가 주어진다. 학생 수와 사과 개수는 모두 1이상 100이하이다. 
남은 사과의 총 개수를 나타내는 정수를 출력한다.

>>>코드
n = int(input())
r = 0
for i in range(n):
    student, apple = map(int, input().split())
    r += (apple%student)
print(r)

점점 내용은 쉬운데 문제가 길어서 읽기가 싫어지는 단계가 오고 있다

4. 백준 10886 0 = not cute / 1 = cute
준희는 자기가 팀에서 귀여움을 담당하고 있다고 생각한다. 
하지만 연수가 볼 때 그 의견은 뭔가 좀 잘못된 것 같았다. 
그렇기에 설문조사를 하여 준희가 귀여운지 아닌지 알아보기로 했다.
첫 번째 줄에 설문조사를 한 사람의 수 N (1 ≤ N ≤ 101, N은 홀수)가 주어진다.
다음 N개의 줄에는 각 줄마다 각 사람이 설문 조사에 어떤 의견을 표명했는지를 나타내는 정수가 주어진다. 
0은 준희가 귀엽지 않다고 했다는 뜻이고, 1은 준희가 귀엽다고 했다는 뜻이다.
준희가 귀엽지 않다는 의견이 더 많을 경우 "Junhee is not cute!"를 출력하고 귀엽다는 의견이 많을 경우 "Junhee is cute!"를 출력하라.

>>>코드
n = int(input())
c = []
for i in range(n):
    c.append(int(input()))
if c.count(1) > c.count(0):
    print('Junhee is cute!')
elif c.count(1) < c.count(0):
    print('Junhee is not cute!')

5. 백준 10953 A+B (6)
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
첫째 줄에 테스트 케이스의 개수 T가 주어진다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. 
A와 B는 콤마(,)로 구분되어 있다. (0 < A, B < 10)
각 테스트 케이스마다 A+B를 출력한다.

>>>코드
n = int(input())
for i in range(n):
    A, B = map(int, input().split(','))
    print(A+B)

6. 백준 11023 더하기3
수 N개가 주어졌을 때, N개의 합을 구하는 프로그램을 작성하시오.
첫째 줄에 N(1 ≤ N ≤ 100)개의 수가 공백으로 구분되어서 주어진다. 
입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다. 또, 0으로 시작하는 수는 주어지지 않는다.
입력받은 수 N개의 합을 출력한다.

>>>코드
n = list(map(int, input().split()))
print(sum(n))

7. 백준 11024 더하기 4
수 N개가 주어졌을 때, N개의 합을 구하는 프로그램을 작성하시오.
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 
각 테스트 케이스는 한 줄로 이루어져 있으며, N(1 ≤ N ≤ 100)개의 수가 공백으로 구분되어서 주어진다. 
입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다. 또, 0으로 시작하는 수는 주어지지 않는다.
각 테스트 케이스마다 입력받은 수 N개의 합을 한 줄에 하나씩 입력받은 순서대로 출력한다.

>>>코드
T = int(input())
for i in range(T):
    n = list(map(int, input().split()))
    print(sum(n))

8. 백준 11034 캥거루 세마리2
캥거루 세 마리가 사막에서 놀고 있다. 사막에는 수직선이 하나 있고, 캥거루는 서로 다른 한 좌표 위에 있다.
한 번 움직일 때, 바깥쪽의 두 캥거루 중 한 마리가 다른 두 캥거루 사이의 정수 좌표로 점프한다. 
한 좌표 위에 있는 캥거루가 두 마리 이상일 수는 없다.
캥거루는 최대 몇 번 움직일 수 있을까?
여러개의 테스트 케이스로 이루어져 있으며, 세 캥거루의 초기 위치 A, B, C가 주어진다. 
(0 < A < B < C < 100)
각 테스트에 대해 캥거루가 최대 몇 번 움직일 수 있는지 출력한다.

>>>코드
while True:
    try:
        a, b, c = map(int, input().split())
        if c-b>b-a:
            print(c-b-1)
        else:
            print(b-a-1)
    except:
        break

9. 백준 11006 남욱이의 닭장
계란집을 운영하는 남욱이는 매일 닭장에서 달걀을 수거해간다. 
어느 날 닭장에 들어가보니 일부 닭의 다리가 하나씩 사라졌다. 
남욱이는 얼마나 많은 닭들이 한 다리를 잃었는지 알고싶었지만 닭이 너무 많아 셀 수 없었고, 
대신 모든 닭의 다리수를 셌다. 
고민하는 남욱이를 위해 모든 닭의 다리수의 합과 닭의 수를 가지고 이것을 해결해주자.
첫째 줄에 총 테스트 케이스의 수 T (T ≤ 25)가, 둘째 줄 부터 T + 1째줄까지 매줄 마다 모든 닭의 다리수의 합 N (1 ≤ N ≤ 300)과 닭의 수 M (M ≤ N ≤ 2M)이 공백을 간격으로 입력된다.
테스트 케이스마다 한줄에 다리가 잘린 닭의 수 U와 멀쩡한 닭의 수 T를 공백을 간격으로 출력한다.

>>>코드
T = int(input())
for i in range(T):
    n, m = map(int, input().split())
    print('%d %d' %(2*m-n, n-m))

10. 백준 10865 친구 친구
도현이네 반 N명의 친구 관계가 입력으로 주어진다. 
이때, 각 사람의 친구의 수를 출력하는 프로그램을 작성하시오.
각 사람은 1번부터 N번까지 번호가 매겨져 있다. A와 B가 친구면, B와 A도 친구이다. 
자기 자신과 친구인 경우, 즉 A와 B가 같은 경우는 없다.
첫째 줄에 도현이네 반 학생의 수 N(1 ≤ N ≤ 100,000), M(0 ≤ M ≤ 1,000,000)이 주어진다. 
둘째 줄부터 M개의 줄에는 친구 관계를 나타내는 A B가 한 줄에 하나씩 주어진다.
A B가 입력으로 주어진 경우에 B A가 다시 입력으로 주어지는 경우는 없다.
첫째 줄부터 N번째 줄에 걸쳐서 각 학생의 친구의 수를 1번 학생부터 출력한다.

>>>코드
import sys
n, m = map(int, input().split())
p = [0 for k in range(n)]
for i in range(m):
    a, b = map(int, sys.stdin.readline().split())
    p[a-1] += 1
    p[b-1] += 1
for j in range(n):
    print('%d' %(p[j]))

길이가 n(학생수) 인 0으로 이루어진 리스트 생성
m 만큼 반복하여 서로 친구인 인원의 번호 입력받기, 입력받은 번호의 인덱스에 1을 더하기
마지막으로 친구의 수를 저장한 리스트 출력하기

11. 백준 10214 Baseball
경근이는 수업 과제의 일환으로 연세대학교의 역사를 조사하고 있었다. 
케케묵은 도서관 구석에서 경근이가 발견한 것은 역대 연고전의 야구경기 실황 기록문서였다.
하지만 문서를 가지고 있음에도 불구하고 한 눈에 당시의 경기 승패를 파악하기에는 어려움이 많았는데, 
문서에는 회차별 양 팀 획득 점수만이 적혀져 있기 때문이었다.
경근이는 주어진 방대한 자료를 해석하는것이 귀찮았기 때문에 절친한 프로그래머 친구인 당신에게 도움을 요청했다.
주어진 실황 기록문서에서 어떤 팀이 이겼는지를 알아내 경근이를 도와주자!
입력 파일의 첫 번째 줄에 테스트 케이스의 수를 의미하는 자연수 T가 주어진다. 
그 다음에는 T개의 테스트 케이스가 주어진다.
각 테스트 케이스는 9줄에 걸쳐서 입력되며, 매 줄마다 해당 회의 연세대 득점 Y와 고려대 득점 K가 공백으로 구분되어 주어진다. 이 두 수는 0이상 9이하이다.
각각의 케이스마다 한 줄에 연세대가 이겼을 경우 "Yonsei", 고려대가 이겼을 경우 "Korea", 비겼을 경우 "Draw"를 출력한다.

>>>코드
n = int(input())
for i in range(n):
    Y, K = 0, 0
    for j in range(9):
        y, k  = map(int, input().split())
        Y += y
        K += k
    if Y>K:
        print('Yonsei')
    elif Y<K:
        print('Korea')
    else:
        print('Draw')

12. 백준 10474 분수좋아해?
당신은 학생들의 기초수학 학습을 돕는 소프트웨어를 개발하는 팀의 개발자이다. 
당신은 가분수를 대분수(?)로 출력하는 부분을 개발해야 한다. 
진분수는 분자가 분모보다 작은 분수이다; 대분수는 정수부를 따로 떼어주고 남는 부분을 진분수로 쓰는 기법이다. 
예제로, 27/12는 대분수로 2 3/12이다. 기약분수로 만들지 말아야 한다.(3/12를 1/4로 바꿔 출력하지 마시오.)
한 줄에 걸쳐 한 테스트 케이스가 입력된다. 각각의 테스트 케이스는 [1, 2^31 - 1]범위의 두 정수가 입력된다. 첫 번째 정수는 분자고 두 번째는 분모이다. "0 0" 입력이 들어오는 라인에서 입력을 종료한다.
각 테스트 케이스에 대해 한 줄에 걸쳐 주어진 입력에 맞는 대분수를 공백토큰으로 구분하여 출력하라.

>>>코드
while True:
    n, m = map(int, input().split())
    if n == m == 0:
        break
    print('%d %d / %d' %(n//m, n%m, m))

13. 백준 10599 페르시아의 왕들
마야는 페르시아의 왕들에 대해 관심이 있다. 
그녀는 최근 자신이 좋아하는 왕들의 나이가 궁금해졌고, 검색을 해서 정보를 얻기 시작했다.
하지만 불행하게도 대부분의 경우 정확한 왕의 출생일과 사망일을 얻지 못했고, 대신 출생, 사망했을거라 추정되는 때의 범위를 얻었다. 예를 들면 키루스 2세는 600BC에서 575BC사이에 출생했고, 530BC에 사망했다. 따라서 키루스 2세는 최소 45살에서 최대 70살의 인생을 살았다.
마야는 자신이 좋아하는 왕들에 대해 출생과 사망의 범위가 적힌 리스트를 길게 만들었다. 하지만 이 길이가 너무 길기때문에 우리가 왕들 나이의 최소와 최댓값을 대신 구해주자.
만약 왕이 x년도에 태어나고 y년도에 죽었다면 그는 y - x살을 산 것이다.
테스트 케이스는 여러줄에 걸쳐 입력된다. 
각 테스트 케이스는 4개의 정수 a, b, c, d (-5000 ≤ a ≤ b ≤ c ≤ d ≤ 2000)로 이뤄진다. 
[a, b]는 출생일의 범위, [c, d]는 사망일의 범위이다. a, b, c, d의 입력이 모두 0일 경우 프로그램을 종료한다. 각 테스트 케이스마다 최소나이와 최대나이를 공백으로 나눠 출력한다.

>>>코드
while True:
    b1, b2, d1, d2 = map(int, input().split())
    if b1 == b2 == d1 == d2 == 0:
        break
    print('%d %d' %(d1-b2, d2-b1))

14. 백준 10987 모음의 개수
알파벳 소문자로만 이루어진 단어가 주어진다. 
이때, 모음(a, e, i, o, u)의 개수를 출력하는 프로그램을 작성하시오.
첫째 줄에 단어가 주어진다. 
단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.
첫째 줄에 모음의 개수를 출력한다.

>>>코드
s = input()
print(s.count('a') + s.count('e') + s.count('i') + s.count('o') + s.count('u'))

15. 백준 11109 괴짜 교수
승혁이는 괴짜 교수이다. 
그는 미래에 컴퓨터 프로그램을 만들기 위해서는 컴퓨터 프로그램을 병렬로 만들어야 한다고 믿는다. 
그가 옳다는 것을 확신시키기 위해서 그는 실험을 진행 하길 원했다. 
실험과정은 다음과 같다: 그는 먼저 몇 개의 문제에 대해 이 프로그램이 다음 해 동안 실행 될 횟수를 예상한다. 그리고 그는 그의 조교에게 병렬버전의 프로그램을 개발하고, 그 프로그램을 개발하는 데 걸리는 시간을 측정하라고 지시한다. 마지막으로, 그들은 병렬버전과 직렬버전의 실행 시간을 측정한다. 
이 측정된 데이터를 기반으로, 승혁이는 어떤 경우에 병렬화를 통해 전반적인 작업량을 최소화하는지 알고 싶어한다. 이 일에 대한 작업량은 병렬버전을 개발하는 시간과 그 프로그램이 실행될 때까지 기다리는 시간이다. 
첫째 줄에 입력으로 테스트케이스의 개수 T (T ≤ 1000)가 주어진다. 
각각의 테스트케이스에 대해 정수 d, n, s, p가 한 칸의 공백을 사이로 주어진다. 
d (0 ≤ d ≤ 1000000)는 병렬 버전을 개발하는데 걸리는 시간이다.
그리고 n (0 ≤ n ≤ 100000) 은 다음해 동안 이 프로그램이 실행되는 횟수이다. 
s와 p (0 ≤ s, p ≤ 1000) 는  각각 직렬버전과 병렬버전의 실행 시간이다. 
각각의 테스트케이스에 대해 병렬화를 하는게 좋으면 "parallelize" 를 출력하고, 병렬화를 하는게 좋지 않으면 "do not parallelize" 를 출력한다. 만약 직렬화와 병렬화를 통한 시간이 같으면 "does not matter" 를 출력한다.

>>>코드
n = int(input())
for i in range(n):
    d, n, s, p = map(int, input().split())
    if d+n*p < n*s:
        print('parallelize')
    elif d+n*p > n*s:
        print('do not parallelize')
    else:
        print('does not matter')

16. 백준 11134 쿠키애호가
철수는 쿠키를 세상에서 제일 좋아한다. 
쿠키가 있는 곳이라면 철수도 반드시 있다고 할 정도이다. 
철수는 날마다 자신이 가지고 있는 쿠키 중 C개를 먹는다. C개 미만의 쿠키가 남아 있다면 전부 먹는다. 
철수가 쿠키 N개를 가지고 있으면 며칠 동안 먹을 수 있는지 구하시오.
첫 번째 줄에는 테스트케이스의 개수 T가 주어진다. 그 다음 줄부터 T개의 줄에 테스트케이스가 한 줄씩 주어진다. 
테스트케이스는 철수가 가진 쿠키의 개수 N과 날마다 먹는 쿠키의 개수 C로 이루어져 있다.
각 테스트케이스마다 한 줄씩 철수가 며칠 동안 쿠키를 먹을 수 있는지 출력한다.

>>>코드
t = int(input())
for i in range(t):
    n, c = map(int, input().split())
    if n%c == 0:
        print(n//c)
    else:
        print(n//c + 1)

728x90