본문 바로가기

분류 전체보기330

[백준 2805번] 나무 자르기 - 이분탐색 예제 # 오늘은 오후 약속이 있어 한문제만 딱 풀고 나가려했는데.. 처음 짠 코드는 항상 정답이 아니다.. -- 처음 짠 코드 # 필요한 나무 m미터 # 절단기에 지정할 높이 H 의 최댓값을 구하기 N, M = map(int, input().split()) tree = list(map(int, input().split())) height = 0 # 절단기에 설정할 높이 while True: tree_check = 0 # 반복때마다 가져갈 수 있는 나무의 양 체크 for i in range(N): if tree[i]-height>0: tree_check += (tree[i]-height) else: continue # 설정한 높이보다 주어진 나무가 낮다면 0 if tree_check < M: break else.. 2022. 1. 8.
[백준 2869번] 달팽이는 올라가고 싶다 제목만 보고 달팽이 배열 문제일 거라 생각했다. 생각해보니 달팽이 배열에선 위로 올라갈 수가 없지 -- 처음 짠 코드 a, b, v = map(int, input().split()) # 무조건 출력은 낮에 올라갔을 때 반복문이 중단되어 이루어질것 day = 1 # 걸리는 날짜 ( 일단 올라갔다고 생각 ) up = a # 올라간 높이 ( 올라갔다해 ) while up < v: day += 1 up -= b up += a print(day) 생각이 가는대로 코드를 짜보았다. 물론 3번째 예시를 넣는 순간 아차 싶었다. 10억까지 100씩더하고 99씩 빼고 있었다 ㅋㅋㅋ 1씩 더해 10억까지 가는데는 1분정도 더 걸리는군.. 참 이렇게 코드를 한번 짜고 다시 생각하려면 머리가 더 아픈 것 같다. 아무래도 하루.. 2022. 1. 6.
[22.01.06] KMP 알고리즘 # KMP 알고리즘 문자열을 찾는 데 사용되는 알고리즘ex) 웹 브라우저 상에서 현재 페이지에 포함되어 있는 특정 단어를 찾고 싶을 때 ctrl + f 를 사용 - 일반적으로 주어진 글에서 원하는 문자열을 찾고 싶다면 어떤식으로 설계해야 할까? ABC라는 단어를 찾고싶다면 우선 A로 시작하는 곳을 찾고 그 뒤가 B인지 판단, B가 맞다면 뒤가 C인지를 판단하면 되지 않을까?이렇게 한다면 앞에서부터 무작정 3글자씩 비교해보는 것보다는 효율적일 것 같다. 하지만 찾고자하는 문자가 길수록, 찾고자하는 문자열의 뒤쪽에서 오류가 날 수록 원하는 단어를 찾는데는 오랜 시간이 걸릴 것이다.: 이때의 시간 복잡도는 원본 문자열의 길이가  N, 탐색 문자열의 길이가 M일때 O(NM)으로 나타난다. -> 시간 복잡도를 O.. 2022. 1. 6.
[백준 1966번] 프린터 큐 - 큰 수부터 출력하여라 -- 처음 짠 코드 import sys T = int(sys.stdin.readline()) # 테스트케이스의 수 for _ in range(T): n, m = map(int, sys.stdin.readline().split()) # 문서의 개수, 알고싶은 문서의 현재 위치 important = list(map(int, sys.stdin.readline().strip().split())) answer_list = [] while len(answer_list) 인덱스가 -2일때 n-2로 바꾸는게 잘못되어 m의 값이 잘못되게된다. => n-2를 len(important) -1로 수정 , 하지만 아직 오류 1은 해결되지 않음 -> 프린트를 해 answer_list를 갈때와 그냥 순서를 뒤로 보낼때 구하려는 인.. 2022. 1. 5.
[백준 10989번] 수 정렬하기 3 - sort X 당연하게도 sort를 사용하면 메모리를 많이 먹는다는걸 모르고 문제 풀이를 시작했기 때문에 list에 입력받아 sort를 해 출력하는 코드를 먼저 짰다. ( 짜면서 이건 너무 쉬운데?? 라는 생각은 당연히 들었고... 답도 당연히 아닐것 같긴 했다.. ) 채점 결과 역시 틀리게 되었고 구글링 결과 생각한대로 sort가 메모리를 많이 잡아먹는것이 문제였다. -- 내가 짠 코드 # sort 사용시 메모리가 초과된다 import sys n = int(sys.stdin.readline()) a = [0] * 10000 # 10000보다 작은 수 for i in range(n): a[int(sys.stdin.readline())-1] +=1 for i in range(len(a)): if a[i] > 0: for.. 2022. 1. 4.
[백준 2775번] 부녀회장이 될테야 생각보다 코드를 짜는데 시간이 걸렸던 문제였다. 과거 java로 풀었었던 문제와 비슷하다고 생각해 하나의 리스트를 두고 누적해서 바꿔주면 되겠다고 생각했는데 반복문을 중첩해서 사용하다보니 머리에 무리가 간듯하다. - 제출 코드 T = int(input()) k = [] n = [] floor = [] for i in range(T): k.append(int(input())) n.append(int(input())) floor.append([j for j in range(1,n[i]+1)]) # 0층 리스트 for i in range(T): for _ in range(k[i]): for j in range(len(floor[i])): if j==0: floor[i][j] = 1 else: floor[i][.. 2022. 1. 2.