CS/Algorithm & Data Structure
-
빅오 표기법, Python 시간 복잡도CS/Algorithm & Data Structure 2023. 1. 31. 15:20
1. Big-O Notation 빅오 표기법 가장 빠르게 증가하는 항만 고려하면 된다.(상한) -> 연산 횟수가 3N^3 + 5N^2 + 1000000이라면 O(N^3)으로 표현 - 좋은 것 부터(빠른) O(1) 상수 시간 O(logN) 로그 시간 O(N) 선형 시간 O(NlogN) 로그 선형 시간 O(N^2) 이차 시간 O(N^3) 삼차 시간 O(2^n) 지수 시간 O(N!) 팩토리얼 시간 - 나쁜 것 까지(느린) 예시 1) N개 데이터 합을 구하는 코드 array = [3,5,1,2,4] sum = 0 for x in array: sum += x print(sum) 정답: O(N) 예시 2) 2중 반복문을 이용한 코드 array = [3,5,1,2,4] for i in array: for j in a..
-
[BOJ][C++] 백준 2908 상수CS/Algorithm & Data Structure 2022. 11. 23. 08:45
string을 int로 바꿔주는 stoi함수를 써 봤다. 근데 사실 이렇게 안 하고 끝자리부터 바로 비교하다가 더 큰걸 결과값으로 설정해주고 거꾸로 출력해줘도 됨 #include #include using namespace std; int main() { string n1, n2; cin >> n1 >> n2; string tmp1="", tmp2=""; for (int i = 2; i >= 0; i--) { tmp1 += n1[i]; tmp2 += n2[i]; } int num1 = stoi(tmp1); int num2 = stoi(tmp2); if (num1 > num2) cout
-
[BOJ][C++] 백준 11720 숫자의 합CS/Algorithm & Data Structure 2022. 11. 23. 08:01
% 연산을 이용해서 sum에 한자리씩 더해주려고 했지만 N (1 ≤ N ≤ 100) 의 범위를 고려하면 좋은 방법이 아니므로 접근법을 바꿨다. #include #include using namespace std; int main() { int N; char num; int result=0; cin >> N; for (int i = 0; i > num; result += num - 48; } cout
-
[BOJ][C++] 백준 1436 영화감독 숌CS/Algorithm & Data Structure 2022. 11. 23. 07:13
string.find를 사용하여 666문자열이 존재하는지 브루트포스로 체크했다. #include #include using namespace std; int main() { int N; cin >> N; int number = 0;//브루투포스를 돌 숫자 int cnt = 0; //찾은 개수 while (cnt < N) { number++; string str = to_string(number); if (str.find("666") != string::npos) { //666을 찾으면 cnt++; } } cout
-
[BOJ][C++] 백준 2231 분해합CS/Algorithm & Data Structure 2022. 11. 22. 16:34
브루트포스 문제였다. for문의 i가 정답이 될 후보들이라고 볼 수 있다. i를 1~N전까지 모두 계산해보도록 했다. %10으로 끝자리를 구하고, /10으로 계산한 끝자리를 떼어주며 반복시켜 각 자릿수를 구했다. + 첫 시도 때.. if조건문에서 분해합을 찾았으므로 탈출할 때 break;를 써줬었다.. break;는 해당 루프 단 1개만 탈출한다는 걸 깜빡 했다...그래서 return으로 바꿔줬다. #include using namespace std; int main() { int N; cin >> N; int number, sum; for (int i = 1; i < N; i++) { sum = i; number = i; while (number!=0) { sum += number % 10; numbe..
-
[BOJ][C++] 백준 2798 블랙잭CS/Algorithm & Data Structure 2022. 11. 22. 16:00
3중 for문을 이용한 브루트포스 문제다. (3개의 수를 골라야 하므로 3중 for문을 사용했다.) 합이 M을 넘지 않아야 한 다는 것을 깜빡하고 abs사용해서 절댓값이 가장 작은 걸로 구했었다...바보 #include #include using namespace std; int main() { int N, M, close=0; cin >> N >> M; vector v; for (int i = 0; i > num; v.push_back(num); } int sum=0; for (int i = 0; i < N - 2; i++) { for (int j = i + 1; j < N - 1; j++) { for (int k = j + 1; k < N; k++) { ..
-
[BOJ][C++] 백준 2447 별찍기 -10CS/Algorithm & Data Structure 2022. 11. 22. 15:21
머리가 팽팽 돌아가지 않는 것을 자각한 문제다 후... 어디를 공백으로 둘 건가에 초점을 맞추는 게 좋은 것 같다. 어느 좌표들이 공백인지 규칙성을 찾는 것이다. 9*9그림을 그려보면 (1,1),(1,4),(1,7),(4,1),(4,4),(4,7) 처럼 x좌표%3==1 && y좌표%3==1 인 곳들이 공백이었다. 더 나아가 큰 패턴으로 보았을 때, 패턴상의 가운데 부분이 비게 되고 이 부분을 생각해보면 x좌표/(n/3) % 3 ==1 && y좌표/(n/3) % 3 == 1 인 곳들이 공백이었다. 1,1~n,n각 좌표를 반복문으로 방문할 거고 공백부분을 위의 규칙으로 비워줄거다. 이걸 n을 계속 쪼개줘가면서 3*3패턴까지 반복 그리게 할 것이고, 그 후에 또 재귀함수가 한번 더 쪼개면 n==1이 되므로 더..