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)'백준 > 백준 파이썬' 카테고리의 다른 글
| 백준 파이썬 Today I Learn 2023.05.25 (1) | 2023.05.26 |
|---|---|
| 백준 파이썬 Today I Learn 2023.05.24 (1) | 2023.05.25 |
| 백준 파이썬 Today I Learn 2023.05.22 (0) | 2023.05.23 |
| 백준 파이썬 Today I Learn 2023.05.21 (2) | 2023.05.22 |
| 백준 파이썬 Today I Learn 2023.05.20 (0) | 2023.05.21 |