W1. D5 - 백준 (5585번, 1541번, 1931번)

Dazz_heyDay ·2021년 7월 2일
1

Python) Algorithm_study

목록 보기
5/39

✏️문제 5585🔥

문제
타로는 자주 JOI잡화점에서 물건을 산다. JOI잡화점에는 잔돈으로 500엔, 100엔, 50엔, 10엔, 5엔, 1엔이 충분히 있고, 언제나 거스름돈 개수가 가장 적게 잔돈을 준다. 타로가 JOI잡화점에서 물건을 사고 카운터에서 1000엔 지폐를 한장 냈을 때, 받을 잔돈에 포함된 잔돈의 개수를 구하는 프로그램을 작성하시오.

입력조건:입력은 한줄로 이루어져있고, 타로가 지불할 돈(1 이상 1000미만의 정수) 1개가 쓰여져있다.
출력조건:제출할 출력 파일은 1행으로만 되어 있다. 잔돈에 포함된 매수를 출력하시오.

코인 리스트를 형성->반복문이용.

내 코드

count=0
N=int(input())
change=1000- N
Coin_list=[500,100,50,10,5,1]


for i in Coin_list:
    coinV=change//i
    change=change%i
    if coinV !=0:
        count=count+coinV
print(count)

리스트로 묶으면 반복문을 훨씬 간결하게!


✏️문제 1541🔥

문제
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.

입력조건:첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
출력조건:첫째 줄에 정답을 출력한다.

"-"를 기준으로 split-> 1번째 요소부터 "+"기준으로 split(첫 번째 요소 제외)
첫번째 요소이외의 요소는 모두 뺀다.

예)
60+10-20-40+20
[60+10,20,40+20]-> [20,40,20]
70-20-40-20=-10

내 코드

ss=input().split('-')
print(ss)
sum=0
for i in ss[0].split('+'):
    sum=sum+int(i)
print(sum)
for j in ss[1:]:
    for k in j.split('+'):
        sum=sum-int(k)

print(sum)

묶어서 풀수도 있다는 아이디어!


✏️문제 1931🔥🔥🔥

문제
한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다.

입력조건:첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 각 회의의 정보가 주어지는데 이것은 공백을 사이에 두고 회의의 시작시간과 끝나는 시간이 주어진다. 시작 시간과 끝나는 시간은 231-1보다 작거나 같은 자연수 또는 0이다.
출력조건:첫째 줄에 최대 사용할 수 있는 회의의 최대 개수를 출력한다.

point=끝나는 시간!(빨리 끝나는 시간순)

내 코드

N = int(input())
ss = []
for i in range(N):
    start, end = map(int, input().split())
    ss.append([start, end]) #배열에 시작과 끝 넣기
    ##print(ss)
ss = sorted(ss, key=lambda a: a[0]) ##정렬하기 
ss = sorted(ss, key=lambda a: a[1])
last = 0
count = 0
for i, j in ss:
    if i >= last: ##같을때도 포함하기 
        count = count+1
        last = j
print(count)

정렬하고 비교하기!

###보완할 점
난이도가 조금만 어려워지면 시간이 꽤나 많이 걸린다.
->파이썬 문법을 더 공부해야겠다..

profile
Why.Not.Now

2개의 댓글

comment-user-thumbnail
2021년 7월 4일

두번째 문제 코드 좋은 것 같아요! 저는 풀지 못해 정답 코드를 찾아봤는데 저 코드가 가장 이해하기 쉬워 보이더라고요~ 세번째 문제도 푸신거 정말 대단해보입니다!! 수고하셨어요👍

답글 달기
comment-user-thumbnail
2021년 7월 4일

안녕하세요 알고리줌입니다 글 잘봤습니다!
코드가 가독성이 좋아 읽기 편하네요. 각 문제마다 문제 풀이의 아이디어를 한줄씩 써주는것도 좋은것같습니다
수고하셧습니다!!

답글 달기