[백준/Python] 2805번 나무 자르기
·
알고리즘문제풀이
문제https://www.acmicpc.net/problem/2805문제풀이(시간초과)# 시간초과n, m = map(int, input().split())tree = list(map(int, input().split()))hap = 0tree.sort()max = tree[n-1]while hap :    hap = 0    max -= 1    for i in range(n):        if tree[i] - max >= 0:            hap += tree[i] - maxprint(max) 처음 이 문제를 접했을 때는 나름 풀만하다고 생각해서 내 나름대로 반복문으로 풀어보았다.혼자서 이것 저것 고치면서 풀고 난 후 백준에 답을 제출했는데 시간초과 시간초과를 해결할 방법은 이진탐색이었다. ..
[백준/Python] 18110번 solved.ac
·
알고리즘문제풀이
문제https://www.acmicpc.net/problem/18110문제이해난이도 의견 중 앞뒤로 15%를 제외하고 평균을 구하는 문제이다. 생각보다 간단한 문제라 금방 풀겠구나 했지만 이 문제에는 함정이 있었다..파이썬에서 round함수를 사용할 때 4.5를 반올림하면 결과값이 5가 아니라 4가 된다는 것이다..!!!문제풀이(ZeroDivisionError)# ZeroDivisionErrorn = int(input())cut = n * 0.15cut = int(round(cut, 0))lv = []for _ in range(n):    s = int(input())    lv.append(s)lv.sort()lv = lv[cut:n-cut]answer = sum(lv) / len(lv)print(in..
[백준/Python] 10610번 30
·
알고리즘문제풀이
문제https://www.acmicpc.net/problem/10610 문제이해30의 배수를 구하고 그 중 가장 큰 수를 출력하라는 문제이다.처음에는 n의 글자수를 다 분리해서 조합을 해 경우의 수를 다 만들고 30의 배수를 판별하려 했다.하지만 그것은 너무 복잡한것...!! 30의 배수의 특징이 이 문제의 킥이었다. ※ 30의 배수 특징3의 배수이면서 0으로 끝나야 한다.여기서 3의 배수를 판별하는 방법중 유명한 방법이 있다.각 자리수의 합이 3의 배수이면 그 수는 3의 배수이다! 30의 배수를 판별한 후에는 문제가 아주 쉬워졌다.30의 배수 중 가장 큰 수를 찾는 것은 각 자리 수를 큰 수부터 정렬하면 된다.정답n = input()total = 0for i in range(len(n)):    tot..
[백준/Python] 14425번 문자열 집합
·
알고리즘문제풀이
문제https://www.acmicpc.net/problem/14425문제이해처음에는 문제가 이해되지 않았다.천천히 다시 읽어보니 간단한 문제였다.n개의 줄에 있는 단어들을 이용해서 m개의 줄에 몇 개의 단어가 존재하는지 개수를 세는 문제이다.정답n, m = map(int, input().split())answer = 0string = []for _ in range(n):    nlist = input()    string.append(nlist)for _ in range(m):    mlist = input()    if mlist in string:        answer += 1print(answer)string변수의 리스트에 n개의 줄에 있는 단어를 추가하고 mlist에 그 단어가 있으면 정답을..
[백준/Python] 2003번 수들의 합 2
·
알고리즘문제풀이
문제https://www.acmicpc.net/problem/1003문제해결(시간초과)# 시간초과n, m = map(int, input().split())su = list(map(int, input().split()))start, end = 0, 1cnt = 0while end :    tmp_sum = sum(su[start:end]) # 비효율    if tmp_sum :        end += 1    elif tmp_sum > m:        start += 1    else:        cnt += 1print(cnt) 시간초과가 된 이유는tmp_sum = sum(su[start:end])이 부분의 코드가 계속 계산되기 때문에 효율적이지 못해서이다.정답(투포인터)# 투 포인터n, m = m..
[백준/Python] 1003번 피보나치 함수
·
알고리즘문제풀이
문제https://www.acmicpc.net/problem/1003문제풀이처음에는 재귀함수로 풀었는데 시간초과가 떠버렸다# 시간초과 : 재귀함수def fibo_zo(x):    if x == 0:        z, o = 1, 0        return (z, o)    elif x == 1:        z, o = 0, 1        return (z, o)    else:        return (fibo_zo(x-2)[0] + fibo_zo(x-1)[0], fibo_zo(x-2)[1] + fibo_zo(x-1)[1])T = int(input())for _ in range(T):    n = int(input())    print(fibo_zo(n)[0], fibo_zo(n)[1]) 그래서 ..