본문 바로가기

코딩테스트

(4)
최솟값 찾기 (백준 11003) 문제 링크 : https://www.acmicpc.net/problem/11003 문제 분석1. 정렬을 이용한 문제해결 일정 범위 안에서 최소값을 구하는 문제이므로 "슬라이딩 윈도우" 방식과 "정렬"을 통해 답을 추리면 결과를 얻을 수 있으나, 정렬 알고리즘의 시간 복잡도는 O(nlogn) 이므로 문제에 효율적이지 못하다.  ( 문제 상황에서 시간 복잡도는  O(nlogn) 정렬 알고리즘을 포함하면 O((N-L+1) * L log L) 이 되는데 이는 모든 슬라이드에서 정렬을 하여 답을 구하는 경우이다. 따라서, 이 문제를 효율적으로 해결하기 위해서는 정렬을 사용하지 않고, 덱(deque)과 같은 자료구조를 활용하여 O(N)의 시간 복잡도로 해결하는 방법이 좋다.)정렬 알고리즘 중 비교 기반 정렬 알고리..
좋다(백준 1253) 문제N개의 수 중에서 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있다면 그 수를 “좋다(GOOD)”고 한다.N개의 수가 주어지면 그 중에서 좋은 수의 개수는 몇 개인지 출력하라.수의 위치가 다르면 값이 같아도 다른 수이다.입력첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 $A_i$가 N개 주어진다. (|$A_i$| ≤ 1,000,000,000,$A_i$는 정수)출력좋은 수의 개수를 첫 번째 줄에 출력한다. 입출력101 2 3 4 5 6 7 8 9 108 입출력3,4,5,6,7,8,9,10은 좋다.초기 코드 N = int(input()) # 개수L = list(map(int, input().split())) # 숫자 리스트count = 0 # 좋은 수L.s..
나머지 합 구하기(백준 10986) 문제수 N개 $A_1, A_2, ..., A_N이$ 주어진다. 이때, 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 구하는 프로그램을 작성하시오.즉, $A_i + ... + A_j (i ≤ j)$ 의 합이 M으로 나누어 떨어지는 (i, j) 쌍의 개수를 구해야 한다. 입력첫째 줄에 N과 M이 주어진다. (1 ≤ N ≤ $10^6$, 2 ≤ M ≤ $10^3$)둘째 줄에 N개의 수 $A_1, A_2, ..., A_N$이 주어진다. (0 ≤ $A_i$ ≤ $10^9$) 출력첫째 줄에 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 출력한다. 입출력5 31 2 3 1 27 💡 문제 상황 이해하기 입력 5 3- 5 : 수의 개수- 3 : 3 으로 나누어 떨어지는 구간이 있는지입력..
빅오 표기법(big-O notation) 정복하기 # 1. 빅오 표기법이란? 빅오 표기법(Big-O Notation)은 알고리즘의 실행 시간 복잡도를 분석하는 수학적 표기법으로,input의 크기가 무한하게 증가할 때 실행 시간을 나타내는데 사용됩니다.즉, 알고리즘 성능평가를 위한 강력한 도구가 빅오 표기법입니다. Big-O 표기 방법 : O(n) 이때 괄호 안의 값은 입력 데이터의 크기에 대한 함수로, 알고리즘의 시간 복잡도 또는 공간 복잡도를 나타냅니다.ex) O(1), O(n), O(log n) ...    #2. 간단한 예시로 알아보자def get_first_element(inputs): return inputs[0] 간단한 예시로 위와 같이 List를 input으로 받아오는 함수가 있다고 가정해봅니다.여기서 함수는 "2번"의 연산이 있게 되..