728x90

백준 18

백준 2839

#2839 n = int(input()) answer = 0 while n >= 0: if(n % 5) == 0: answer += (n // 5) print(answer) break n -= 3 answer += 1 else: print(-1) 처음에는 이 문제를 노가다로 풀려고 했는데 줄이 너무 길어져서 다시 고민했다. 힌트를 얻기 위해 검색하던 중, 이 문제가 그리디 알고리즘이라는 것을 알게 되었다. "그리디 알고리즘"은 잔돈 거슬러 주기에서 많이 쓰이는 알고리즘이라고 한다. 코드의 풀이를 하자면, n을 입력 받은 후, n이 가장 큰 수인 5로 나누어진다면 바로 답을 구하고, 그렇지 않으면 -3을 해줌으로써, 3으로 한 번 나누어졌다고 생각할 수 있으므로 answer에는 1을 더해준다. 이런 식으로..

백준 2775

#2775 t = int(input()) # test case for i in range(t): k = int(input()) # 층 n = int(input()) # 호 f0 = [x for x in range(1,n+1)] for j in range(k): for k in range(1,n): f0[k] += f0[k-1] print(f0[-1]) t는 test case, k,n은 각각 층과 호수라고 할 때, 손으로 직접 계산한다면 다음과 같다. 1호 2호 3호 0층 1 2 3 1층 1 3(1+2) 5(2+3) 2층 1 4 8 3층 1 5 12 위의 표처럼 만들어질 수 있도록 f0 list를 만들어준다. 그 후 층수에 대한 호수만큼 for문을 돌려 k층일 때, (k-1)층의 n의 호수만큼 더해준다. ..

백준 2869

#2869 a,b,v = map(int, input().split()) # x : 걸리는 일이라고 한다면, (x-1)까지 a-b만큼 올라갈 것이고 마지막 날은 a만큼만 올라간다. # 그러므로 (x-1)(a-b) + a >= v # 따라서 x에 관한 식은 : (v-a)/(a-b) + 1 # 소수는 모두 올림해야한다. import math count = math.ceil((v-a)/(a-b)) + 1 print(count) . . . 나는 단순하게 처음부터 더하고 빼고 그날을 세어 결과를 만들었다. 그렇게 하였더니 예제 3이 제 값이 나오지 않았다. 차근차근 다시 생각하고 힌트를 얻은 후 다시 작성하였더니 짧고 간결하게 나왔다. 항상 생각하지만 코드 하나 구현하는데 참 많은 생각과 시간이 필요하다.

백준 1712, 2292

#1712 a = int(input()) # a: 고정비용 b: 가변비용 c: 노트북 가격 b = int(input()) c = int(input()) if b >= c: print(-1) else: print(int(a/(c-b) +1)) 처음 봤을 땐 글부터 이해를 하지 못했다 ㅋㅋ 천천히 읽어보자면, x = 생산 대수일 때, a+b*x = c 이면 손익분기점을 가질 수가 없다. 손해가 커지니까! 수학적인 계산만 해낸다면 생각해낼 수 있는 문제였다. #2292 n = int(input()) room = 1 move = 6 cnt = 1..

백준 1152,2908,5622

#1152 word = input().split() print(len(word)) #2908 a,b = input().split() a_reverse = int(a[::-1]) b_reverse = int(b[::-1]) print(max(a_reverse, b_reverse)) #5622 word = input() list = ['ABC','DEF','GHI','JKL','MNO','PQRS','TUV','WXYZ'] time = 0 for j in range(len(word)): for i in list: if word[j] in i: time += list.index(i)+3 print(time) 2908번에서 역순으로 넣으려고 reverse를 쓰다가 str에만 된다는것을 깨닫고 했지만 잘못 쓴건지..

728x90
반응형