Loading...
2023. 7. 2. 02:29

C++ 알고리즘 기초22 -배열 심화2(최대, 최소 찾기, 정렬하기, 그리디 연습)-

1. 연습문제1 n개의 원소와 q개의 질의가 주어졌을 때 n개의 원소에 대해 각 질의를 수행하는 프로그램을 작성해보세요. 질의의 종류는 다음과 같습니다. 1 a a번째 원소를 출력합니다. 2 a 숫자 a가 있는지를 판단합니다. 만약 있다면 해당 원소가 몇 번째 원소인지를 출력합니다. 숫자 a가 2개 이상 있다면 index가 더 작은 원소를 출력합니다. 만약 a가 없다면 0을 출력합니다. 3 a b a번째 원소부터 b번째 원소까지 순서대로 공백을 사이에 두고 출력합니다. 문제 요구하는대로 구현하면 된다 a번째랑 index가 a인 것은 다르니까 헷갈리지 말고 C++ 특성상 첫 숫자 1,2,3중 하나를 받아 1,2,3인지 체크하고, 1,2면 하나만 더 받고 3이면 2개를 받고 #include using nam..

2023. 6. 15. 01:19

딥마인드의 AlphaDev, 새로운 정렬 알고리즘을 발견하다

1. 서문 AlphaDev가 강화학습을 통해 설계된 더 빠른 정렬 알고리즘을 발견했다. 기본 C++ 라이브러리에서 10년만에 정렬 라이브러리에 대한 최초의 변경이며, 오픈소스화하여 전 세계 수백만명의 개발자와 기업이 클라우드 컴퓨팅 및 온라인 쇼핑에서 공급망 관리에 이르기까지 산업 전반의 AI 어플리케이션에서 이 알고리즘을 사용하고 있다 현대 정렬 알고리즘은 컴퓨터 과학자와 프로그래머가 개발하는데 수십년의 연구가 필요했다. 그것들은 매우 효율적이며, 이제는 전기를 절약하는 새로운 방법이나 보다 효율적인 수학적 접근 방식을 찾는 것과 유사하게 추가 개선을 하는 것이 주요 과제이다. 2. 어셈블리 언어에 해답이 있다 AlphaDev는 기존 알고리즘을 개선하지 않고, 처음부터 다시 시작하여 더 빠른 알고리즘을..

C++ 알고리즘 기초21 -배열 심화1(C++ 배열 초기화)-

1. 배열 값 참조 i번째 원소는 index i-1번에 위치한다. index 0 1 2 3 arr 1 5 2 8 만약 2번 원소 2를 9로 바꾸고 싶다면, 해당 값을 참조해서, 9를 할당하면 된다. arr[2] = 9; 다음은 2번 원소를 단순히 바꾸는 코드 #include using namespace std; int main() { int arr[4]; for (int i = 0; i > arr[i]; } cout arr[i]; } cout 55 4. 배열 초기화 C++에서는 자바와는 다르게 int 배열을 초기화할때, 기본값으로 0이 들어가지 않고 쓰레기값이 들어간다 그래서 모든 값에 0이 들어가게 초기화하고 싶다면,... // 숫자 별 출현 횟수. int count_ar..

C++ 알고리즘 기초20 -문자열 심화1(마지막 문자 인덱싱, length()함수 overflow 문제, to_string()함수, 문자열의 끝)-

1. 문자열에서 마지막 문자 인덱싱 알파벳으로 이루어진 10개의 문자열과 문자가 하나 주어지면 그 문자로 끝나는 문자열들을 입력에서 주어진 순서대로 출력하는 프로그램을 작성해보세요. string arr[10];으로 string 타입을 원소로 가지는 크기 10의 배열을 선언할 수 있다. 파이썬과 비슷하게 문자열 인덱싱이 가능하지만, 파이썬처럼 s[-1]로 마지막 문자를 가져올 수는 없다.. 음수 인덱스를 사용하지 못한다는 소리 s.length()로 문자열 s의 길이를 가져오고, s.length()-1로 바로 마지막 문자에 접근할 수 있다. #include #include using namespace std; int main() { // 여기에 코드를 작성해주세요. string arr[10]; for(int..

2023. 6. 7. 01:59

C++ 알고리즘 기초19 -반복문 심화3(무한루프 만들기, 비교연산자 주의할점, 반복문에서 i값 가져오기)-

1. 완전수 판별하기 숫자 n이 주어졌을 때, n이 완전수인지 판단하는 프로그램을 작성해보세요. 완전수란 자기 자신을 제외한 약수의 합이 자신이 되는 수를 나타냅니다. 예를 들어 6의 경우 1 + 2 + 3 = 6 이기 때문에 완전수입니다. n이 1000이하니까 $O(\sqrt{n})$으로 나눠볼 필요는 없을 것 같고 1부터 n-1까지 n을 나눠보면서 약수라면 누적합해준 다음에 반복문을 탈출하고 누적합한 값이 n과 같은지 비교해보면 되겠지 #include using namespace std; int main() { // 여기에 코드를 작성해주세요. int n; cin >> n; int answer = 0; for(int i = 1; i < n; i++){ if(n % i == 0){ answer += i..

C++ 알고리즘 기초18 - 반복문 심화2(10의 자리와 1의 자리 구하는 방법 복기)-

1. 조건문 안에 for문 사용 두 개의 정수a, b를 입력받아 큰 수부터 작은 수까지 차례대로 출력하는 프로그램을 작성해보세요. a,b를 입력 받은 다음에, a >= b이면, a부터 b까지 for문으로 1을 감소시키면서 출력하고 a > a >> b; if (a >= b){ for(int i = a; i >= b; i--){ cout