[WEEK02] DAY12 & TMI

novxerim·2021년 11월 12일
0

SW-Jungle

목록 보기
12/59

오늘은 오전에 몸 상태가 안좋았어서 약찾아먹고 해결하고 한다고 좀 부산했고,,,

낮까지 기초 문법좀 다시 잡았다

그리구 저녁먹기 전쯤부터 알고리즘 풀기 시작

이번주 문제리스트의 첫 시작은 이분 탐색 !


이분탐색

n = int(input())
n_list = list(map(int, input().split(' ')))
n_list.sort()

m = int(input())
targets = list(map(int, input().split(' ')))

#두번째 줄 정렬 a.sort() -> 1 3 5 7 9 중간값 mid = sum //2로 구하고 왼쪽부터 있는지 비교

#왼쪽 lt = 0, 오른쪽 rt = n-1

#n번째 숫자가 첫번째 리스트 안에 존재하면 1 출력

while lt<=rt: #반 나눠서 점점 범위 좁혀오다가 lt가 남은rt 거리보다 커져버리면 함수 종결

  mid=(lt+rt)//2

  if a[mid]==m:      #a의 미드에 있는 값이 m이니?

  	print(mid+1)  #맞으면 mid출력~ 인덱스 값이니 +1 해줌

  	break

  elif a[mid]>m:

  	rt=mid-1  #큰쪽(오른쪽) 날림

  else:

  	lt=mid+1  #왼쪽을 중간보다 한 칸 더가서 범위 좁힘

다음은 생각 과정을 끄적거린 메모들,,

백준 1920 / 2805

https://www.acmicpc.net/problem/1920
https://www.acmicpc.net/problem/2805



재귀로도 풀 수 있을 것 같다..

2805 시간초과

2805는 맞는 코드임에도 풀구하고 시간초과가 떴다

https://www.acmicpc.net/board/view/73644
https://stackoverflow.com/questions/11241523/why-does-python-code-run-faster-in-a-function

타팀원분이 찾아주신 두 글을 참고해 함수로 따로 만들어서 제출했더니 통과가 됐다..
파이썬이 함수를 바이트코드로 컴파일 해서 그렇다고 한다


맞았지만 시간초과가 뜬 코드

import sys
input=sys.stdin.readline

n, min_bring = map(int, input().split())
trees = list(map(int, input().split()))
trees.sort()

start = 0
end = max(trees)

while start <= end :
    mid = (start+end) // 2
    
    T_cut_sum = 0
    for tree in trees:
        if tree >= mid:
            T_cut_sum += tree-mid
    
    if T_cut_sum >= min_bring:
        start = mid + 1
    else:
        end = mid - 1
    
print(end)

함수로 따로 빼준 코드

import sys
input=sys.stdin.readline

n, min_bring = map(int, input().split())
trees = list(map(int, input().split()))
trees.sort()

# 가장 짧은 길이 1을 start로, 나무 중 가장 긴 길이를 end로 둔다.
start = 0
end = max(trees)
check = 0

def sumcut(mid):
    T_cut_sum = 0
    for tree in trees:
        if tree >= mid:
            T_cut_sum += tree-mid
    return T_cut_sum
            
while start <= end :
    mid = (start+end) // 2
    T_cut_sum = sumcut(mid)
    if T_cut_sum >= min_bring:
        start = mid + 1
        check = mid
    else:
        end = mid - 1
    
print(end)

첫번째 코드는
1) 코드 작성이 막힐 때
https://claude-u.tistory.com/446 이 곳에서 글을 한 줄씩만 읽으며 힌트를 얻었다
2)
https://alpyrithm.tistory.com/2 이 글은 한 번 더 읽어보면 좋을 것 같다
여러 시행착오가 나와있다


2021.11.12 금

오늘의 이야기

몸 컨디션이 안 좋아 여러모로 버거웠던 하루 ㅠㅠ
건강 컨디션이 아니라,,,,,,,,,,,,,,,,,,,정기적으로 찾아오는 것이라는게 문제
아침부터 한숨나올 뻔 했다 ㅎㅎ;;;
평소보다 더 피곤하고 온몸이 아픈건 약 먹어도 어쩔 수 없다
컨디션 핑계대며 쉬어야겠다 이런 마인드는 절대 갖기 싫다 ㅋㅋ 그래도 우직하게 버텨야지
안그래도 피곤했는데 호르몬때매 겹으로 더 피곤해졌다 따흐흑

오늘은 알고리즘 풀이를 아이디어에서 그치지 않고 생각을 코드로 구현까지 했는데 생각보다 오래걸리지 않았다는 점이 장족의 발전이었다 !!!!
누군가 이 글을 보고있다면 칭찬좀 해주시겠어요? (넝담임) 헤헤

내일은 좀 더 머리도 팽팽 돌아가고 속도도 더 나고 코드도 더 잘 써지길 !!
오늘도 내일도 화이팅팅~
자러가자 !!!!!!!!!

profile
블로그 이전했습니다. https://yerimi11.tistory.com/

0개의 댓글