본문 바로가기

코딩 테스트/do it! 알고리즘 코딩테스트100

010 최솟값 찾기 첫번째 코드 윈도우 슬라이딩을 생각하여 그거에 맞게 코드를 작성했다! now_list에 원소 하나를 추가하고 원소 하나를 제거하는 형식을 모든 단계에서 진행하고 now_list의 최소값을 내고 answer 리스트에 계속 업데이트 하는 형식으로 하는거지 import sys input = sys.stdin.readline n , l = map(int, input().split()) A = list(map(int, input().split())) answer = [0] * n now_list = [] for i in range(l): now_list.append(A[i]) answer[i] = min(now_list) for i in range(l, n): now_list.append(A[i]) now_lis.. 2024. 4. 15.
009 DNA 비밀번호 첫번째 코드 라고 말하기도 무색하게... 슬라이딩 윈도우를 써야겠다... 라는 생각을 했는데 어떻게 접근해야할지 몰라서 책을 참고했다. 슬라이딩 윈도우에 추가될 때 변화되는 내용 함수 슬라이딩 윈도우에 제거될 때 변화되는 내용 함수 그리고 0일 떄는 신경 쓰지 않아도 되니 맞다고 표시 먼저 현재 리스트가 비어있으므로 처음부터 슬리이딩 윈도우 만큼 현재 리스트를 채우고 만약에 현재 리스트와 조건 리스트가 동일하면 check 부분이 4가 되어, 정답에 1을 추가한다. 이후부터 숫자 리스트가 끝날때까지 진행 하나 추가, 하나 제거될떄 위의 함수 이용 그리고 현재 리스트와 조건 리스트가 동일하면 check 가 4가 되어 정답에 1추가! 이런 형식으로 진행되는 것이 슬라이딩 위도우이다. 즉 박스만 움직이고 안의 .. 2024. 4. 15.
008 좋아 첫번째 코드 투포인트를 이용한 상황에서 조금 더 신경쓰면 될 것 같다..? import sys input = sys.stdin.readline n = int(input()) number = list(map(int, input().split())) target = 2 good = [] sort_number = sorted(number) while target != n: one = 0 two = target - 1 while one 2024. 4. 11.
007 주몽 첫번째 코드 투 포인터를 배웠으니까 이용해서 풀어보자! sorting을 진행하여 오름차순으로 변경 합이 작으면 : 시작 += 1 합이 크면 : 끝 -= 1 합이 같으면: 시작 += 1, 끝 -= 1 라고 생각을 했는데 계속 같은 수가 있으면? 이라는 생각으로 코드를 만들면서 엉켜버렸다... 큰 아이디어는 바뀌지 않고 책을 보면서 코드와 생각 정리하면서 정답을 맞췄다! import sys input = sys.stdin.readline n = int(input()) m = int(input()) number = list(map(int, input().split())) one = 0 two = n-1 count = 0 sort_number = sorted(number) while one 2024. 4. 11.
006 수들의 합 5 첫번째 코드 처음부터 범위를 지정해가면서 해당 범위의 값을 더해서 맞으면 count에 1을 더하는 형식으로! import sys input = sys.stdin.readline n = int(input()) count = 0 n_list = list(range(1, n+1)) for i in range(n+1): for j in range(i): if sum(n_list[j:i]) == n: count += 1 print(count) 메모리 초과? 두번째 코드 책을 반영하여! 투포인트? start, end의 투포인트를 통해 sum이라는 변수의 값만 바뀌고 나머지 값은 고려하지 않아버리는 것이다. import sys input = sys.stdin.readline n = int(input()) count .. 2024. 4. 8.
005 나머지 합 첫 번째 코드 구간의 합을 계속해서 구해가면서 나머지가 0인 경우에 count에 1을 추가하는 형식으로 진행! import sys input = sys.stdin.readline n, m = map(int, input().split()) number = list(map(int, input().split())) count = 0 left = [] for i in range(n): m_number = number[i] % m left.append(m_number) for i in range(n+1): for j in range(i): sum_number = sum(left[j:i]) if sum_number % m == 0: count += 1 print(count) 시간 초과.... 계속해서 인덱싱해서 더.. 2024. 4. 8.
728x90