728x90
반응형

5/ 23 파이썬 공부
1. 백준 17496 스타후르츠
진수는 회사 생활에 지쳐 회사를 그만두고 귀농을 하여 작물들을 키우며 생활하고 있습니다. 
진수는 작물 중에서도 '스타후르츠' 라는 작물을 제일 좋아합니다.
스타후르츠 씨앗을 심으면 자라는데 T일이 걸립니다. 
i일에 스타후르츠 씨앗을 심으면 i+T일에 수확할 수 있고 수확한 날에도 같은 칸에 씨앗을 또 심을 수 있습니다.
진수에게는 스타후르츠 씨앗을 심을 수 있는 빈 칸이 C개 있고 한 칸에 한 개의 스타후르츠를 심을 수 있습니다.
오늘은 여름 1일이고 N일까지 여름이 지속됩니다. 
스타후르츠는 여름이 아닌 날에는 바로 시들어버리므로 N일이 지나면 더 이상 수확할 수 없습니다.
진수는 스타후르츠 한 개를 판매하면 P원을 벌 수 있습니다. 진수는 올해 여름 동안 얼마나 많은 돈을 벌 수 있을까요?
진수는 하루에 일을 원하는 만큼 할 수 있고, 씨앗도 충분히 가지고 있다고 가정합니다.
첫 번째 줄에 여름의 일 수 N (2 ≤ N ≤ 90) 과 스타후르츠가 자라는데 걸리는 일 수 T (1 ≤ T ≤ N-1) 와 스타후르츠를 심을 수 있는 칸의 수 C (1 ≤ C ≤ 300) 와 스타후르츠 개당 가격 정수 P (1 ≤ P ≤ 1,000) 가 주어집니다.
첫 번째 줄에 진수가 여름 동안 스타후르츠를 팔아 벌 수 있는 수익을 출력합니다.

>>>코드

N, T, C, P = map(int, input().split())
print((N-1)//T * C * P)



2. 백준 17450 과자 사기
남서네 집 앞 편의점에는 각각 S, N, U의 이름이 붙은 총 3가지의 과자를 판다. 진열대에는 한 봉지당 가격과 무게가 안내되어 있다. 같은 종류의 과자끼리는 봉지의 무게가 똑같다.
남서는 오늘 과자를 10봉지 사려고 한다. 편의점의 단골인 남서는 할인 쿠폰 하나를 가지고 있는데, 총 구매 금액이 5,000원 이상일 때 500원을 깎아 주는 쿠폰이다. 구매 금액이 5,000원 미만인 경우에는 할인 쿠폰을 쓸 수 없다. 또한 할인을 여러 번 적용할 수는 없다.
남서는 과자를 고를 때 가성비를 중요하게 생각한다. 남서가 생각하는 가성비란, 총 무게를 총 금액으로 나눈 값이다. 남서는 빨리 과자가 먹고 싶기 때문에, 한 종류의 과자만을 10봉지 골라 사 가려고 한다. 또, 다른 물건은 구매하지 않을 생각이다.
가성비를 다시 한 번 수학적으로 표현하면 다음과 같다.
가성비 = 과자 10봉지의 무게의 합 / 쿠폰 사용을 고려했을 때 과자 10봉지를 사는 데 필요한 돈
진열대를 들여다 보던 남서는 신기하게도 세 과자의 가성비가 모두 서로 다르다는 사실을 깨달았다.
남서는 어떤 과자를 사게 될까?
입력은 총 3개의 줄로 이루어지며, 각 줄에는 S, N, U의 순서대로 한 봉지의 가격과 무게가 띄어쓰기를 사이에 두고 주어진다.
모든 입력값은 1 이상 1,000 이하의 정수이다.
세 종류의 과자의 가성비가 서로 다름이 보장된다.
첫 번째 줄에 가장 가성비가 높은 과자의 이름(S 또는 N 또는 U)을 출력한다.

>>>코드

R = []
for i in range(3):
    p, w = map(float, input().split())
    if 10*p>=5000:
        R.append((10*w)/(10*p - 500))
    else:
        R.append(w/p)
if max(R) == R[0]:
    print('S')
elif max(R) == R[1]:
    print('N')
else:
    print('U')



3. 백준 17350 2루수 이름이 뭐야
1루수가 누구인지 밝혀내는 과정에서, 2루수가 거짓말을 하고 있다는 사실이 드러났다!
이에 극대노한 선수들은 2루수를 찾아내어 혼내주려고 한다. 
그런데 이번에는 2루수의 이름을 모른다! 하지만 감독님은 무엇인가 알고 계신 듯하다.
"1루수가 누구야 2루수 이름이 뭐야 3루수는 몰라"
야구팀의 선수 리스트를 보고, 뭐가 있는지 찾아보자.
2루수 이름이 뭐야
첫째 줄에 야구팀의 멤버 수 N(1 ≤ N ≤ 1,000)이 주어진다.
둘째 줄부터 N개의 줄에 걸쳐 선수의 이름이 한 줄에 하나씩 주어진다. 
한글로 주면 코딩하기 귀찮으므로 한/영키를 누르고 타이핑한 이름이 주어진다. 
이름은 1글자 이상 99글자 이하이고, 영어 소문자들과 대문자 'Q', 'W', 'E', 'R', 'T', 'O', 'P'로 이루어져 있다.
선수들 중 뭐(anj)라는 이름을 가진 사람이 있으면 "뭐야;"를, 없으면 "뭐야?"를 출력한다.

>>>코드

N = int(input())
name = []
for i in range(N):
    name.append(input())
if 'anj' in name:
    print('뭐야;')
else:
    print('뭐야?')



4. 백준 17263 Sort 마스터 배지훈
지훈이는 Sort 마스터다. 그래서 어떠한 N개의 원소를 가진 배열이 들어오더라도 암산으로 오름차순 정렬을 할 수 있다고 한다. 의심 많은 보성이는 지훈이를 테스트해 보기로 마음먹었다. 하지만 모든 원소를 일일이 다 확인하는 것은 너무 귀찮은 일이라 생각한 보성이는 정렬된 배열의 마지막 원소만 맞는지 확인해 보기로 했다.
보성이를 위하여 마지막 원소를 알려주는 프로그램을 만들어주자.
첫째 줄에 N이 주어진다. (1 ≤ N ≤ 500,000)
다음 줄에는 N개의 정수 A[1], A[2], ... , A[N]이 주어진다. (0 ≤ A[i] ≤ 10**9)
첫째 줄에 정렬된 배열 A의 마지막 원소를 출력한다.

>>>코드

n = int(input())
N = list(map(int, input().split()))
print(max(N))



놀랍게도 sort 함수 쓸필요가 없다. 오름차순이면 무조건 마지막 원소는 가장 큰 수이기 때문에
가장 큰 수를 출력해주면 된다.

5. 백준 17284 Vending Machine
정웅이는 어머니께 5000원이라는 큰 용돈을 받아 자판기에 갔다.
자판기에는 세 개의 버튼이 있다.
- 1을 누르면 500원짜리 레쓰비를 먹을 수 있다.
- 2를 누르면 800원짜리 게토레이를 먹을 수 있다.
- 3을 누르면 1000원짜리 코카콜라를 먹을 수 있다.
누른 버튼값이 순서대로 주어질 때, 거스름돈이 얼마인지 구하시오. 
단, 주어진 돈을 초과하도록 버튼을 누르는 일은 없다.
첫째 줄에 정웅이가 누른 버튼의 번호가 공백으로 사이에 두고 주어진다. 정웅이는 버튼을 한 번 이상 눌렀다.
첫째 줄에 자판기에서 나올 거스름돈을 출력한다.

>>>코드

choice = list(map(int, input().split()))
print(5000 - choice.count(1)*500 - choice.count(2)*800 - choice.count(3)*1000)


6. 백준 17210 문문문
유신이는 여러개의 문을 통과해야 밖으로 나갈 수 있는 방에 갇혔다. 유신이를 가둔 재현이는 유신이가 탈출할 수 없도록 하기 위해 특이한 규칙을 만들어 문을 순서대로 규칙에 맞는 방법으로 열어야하도록 시스템을 구성하였다.
- 규칙 1 : 문을 여는 방법은 두가지가 있다. 밀어서 여는 법과 당겨서 여는 법이 있다.
- 규칙 2 :연속 2번 같은 방법으로 문을 열 수 없다.
- 규칙 3 : 2의 배수(2,4,6,...)번째 문들은 반드시 같은 방법으로 문을 열어야 한다. 예를 들어 2번째 통과하는 문을 밀어서 열었다면, 4번째 통과하는 문 또한 밀어서 열어야 한다.
- 규칙 4 : 3의 배수(3,6,9,...)번째 문들은 반드시 같은 방법으로 문을 열어야 한다. 예를 들어 3번째 통과하는 
문을 밀어서 열었다면, 6번째 통과하는 문 또한 밀어서 열어야한다.

유신이는 위의 규칙 4가지를 모두 알고 있음에도 불구하고 탈출하지 못하고 있다. 
유신이가 방을 탈출할 수 있도록 도와주는 프로그램을 만들어보자.
첫째 줄에 총 문의 개수 N(2 ≤ N ≤ 2,500,000,000)이 주어진다.
둘째 줄에는 유신이가 첫 번째 문을 통과할 때 문을 연 방법이 주어진다. 
밀어서 여는 법은 숫자 0, 당겨서 여는 법은 숫자 1로 표기된다.
두 번째 문부터 문을 여는 방법을 한줄에 하나씩 출력한다. 
만약 탈출이 불가능하다면 "Love is open door"를 출력한다.

>>>코드

n = int(input())
f = int(input())
if n>= 6:
    print('Love is open door')
else:
    if f == 1:
        for i in range(n-1):
            if i%2 == 0:
                print(0)
            else:
                print(1)
    else:
        for i in range(n-1):
            if i%2 == 0:
                print(1)
            else:
                print(0)



그냥 6 이상이면 무조건 love is open door 이다

7. 백준 17174 전체 계산 횟수
호근이는 한국에서 미국으로 유학을 하러 갔다. 
그는 생활비로 쓰기 위해 가지고 온 원화를 전부 달러로 바꾸기 위해 환전소를 찾아갔다. 
그런데 환전소에 1달러짜리 지폐를 제외하고는 다른 지폐가 없어서 전부 1달러 지폐로 바꾸어 숙소로 가져왔다. 
환전한 금액을 알고 있지만 불안한 마음에 숙소에서 다시 한 번 얼마인지 세어 보려고 한다.
호근이는 우선 1달러 지폐를 한 장씩 세면서 M개의 지폐를 한 묶음으로 만든다. 
그 다음에는 새로 만들어진 묶음을 하나씩 세면서 M개의 묶음을 다시 하나로 묶는다. 
더 이상 묶음이 만들어지지 않을 때까지 이 과정을 반복한다. 
이때 호근이가 묶음을 포함해 지폐를 센 전체 횟수를 구하여라.
예를 들어 N이 13이고 M이 10일 때, 13달러를 세기 위해서는 1달러씩 총 13번을 세고, 지폐 10장을 한 묶음으로 만들고, 한 개의 묶음을 다시 한 번 세어 총 14번을 세야 한다.
첫 번째 줄에 환전한 금액 N과 묶음의 크기 M이 주어진다. (2 ≤ N ≤ 100,000, 2 ≤ M ≤ N)
전체 센 횟수를 출력한다.

>>>코드

N, M = map(int, input().split())
c = 0
while N >= M:
    c += N
    N = N//M
print(c + N)


계속 나눠주면 된다

8. 백준 17618 신기한 수
평소에 수에 대한 관심이 많은 아이인 민철이는 오늘도 노트에 연필로 수를 더하거나 빼거나 곱하거나 나눠보면서 시간을 보내고 있다. 그러다가 18이라는 수는 신기한 성질을 가진다는 것을 알아냈다. 18을 이루는 각 자릿수인 1과 8을 합한 9는 18의 약수가 된다.
민철이는 18과 같이 모든 자릿수의 합으로 나누어지는 수를 여러 개 더 찾아냈는데, 12, 21도 그런 신기한 수였다. 민철이는 이렇게 모든 자릿수의 합으로 나누어지는 수를 “신기한 수”라고 부르기로 했다. 민철이는 더 큰 신기한 수를 찾아보기도 했는데 1729도 신기한 수라는 걸 알아내었다. 1729는 1+7+2+9=19로 나누어진다.
민철이는 신기한 수가 얼마나 많은지 알고 싶었다. 주어진 자연수 N에 대해 N이하인 신기한 수는 총 몇 개인지 궁금했다. 하지만 N이하의 모든 수에 대해서 신기한 수인지 아닌지를 손으로 알아내기는 시간이 너무 오래 걸렸다.
여러분은 민철이를 도울 수 있는 프로그램을 작성해야 한다. 입력으로 1 이상인 자연수 N이 주어질 때 N 이하인 신기한 수의 개수를 출력하는 프로그램을 작성하시오.
첫 번째 줄에 정수 N (1 ≤ N ≤ 10,000,000) 하나가 주어진다.
N 이하인 신기한 수의 개수를 정수로 출력한다.

>>>코드

N = int(input())
result = 0
for number in range(1, N+1):
    s = sum(int(i) for i in str(number))
    if number%s == 0:
        result += 1
print(result)



Pypy3 로만 만점이 나온다. 숫자가 너무커서 Python 3로는 시간초과가 나오는 듯 하다

9. 백준 15784 질투진서
컴퓨터공학과 에릭남 김진서는 주변에 자기보다 잘생긴 사람이 보이면 화가난다.
진서는 수업을 듣기위해 강의실에 앉아있다. 강의실에는 N행 N열로 의자가 놓여있다.
N행 N열의 의자 모두 사람들이 앉아있고 사람들의 매력지수 X[i][j] 가 주어진다. (1 ≤ i, j ≤ N) 
i행 j열의 매력지수는 X[i][j]이고, A 가 B 보다 매력지수가 더 높으면 A 가 더 잘생겼다고 할 수 있다.
진서는 자기보다 잘생긴 사람이 있는지 탐색을 하는데, 이때 자신과 같은 행인 의자에 앉아 있는 사람 또는 같은 열인 의자에 앉아 있는 사람만 볼 수 있다.
진서가 앉아있는 의자의 행 a 와 열 b가 주어질 때,  진서가 볼 수 있는 사람 중 자신보다 잘생긴 사람이 있다면 ANGRY, 그렇지 않다면 HAPPY를 출력하시오.
입력의 첫째 줄에 의자가 놓인 행과 열의 수 N(1 ≤ N ≤ 1000)이 주어지고 , 진서가 앉은 의자가 위치한 행 a, 열 b가 주어진다. 이후 두 번째 줄부터 N+1 줄까지 강의실에 앉아있는 학생들의 매력지수 X[i][j](1 ≤ X ≤ 50000)가 주어진다. X[i][j] 는 i행 j열에 앉은 학생의 매력지수이다. 
진서가 자기보다 잘생긴 사람을 본다면 ANGRY, 아니라면 HAPPY를 출력한다.

>>>코드

N, a, b = map(int, input().split())
handsome = []
r = 0
for i in range(N):
    handsome.append(list(map(int, input().split())))
for i in range(N):
    if handsome[a-1][b-1] < handsome[a-1][i] or handsome[a-1][b-1] < handsome[i][b-1]:
        r = 1
if r == 0:
    print('HAPPY')
else:
    print('ANGRY')



10. 백준 11966 2의 제곱인가?
자연수 N이 주어졌을 때, 2의 제곱수면 1을 아니면 0을 출력하는 프로그램을 작성하시오.
첫째 줄에 N(1 ≤ N ≤ 2**30)이 주어진다.
N이 2의 제곱수면 1을 아니면 0을 출력하는 프로그램을 작성하시오.

>>>코드

N = int(input())
two = [2**i for i in range(31)]
if N in two:
    print(1)
else:
    print(0)
728x90
반응형
728x90
반응형

5/ 21 파이썬 공부
1. 백준 10250 ACM 호텔 
ACM 호텔 매니저 지우는 손님이 도착하는 대로 빈 방을 배정하고 있다. 고객 설문조사에 따르면 손님들은 호텔 정문으로부터 걸어서 가장 짧은 거리에 있는 방을 선호한다고 한다. 여러분은 지우를 도와 줄 프로그램을 작성하고자 한다. 즉 설문조사 결과 대로 호텔 정문으로부터 걷는 거리가 가장 짧도록 방을 배정하는 프로그램을 작성하고자 한다.

문제를 단순화하기 위해서 호텔은 직사각형 모양이라고 가정하자. 각 층에 W 개의 방이 있는 H 층 건물이라고 가정하자 (1 ≤ H, W ≤ 99). 그리고 엘리베이터는 가장 왼쪽에 있다고 가정하자(그림 1 참고). 이런 형태의 호텔을 H × W 형태 호텔이라고 부른다. 호텔 정문은 일층 엘리베이터 바로 앞에 있는데, 정문에서 엘리베이터까지의 거리는 무시한다. 또 모든 인접한 두 방 사이의 거리는 같은 거리(거리 1)라고 가정하고 호텔의 정면 쪽에만 방이 있다고 가정한다.

방 번호는 YXX 나 YYXX 형태인데 여기서 Y 나 YY 는 층 수를 나타내고 XX 는 엘리베이터에서부터 세었을 때의 번호를 나타낸다. 즉, 그림 1 에서 빗금으로 표시한 방은 305 호가 된다.

손님은 엘리베이터를 타고 이동하는 거리는 신경 쓰지 않는다. 다만 걷는 거리가 같을 때에는 아래층의 방을 더 선호한다. 예를 들면 102 호 방보다는 301 호 방을 더 선호하는데, 102 호는 거리 2 만큼 걸어야 하지만 301 호는 거리 1 만큼만 걸으면 되기 때문이다. 같은 이유로 102 호보다 2101 호를 더 선호한다.

여러분이 작성할 프로그램은 초기에 모든 방이 비어있다고 가정하에 이 정책에 따라 N 번째로 도착한 손님에게 배정될 방 번호를 계산하는 프로그램이다. 첫 번째 손님은 101 호, 두 번째 손님은 201 호 등과 같이 배정한다. 
그림 1 의 경우를 예로 들면, H = 6이므로 10 번째 손님은 402 호에 배정해야 한다.

프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수를 포함하고 있으며 각각 호텔의 층 수, 각 층의 방 수, 몇 번째 손님인지를 나타낸다(1 ≤ H, W ≤ 99, 1 ≤ N ≤ H × W). 
프로그램은 표준 출력에 출력한다. 각 테스트 데이터마다 정확히 한 행을 출력하는데, 내용은 N 번째 손님에게 배정되어야 하는 방 번호를 출력한다.

>>>코드

T = int(input())
for i in range(T):
    H, W, N = map(int, input().split())
    if (N-1)//H + 1<10:
        print('%d0%d' %((N-1)%H + 1, (N-1)//H + 1))
    else:
        print('%d%d' %((N-1)%H + 1, (N-1)//H + 1))



2. 백준 13311 행운의 편지
지구이는 어느 날 다음과 같은 편지를 받았다.

“이 편지는 영국에서 최초로 시작되어 일년에 한 바퀴 돌면서 받는 사람에게 행운을 주었고 지금은 당신에게로 옮겨진 이 편지는 12시간 안에 아래 쓰여있는 문제를 풀어야 합니다. 이 편지를 포함해서 7통을 행운이 필요한 사람에게 보내 주셔야 합니다. 복사를 해도 좋습니다. ...(중략)… 2부터 1000까지의 자연수 a에 대하여, n ≡ a­-1 (mod a)인 정수 n을 구하여라.“

실수로 편지를 끝까지 읽어버린 지구이는 문제도 풀지 못해 너무 찜찜해졌다. 지구이를 도와 문제를 대신 풀어주자!
입력은 없다.
첫 번째 줄에 432자리 이내의 숫자 n을 출력한다.
출력 예시는 답이 아님에 주의하라.

>>>코드

print('-1')



이게 문제를 이해하는게 어려울 수 있다
mod 라는 것은 나머지를 구하는 부호(%)라고 생각하면 된다
따라서 2부터 1000까지의 정수 중에 어떠한 수로 나누어도 나머지가 나눈 수 -1로 나오는 숫자를 구하라는 것
즉 -1이다.

1) 모듈러 연산( == 합동식)
A  ≡ B(mod m)이라고 쓰며
m| (A-B) 라는 뜻이다
즉 A를 m으로 나누었을 경우 나머지가 B라는 의미를 가지고 있다

2) 모듈러 연산의 성질
A  ≡ B(mod m) & C  ≡ D(mod m) 일 때,
>>> A + C ≡ B + D(mod m)
>>> AC  ≡ BD(mod m)
>>> AC  ≡ BC(mod m)
>>> A**C  ≡ B**C(mod m)

3. 백준 12756 고급 여관
"럭키스톤"은 카드를 통해 대결하는 게임이다. 창식이는 럭키스톤을 자주 한다.
이 게임의 카드에는 공격력과 생명력이 표시되어있다. 왼쪽에는 공격력이, 오른쪽에는 생명력이 숫자로 적혀있다.
서로 꺼낸 카드를 비교하여 남길 카드를 결정하는 데, 카드의 비교는 다음과 같이 이루어진다.

-비교하는 카드의 공격력만큼 동시에 서로 상대 카드의 생명력을 깎는다. 줄어든 생명력은 다시 회복되지 않는다.
-생명력이 0 이하인 경우에는 카드는 죽은 상태로 전환된다.
-카드가 두 장 모두 남아있다면 비교를 계속한다.

요즘 따라 게임이 안 풀리는 창식이는 대전 전에 가능한 수를 미리 계산하여 최대한 이득을 챙기고 싶어 한다.
카드 2개의 공격력과 생명력이 주어지면 어떤 플레이어의 카드가 남아있을지 출력하는 프로그램을 작성해주자.
첫째 줄에 플레이어 A가 꺼낸 카드의 공격력과 생명력이 주어진다.
둘째 줄에 플레이어 B가 꺼낸 카드의 공격력과 생명력이 주어진다.
카드의 공격력과 생명력은 100,000 이하의 자연수이다.
플레이어 A의 카드가 남아있다면 "PLAYER A"를, 플레이어 B의 카드가 남아있다면 "PLAYER B"를 출력한다.
모두 죽은 상태라면 "DRAW"를 따옴표 없이 출력한다.

>>>코드

a1, a2 = map(int, input().split())
b1, b2 = map(int, input().split())
while a2>0 and b2>0:
    a2, b2 = a2 - b1, b2 - a1
if a2<=0 and b2<=0:
    print('DRAW')
elif a2<= 0:
    print('PLAYER B')
else:
    print('PLAYER A')



4. 백준 2920 음계
다장조는 c d e f g a b C, 총 8개 음으로 이루어져있다. 
이 문제에서 8개 음은 다음과 같이 숫자로 바꾸어 표현한다. c는 1로, d는 2로, ..., C를 8로 바꾼다.
1부터 8까지 차례대로 연주한다면 ascending, 8부터 1까지 차례대로 연주한다면 descending, 둘 다 아니라면 mixed 이다.
연주한 순서가 주어졌을 때, 이것이 ascending인지, descending인지, 아니면 mixed인지 판별하는 프로그램을 작성하시오.
첫째 줄에 8개 숫자가 주어진다. 이 숫자는 문제 설명에서 설명한 음이며, 1부터 8까지 숫자가 한 번씩 등장한다.
첫째 줄에 ascending, descending, mixed 중 하나를 출력한다.

>>>코드

pitch = list(map(int, input().split()))
if pitch == sorted(pitch):
    print('ascending')
elif pitch == sorted(pitch, reverse = True):
    print('descending')
else:
    print('mixed')



5. 백준 8958 OX 퀴즈
"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 
문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 
예를 들어, 10번 문제의 점수는 3이 된다.
"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.
첫째 줄에 테스트 케이스의 개수가 주어진다. 
각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 
문자열은 O와 X만으로 이루어져 있다.
각 테스트 케이스마다 점수를 출력한다.

>>>코드

T = int(input())
for i in range(T):
    answer = input()
    r = []
    s = 0
    for j in range(len(answer)):
        if answer[j] == 'O':
            s += 1
            r.append(s)
        else:
            s = 0
    print(sum(r))



6. 백준 2577 숫자의 개수
세 개의 자연수 A, B, C가 주어질 때 A × B × C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.
예를 들어 A = 150, B = 266, C = 427 이라면 A × B × C = 150 × 266 × 427 = 17037300 이 되고, 계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다.
첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다.
첫째 줄에는 A × B × C의 결과에 0 이 몇 번 쓰였는지 출력한다. 마찬가지로 둘째 줄부터 열 번째 줄까지 A × B × C의 결과에 1부터 9까지의 숫자가 각각 몇 번 쓰였는지 차례로 한 줄에 하나씩 출력한다.

>>>코드

A = int(input())
B = int(input())
C = int(input())
r = str(A*B*C)
for i in range(10):
    print(r.count(str(i)))



7. 백준 17614 369
민수는 같은 반 친구들과 369게임을 하고 있다. 
369게임은 여러 명이 원형으로 둘러 앉아 시작 위치의 사람이 1을 외치며 시작된다. 
이후 시계방향으로 돌아가며 2, 3, 4와 같이 1씩 증가된 수가 자기 수가 된다. 
순서대로 돌아오는 자기 수에 3, 6, 혹은 9가 포함되어 있지 않다면 그 수를 말해야 하며, 3, 6, 혹은 9가 포함되어 있으면 그 개수만큼 박수를 쳐야 한다. 이 규칙을 지키지 못하면 게임이 종료된다.
민수는 369게임이 N까지 규칙을 지키며 진행된다면 그때까지의 들은 박수의 횟수 가 총 몇 번인지 궁금했다. 예를 들어 N = 14라면, 3, 6, 9, 13에서 각각 한 번의 박 수를 치게 되므로 총 4회의 박수를 듣게 될 것이다. N = 36이라면 3, 6, 9, 13, 16. 19. 23. 26. 29. 30. 31. 32. 33. 34. 35, 36에서 박수를 치게 되는데 33, 36에서는 각 각 두 번 박수를 쳐야 하므로 총 18회가 된다. 1 이상의 정수 N에 대하여 369게임을 N까지 규칙을 지키며 진행된다면 그때까지 듣게 되는 박수의 총 횟수를 계산하여 출력하는 프로그램을 작성하시오.
첫 번째 줄에 정수 N이 주어진다 (1 ≤ N ≤ 106).
박수의 총 횟수를 정수로 출력한다.

>>>코드

N = int(input())
r = 0
for i in range(N):
    n = str(i+1)
    r += (n.count('3')+n.count('6')+n.count('9'))
print(r)


8. 백준 28114 팀명 정하기
현대 모비스는 모빌리티 SW 해커톤, 알고리즘 경진대회, 채용 연계형 SW 아카데미 등 다양한 SW 인재 발굴 프로그램을 진행하고 있다. 지난 2월에 개최된 모빌리티 SW 해커톤은 국내 14개 대학의 소프트웨어 동아리 20개 팀, 70여 명이 참여해 모빌리티 소프트웨어 개발 실력을 겨뤘다.
숭실대학교 컴퓨터학부 문제해결 소모임 SCCC 부원들은 매년 모빌리티 SW 해커톤, SCON, ICPC와 같은 팀 대회에서 사용할 팀명을 정하기 위해 많은 고민을 한다. 졸업을 한 학기 남겨둔 성서는 더 이상 부원들이 팀명으로 고통을 받지 않도록 가이드라인을 만들었다.
성서의 가이드라인에 따르면 팀 이름을 짓는 방법은 두 가지가 있다.

(1) 세 참가자의 입학 연도를 100으로 나눈 나머지를 오름차순으로 정렬해서 이어 붙인 문자열
(2) 세 참가자 중 성씨를 영문으로 표기했을 때의 첫 글자를 백준 온라인 저지에서 해결한 문제가 많은 사람부터 차례대로 나열한 문자열
예를 들어 600문제를 해결한 18학번 안(AHN)씨, 2000문제를 해결한 19학번 이(LEE)씨, 6000문제를 해결한 20학번 오(OH)씨로 구성된 팀을 생각해 보자. 첫 번째 방법으로 팀명을 만들면 181920이 되고, 두 번째 방법으로 팀명을 만들면 OLA가 된다.
2000문제를 해결한 19학번 이(LEE)씨, 9000문제를 21학번 나(NAH)씨, 1000문제를 해결한 22학번 박(PARK)씨로 구성된 팀은 첫 번째 방법으로 팀명을 만들면 192122가 되고, 두 번째 방법으로 팀명을 만들면 NLP가 된다.
세 팀원의 백준 온라인 저지에서 해결한 문제의 개수, 입학 연도, 그리고 성씨가 주어지면 첫 번째 방법과 두 번째 방법으로 만들어지는 팀명을 차례대로 출력하는 프로그램을 작성하라.

첫째 줄에 첫 번째 팀원이 백준 온라인 저지에서 해결한 문제의 개수 P_1, 입학 연도 Y_1, 성씨 S_1이 공백으로 구분되어 주어진다.
둘째 줄과 셋째 줄에는 두 번째 팀원의 정보 P_2,Y_2,S_2와 세 번째 팀원의 정보 P_3,Y_3,S_3이 첫째 줄과 같은 형식으로 주어진다.
첫째 줄에 첫 번째 방법으로 만든 팀명을 출력한다.
둘째 줄에 두 번째 방법으로 만든 팀명을 출력한다.

>>>코드

PS, Y = [], []
for i in range(3):
    p, y, s = input().split()
    Y.append(y)
    PS.append([p, s])
Y.sort()
for i in range(3):
    print(Y[i][2::], end = '')
    if i == 2:
        print()
PS.sort(reverse = True, key = lambda x: int(x[0]))
for i in range(3):
    print(PS[i][1][0], end = '')


길다. 그리고 헤멨다. 다른 방법이 있을 것 같은데...

>>>코드2

PS, Y = [], []
for i in range(3):
    p, y, s = input().split()
    Y.append(int(y))
    PS.append([p, s])
Y.sort()
r1 = [str(Y[i])[2::] for i in range(3)]
print(''.join(r1))
PS.sort(reverse = True, key = lambda x: int(x[0]))
r2 = [PS[i][1][0] for i in range(3)]
print(''.join(r2))



만족스럽진 않지만 일단 오케이

9. 백준 23348 스트릿 코딩 파이터
대한민국 최고의 알고리즘 동아리를 찾기 위한 리얼리티 서바이벌. 잔혹한 코딩판에서 살아남기 위한 대학생들의 자존심을 건 생존 경쟁이 시작된다!
스트릿 코딩 파이터는 최근 모임을 갖지 못하게 된 알고리즘 동아리들을 위해 방송사에서 제작한 특별 프로그램이다.
참가한 동아리들은 3인 1팀으로 팀을 구성해 각자 라이브로 문제를 풀고 심사를 받는다.
심사기준은 정답과 상관없이 멋있게 문제를 푸는 사람들이 유리한 점수를 가져가게 되는데, 이때 점수가 부여되는 공식적인 기술은 '한손 코딩', '노룩 코딩', '폰코딩'으로 총 3가지이고, 각 기술들에는 난이도가 다르게 부여된다.
심사 방식은 다음과 같다.
동아리의 총 점수는 구성원들의 개인 점수 합이다.
개인 점수는 세 가지 기술 점수의 합이다.
기술 점수는 해당 기술의 난이도와 사용한 횟수를 곱한 값이다.
예를 들어 '한손 코딩', '노룩 코딩', '폰코딩'의 난이도가 각각 3, 6, 9이며 플레이어 
P가 위 기술을 각각 1, 2, 3번 보여주었다면, 
P의 점수는 (3 * 1) + (6 * 2) + (9 * 3) = 42점이 된다.

기술의 난이도와 동아리 별 각 팀원들이 사용한 기술의 횟수가 주어진다. 가장 높은 점수를 받은 동아리의 점수는 몇 점인지 구하는 프로그램을 작성하시오.
첫째 줄에 세 가지 기술의 난이도 A, B, C가 '한손 코딩', '노룩 코딩', '폰코딩' 순서대로 공백을 사이에 두고 주어진다. (0 <= A, B, C <= 1,000)

둘째 줄에 참가한 동아리의 수 N이 주어진다. (1 <= N <= 1,000)

셋째 줄부터 3N 개의 줄에 걸쳐 세 줄마다 각 동아리의 기술 사용 정보가 주어진다. 

세 개의 줄에는 각 줄마다 동아리를 구성하는 각 동아리원이 사용한 기술의 횟수 a, b, c가 '한손 코딩', '노룩 코딩', '폰코딩' 순서대로 공백을 사이에 두고 주어진다. (0 <=  a, b, c  <= 100)

>>>코드

A, B, C = map(int, input().split())
n = int(input())
R = []
for i in range(n):
    r = 0
    for j in range(3):
        a, b, c = map(int, input().split())
        r += (a*A + b*B + c*C)
    R.append(r)
print(max(R))



10. 백준 23972 악마의 제안
어느 날, 민주는 꿈에서 악마를 만나게 되었다. 
악마는 자신에게 K원을 지불하면, 지불하고 남은 금액을 N배로 만들어준다고 한다.
민주는 자신이 최소 몇 원을 가지고 있어야 악마에게 K원을 지불했을 때 손해를 보지 않는지 알고 싶다.
악마가 제안한 K와 N이 주어졌을 때, 민주가 손해 보지 않기 위해 가지고 있어야 하는 최소 금액 X를 구해주자. 
단, 금액은 정수여야 한다.
첫째 줄에 악마가 제안한 정수 K와 N이 공백을 사이에 두고 주어진다. (1 ≤ K, N ≤ 200,000,000)
민주가 손해 보지 않기 위해 가지고 있어야 하는 최소 금액 X를 출력한다.
항상 민주가 손해를 보게 된다면 -1을 출력한다.

>>>코드

K, N = map(int, input().split())
if N == 1:
    print(-1)
else:
    if (N*K)%(N-1) == 0:
        print((N*K)//(N-1))
    else:
        print((N*K)//(N-1) +1)



N 이 1이면 돈을 하나도 못불려주기 때문에 K원만 지불하는 꼴이 된다.
따라서 N =1일때 -1 출력하면 된다.

11. 백준 23303 이 문제는 D2입니다.
올해도 연세대학교 프로그래밍 경진대회가 열렸다!
병철이는 원래 대회에 출전하여 상금을 타갈 생각을 하고 있었으나, 갑자기 출제진으로 끌려가게 되어버렸다.
출제진으로 끌려온 병철이에게 연세대학교 프로그래밍 경진대회는 지원을 받지 못하면 출제진이 사비로 상금을 지급해야 한다는 충격적인 소식이 들려왔지만, 다행히 지원을 받았기에 그런 대참사는 막을 수 있었다.
지갑이 털릴 위기를 벗어난 병철이는 바로 백준을 켜 D2 난이도의 문제를 풀었고, 대회 참가자들에게도 D2 난이도의 문제를 내려고 한다!
그러나 실력이 딸려 D2 난이도의 문제를 낼 순 없었기에, 그냥 문제 이름을 D2로 했다.
여러분들도 (이름만) D2급 문제를 풀어보자!
첫 줄에 알파벳 대소문자 및 숫자, 그리고 공백으로 구성된 문자열이 들어온다. 이 문자열의 길이는 10,000자 이하다.
문자열의 맨 앞이나 맨 뒤는 공백이 아님이 보장된다.
문자열 안에 D2나 d2가 들어있다면 D2를 출력한다. 두 글자는 반드시 붙어있어야 하며, D/d와 2 사이에 공백이 있어도 안 된다.
만약 문자열 안에 해당 문자가 없다면 unrated를 출력한다.

>>>코드

n = input()
if 'D2' in n or 'd2' in n:
    print('D2')
else:
    print('unrated')



12. 백준 23080 스키테일 암호
고대 그리스의 옛 나라인 스파르타의 군대에서는 비밀메시지를 전하는 방법으로 스키테일 암호를 사용했다.

스키테일 암호는 스키테일(Scytale)이라고 하는 정해진 굵기의 원통형 막대에 종이로 된 리본을 위에서 아래로 감은 다음 옆으로 메시지를 적는 방식으로 메세지를 암호화한다. 리본을 풀어 길게 늘어선 글을 읽으면 무슨 뜻인지 전혀 알 수 없지만, 암호화할 때와 같은 굵기의 막대에 감으면 내용을 알 수 있게 된다.
다음은 굵기 3의 막대를 사용하여 "iupc" 라는 문자열을 암호화하는 예시이다.
굵기가 X인 막대에 리본을 감고 세로로 글자 X개를 적으면 막대를 한바퀴 돌아오게 된다. 이 막대는 굵기가 3이므로, 세로로 3글자를 적으면 막대를 한바퀴 돌아올 것이다.
암호화하는 문자열을 리본의 가장 왼쪽 끝 부분을 포함하는 가로 한 줄만 사용하여 쓰고, 남은 공간은 아무 문자로나 채운다.
마지막으로 막대에서 리본을 풀면 암호화가 완료된다.
스키테일 암호로 암호화한 문자열과 막대의 굵기가 주어진다. 암호를 해독해 보자!

첫 번째 줄에 막대의 굵기 K가 주어진다. 두 번째 줄에 알파벳 소문자만으로 구성된 암호문 S가 주어진다.
첫 번째 줄에 암호문을 해독한 결과를 출력한다.

>>>코드

K = int(input())
S = input()
for i in range(len(S)):
    if i%K == 0:
        print(S[i], end = '')



13. 백준 22938 백발백준하는 명사수
백발백준은 무슨 과녁이던 백발백중하여 올림픽 금메달보다 따기 어렵다는 대한민국 양궁 국가대표 타이틀을 가지고 있다. 이런 백발백준이 현재 연마하는 스킬이 있는데...
바로 두 과녁을 한번에 맞추는 스킬이다. 이를 연습하기 위해 두 과녁이 겹치는 부분이 있어 한번에 맞추기가 가능한지 알아보고 싶어졌다.
여러분은 백발백준이 연습하는 과정을 도와주기 위해 원 모양으로 생긴 두 과녁이 겹치는 부분이 존재하는지 확인하는 프로그램을 작성해보자.
첫번째 줄에는 첫번째 과녁의 중심 X1, Y1와 반지름 R1이 주어진다.
두번째 줄에는 두번째 과녁의 중심 X2, Y2와 반지름 R2가 주어진다.
X1, X2, Y1, Y2는 모두 정수이며, R1, R2는 모두 자연수이다.
-10**9 ≤ X1, X2, Y1, Y2 ≤ 10**9, 0 < R1, R2 ≤ 10**9

두 과녁이 겹치면 YES, 아니면 NO를 출력한다.
단, 두 과녁이 한 점에서 만나는 경우는 겹치지 않는 것으로 생각한다.

>>>코드

x1, y1, r1 = map(float, input().split())
x2, y2, r2 = map(float, input().split())
if ((x1-x2)**2 + (y1-y2)**2)**0.5< r1+r2:
    print('YES')
else:
    print('NO')



14. 백준 21964 선린인터넷고등학교 교가
드높은 남산 위에 우뚝 선

송백은 흰 눈빛에 푸르고

옛부터 흘러가는 한가람

장 할 손 우리 학원 이룩한

굳세고 다함 없는 거룩한 뜻이

백이십년 빛난 역사 자랑이로세

비바람 몰아쳐도 나가자

공들여 쌓은 탑은 빛난다

울려라 삼천리에 힘차게

세워라 반석 위에

선린의터를

선린인터넷고등학교 학생들은 이미 잘 알고 있겠지만, 학교 교가를 부를 때는 마지막 5글자인 "선린의터를" 부분만 크고 우렁차게 불러야 한다.
정휘는 여기에 영감을 받아, 문자열이 주어지면 마지막 5글자만 우렁차게 읽으려고 한다. 공백이 없는 문자열이 주어지면 마지막 5글자만 출력하는 프로그램을 작성해보자.

첫 번째 줄에 문자열의 길이 N이 주어진다.
두 번째 줄에는 N글자로 이루어진 문자열 S가 주어진다.
S의 마지막 5글자를 출력한다.

>>>코드

N = int(input())
S = input()
print(S[N-5:])



15. 백준 21866 추첨을 통해 커피를 받자
연세대학교 컴퓨터과학과 프로그래밍 경진대회는 2015년부터 지금까지 총 6번 진행되었다.
지금까지 진행했던 대회의 수상자는 대부분 고학번 학생들이었다. 이러한 이유로 국렬이는 신입생들에게 알고리즘 문제 풀이에 대한 동기를 부여하기 위해 2021 연세대학교 신입생 프로그래밍 경진대회를 열게 되었다.
국렬이는 가능한 많은 사람들이 대회에 많이 참여하는 것을 원하기 때문에, 대회에 참가한 학생들 중 수상자를 제외한 나머지 사람들에게 추첨을 통해서 커피를 나누어주려고 한다. 대회에 신청만 하고 참여하지 않는 학생들이 커피를 받는 상황을 막기 위해 총점이 일정 점수 이상인 학생들만을 대상으로 추첨을 하려고 한다.
2021 연세대학교 신입생 프로그래밍 경진대회는 총 9문제로 구성되어 있으며, 각 문제 당 최대 점수는 100점, 100점, 200점, 200점, 300점, 300점, 400점, 400점, 500점이다. 만약 받은 점수의 합계가 100점 이상이라면 추첨 대상자가 된다.
몇몇 참가자들이 상금을 받기 위해서 자신들의 점수를 조작하는 상황이 발생했다. 만약 어떤 학생이 각 문제에서 받은 점수 중, 그 문제의 최대 점수를 넘어가는 것이 한 개라도 있다면 그 학생을 해커로 간주하려고 한다. 해커로 간주된 학생에게는 커피를 무조건 나눠줄 예정이다.
어떤 학생이 각 문제에서 얻은 점수가 주어졌을 때, 해당 학생이 추첨 대상자인지, 추첨 대상자가 아닌지, 혹은 해커인지를 구분해보자.
첫 번째 줄에 9개의 정수가 주어진다. 각 정수는 0 이상 1,000 이하의 정수다. 각 정수는 해당 학생이 각 문제에서 얻은 점수를 의미한다.
커피 추첨 대상자가 아니라면 none을 출력하고, 해커라면 hacker를 출력한다. 그 외의 경우에는 draw를 출력한다.

>>>코드

score = list(map(int, input().split()))
correct = [100, 100, 200, 200, 300, 300, 400, 400, 500]
r = 0
for i in range(9):
    if score[i] > correct[i]:
        print('hacker')
        r = 1
        break
if sum(score)>=100 and r == 0:
    print('draw')
elif sum(score)<100 and r == 0:
    print('none')
728x90
반응형
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