전체 글 474

[Python/BOJ] 백준 1106 호텔_DP

문제에서 적어도 c명을 늘리는 것이므로 더 많이 늘리는 것도 생각을 해주어야 하기 때문에 dp의 크기를 c+100으로 한다. 100의 이유는 100명보다 작거나 같게만 고객의 수가 비용에 따라 증가할 수 있기 때문이다. 입력받은 (비용과 고객의 수)리스트를 돈다. (첫번째 for문) 입력받은 고객의 수에서 시작해서 dp리스트의 끝까지 돈다. (두번째 for문) 최소 고객의 수보다 작게는 증가를 못시키기 때문이다. dp[i]의 의미는 i 명을 증가시키는데 필요한 돈의 최솟값이다. 점화식 : dp[i] = min(dp[i-custo] + cost , dp[i]) 고객을 custo 만큼 늘린 대신 cost를 더한 값과 원래 값중에서 더 저렴한 값으로 갱신한다. i가 원했던 고객의 수 보다 크보다 같은 경우 값..

완전탐색_바둑이 승차_cut edge 방법,DFS 시간초과를 방지하는 법

if ans > val + ( total - tsum ) : return 전체 합에서 tsum(바둑이를 태웠건 안태웠건 지나간 바둑이의 무게) 을 빼면 앞으로 더할 수 있는 바둑이의 무게가 나온다. 여기서 val을 더한 값이 ans보다 작다면 더 할 필요가 없다. 끝까지 가도 어차피 ans보다 작기 때문이다. dfs에 tsum을 인수로 추가하여 시간 초과를 막는다는 것이 흥미롭다. def dfs(idx,val,tsum) : global ans if val > c : return if ans > val + (total-tsum) : return if idx == n : ans = max(ans,val) return else : dfs(idx+1,val+arr[idx],tsum+arr[idx]) dfs(id..

여러 알고리즘 시간복잡도_재귀의 시간복잡도가 O(2^n)인 이유

Big - O는 알고리즘 성능을 예측한다. 작은 차수는 무시하고 계수도 무시한다. 이진탐색 : O(logn) 재귀 : O(2^n) 정렬 : O(nlogn) heap : - 생성 : nlogn - push, pop : log(n) 여기서 궁금했던 것은 왜 재귀가 2^n 인지이다. 재귀 중 피보나치를 생각했을 때 이렇게 생각하면 된다. T(n) > 2 * T(n-2) T(n) > 2^2 * T(n-4) ... T(0)이 되면 T(n) > 2^(n/2) * T(0) 이다. T(0)은 계수가 되어 의미가 없어지고 1/2도 의미가 없어진다. 즉 재귀의 시간복잡도는 O(2^n)이 된다.

[flutter] launch screen , splash screen 적용하는 법

앱을 실행시키고 시작하는 첫 순간 서버로부터 로그인 데이터 또는 여타 앱 실행을 위한 준비를 한다. 이때 클라이언트에게 보여주는 화면을 launch screen, splash screen 이라고 한다. 방법을 찾아 헤매었지만 찾기가 어려웠는데 결국 발견했다. https://www.youtube.com/watch?v=dB0dOnc2k10 1. flutter native native 패키지를 설치한다. 2. pubspec.yaml 에 코드를 추가한다. 코드는 splash화면에 보일 이미지와 배경색등을 추가할 수 있다. 이런식으로! 3. 그 후 콘솔창에 flutter clean flutter pub get flutter pub run flutter_native_splash:create 를 입력해준다. spla..

flutter을 이용한 간단한 화면 만들기

완성본 캡쳐 - 1. Scaffold를 이용해 화면을 구성한다. home: Scaffold ( ) 2. Scaffold 내에서 appBar를 만든다. appBar: AppBar( title: Text( 'Hello Flutter', style: TextStyle(fontSize: 28), ), centerTitle: true, ), title 영역에 Text 위젯을 만든다. 보여질 text는 'Hello Flutter' 이다. 글자의 크기는 style - TextStyle에서 변경할 수 있다. 이렇게 두면 글자는 왼쪽 정렬된다. 중간으로 옮기기위해 centerTitle : true를 속성으로 준다. 3. body는 SingleChildScrollView로 만든다. 이메일과 비밀번호를 입력과 사진 로그인 ..

그리디_회의실 배정, 씨름선수, 창고 정리, 침몰하는 타이타닉, 증가순열만들기, 역수열

그리디는 탐욕적인 이라는 의미로 지금 현재 가장 최적의 것을 계속 골르는 것이다. 주로 정렬과 함께 한다. 회의실 배정 코드 : if __name__=="__main__" : n = int(input()) meeting = [list(map(int,input().split())) for _ in range(n)] meeting.sort(key = lambda x : (x[1],x[0])) endTime,cnt = 0,0 for s,e in meeting : if s >= endTime : cnt +=1 endTime = e print(cnt) => 끝나는 시간을 오름차순으로 정렬한 후 시작시간이 이전 회의의 끝나는 시간보다 늦거나 같으면 해당 회의를 넣는다. 씨름 선수 코드 : if __name__=="..

이분탐색_ 이분탐색,랜선자르기,뮤직비디오,마구간 정하기

이분탐색 ! 시간 복잡도 : O(log n) 무조건 정렬이 되어있어야한다. start와 end 라는 포인터 변수를 만든다 . mid 라는 중간 지점 변수를 만들어서 (start + end ) // 2 로 설정한다. 이분탐색 코드 : if __name__=="__main__" : n,m = map(int,input().split()) num = list(map(int,input().split())) num.sort() start,end = 0,n-1 while start capacity : # cd 추가 cnt +=1 sum = x else : sum += x return cnt if __name__=="__main__" : n,m = map(int,input().split()) music = list(m..

[Python/BOJ] 백준 1713 후보 추천하기_구현

이걸 어떻게 풀지...고민을 많이 했다. dict? defaultdict? 하다가 점수와 시간을 같이 dict에 넣어서 정렬해서 하려면 머리가 복잡해서 이게 맞나 찾아봤는데 그냥 list 2개를 쓰면 되는거였다. picture 리스트와 score 리스트를 index로 연결하여 이미 사진틀에 있다면 해당 인덱스의 score를 1증가시킨다. 만약 없다면 - 자리가 없다면 -> picture에서 하나 빼고, score에서 하나 빼고 - 자리가 있다면 -> picture에서 하나 추가하고, score에서 하나 추가한다. 코드 : if __name__=="__main__" : n = int(input()) vote = int(input()) student = list(map(int,input().split()))..

[Python/BOJ] 백준 23325 마법천자문_DP

상황을 잘 나눠서 상황에 따라 잘 계산해줘야한다. dy[j]의 의미는 j번째 문자열까지 연산했을 때 연산의 최댓값이다. 코드 : if __name__=="__main__" : a = list(input()) dy= [-int(1e9)]*(len(a)) # dy[j] : j가 마지막 숫자일 때의 최대 계산 결과 # 글자가 한글자라면 숫자로 해석 if len(a) ==1 : if a[0] == '+' : print(10) else : print(1) # 글자가 여러 글자라면 else : # 첫 글자 - 은 연산자가 아님 if a[0] == '-' : dy[0] = 1 else : dy[0] = 10 # 이왕이면 큰 숫자를 얻는게 좋음 if a[1] == '-' : dy[1] = 11 # 나머지 숫자들을 돌면..