분류 전체보기 133

SelectionSort (선택 정렬)

선택 정렬이란, 배열에서 가장 작은 값을 찾아서 앞으로 가져오는 방식을 반복하는 정렬 방법입니다. 글로만 보면 이해가 안될수도 있으니 그림으로 살펴봅시다.  이렇게 가장 작은 수를 찾아서 정렬을 완료합니다.   코드)#include #include bool CheckSorted(int* arr, int size); // 정렬되었는지 확인할 함수void PrintArr(int* arr, int size); // 배열을 출력하는 함수int main(void) { int arr[] = {8, 3, 2, 5, 1, 1, 2, 5, 8, 9}; int size = sizeof(arr) / sizeof(int); assert(size > 0); // 배열의 크기가 1보다 작으면 오류 발생하도록. ..

DataStructure 2024.06.19

Swap

두개의 값이 주어졌을 때 , 서로 값을 바꾸는 것을 swap 이라고 한다.  방법 1) 포인터를 이용하는 방식이다.#include void MySwapPrt(int* a, int* b);int main(void){ int x = 10; int y = 5; std::cout    방법 2) 포인터 대신 & 를 이용하는 방법도 있다. 이 방법을 사용하면 *를 사용하지 않아 보기에 깔끔해 보인다.#include void MySwapRef(int &a, int &b);int main(void){ int x = 10; int y = 5; std::cout   방법 3) swap 을 할 때 반드시 temp 를 사용해야 한다고 생각했는데, 아니었다. 사칙연산을 이용하면 temp를 사용하지 않고도 가..

DataStructure 2024.06.19

백준_2805_나무자르기

지난번 랜선자르기와 비슷한 문제입니다. https://sol248.tistory.com/32 백준_1654_랜선자르기랜선의 개수와 필요한 랜선의 개수가 주어졌을 때 그 개수만큼 만들 수 있는 랜선의 최대 길이를 구하는 문제입니다.  초기 코드)#include void lan_cal(int lan_length[], int max, int lan_count, int lan_need);intsol248.tistory.com 이 문제와 같이 이분 탐색으로 문제를 풀어보겠습니다.  위 문제와 동일한 방식으로 풀었습니다. 전체 코드)#include int binary_search(int tree_need, int max, int min, int tree[], int size);int main(void){ in..

백준/c 2024.05.17

백준_31833_온데간데없을뿐더러

숫자를 입력받아 모두 붙여서 그대로 쓴 뒤, 크기를 비교하는 문제입니다. 이 문제같은 경우, 노트에서도 볼 수 있듯, x와 y의 크기가 매우 클 수 있으므로 long long 타입을 써야 합니다.  저는 입력을 배열로 받은 뒤, 숫자들을 이어붙이기 위해 10의 거듭제곱을 곱해서 다른 배열에 넣어주었습니다.   코드)#include #include #include int main(void){ int N = 0; scanf("%d", &N); long long A[20] = {0}; long long B[20] = {0}; long long result_A[20] = {0}; long long result_B[20] = {0}; for (int i = 0; i = 0; ..

백준/2024scon 2024.05.15

백준_11866_요세푸스문제0

사람 명수를 의미하는 N 과몇 번째를 의미하는 K 를 입력받아서 요세푸스 순열을 구하는 문제입니다. 사람들이 둘러앉아있는 모양이기 때문에, 원형 큐의 성질을 이용하면 풀 수 있을 것이라는 생각이 듭니다. 그런데, 큐는 FIFO (먼저 들어간게 먼저 나오는 성질) 을 가지고 있지만,  이 문제에서는 K번째 사람을 제거해야 하므로, pop 함수를 조금 다르게 구현해야 할 것 같습니다.   POP 함수) 조건 1 : 큐의 모든 값이 빠져나가면 pop을 할 수 없다. 조건 2 : K번째 사람을 제거하려 했을 떄 그 자리가 이미 공석이라면, 공석이 아닐 때까지 이동한다. int pop(int n, int k){ int t = 0; t = queue[front]; queue[front] = 0; ..

백준/c 2024.05.15

백준_1654_랜선자르기

랜선의 개수와 필요한 랜선의 개수가 주어졌을 때 그 개수만큼 만들 수 있는 랜선의 최대 길이를 구하는 문제입니다.  초기 코드)#include void lan_cal(int lan_length[], int max, int lan_count, int lan_need);int main(void){ int lan_count = 0, lan_need = 0; scanf("%d %d", &lan_count, &lan_need); int lan_length[lan_count]; int max = 0; for (int i = 0; i max) max = lan_length[i]; } lan_cal(lan_length, max, lan_count, lan_ne..

백준/c 2024.05.14

백준_1929_소수구하기

입력받은 m과 n 사이의 소수를 구하는 문제입니다. 소수란, 약수가 1과 자기 자신인 수를 뜻하죠. 가장 흔하게, 2부터 자기 자신-1 까지 나누어지는지 검사하여 소수인지 판별합니다. 하지만 문제에서 1백만까지 입력받을 수 있기 때문에 위의 방법대로라면, 시간이 너무 오래 걸립니다.   여기서 소수의 성질을 하나 더 알아야 합니다. 소수는 자기 자신의 제곱근 이하의 자연수 로 나누었을 때 1을 제외하고 나누어떨어지지 않습니다. ex) 16의 제곱은은 4이죠. 2 , 3 , 4 로 나누면 나누어 떨어지므로 소수가 아닙니다.53의 제곱근은 7.xx 이죠. 2 , 3 , 4 , 5 , 6 , 7 중 어떤 것으로도 나누어 떨어지지 않으므로 소수입니다. 이제 이 방식을 코드로 구현해 봅시다.  전체 코드)#inc..

백준/c 2024.05.12

백준_10816_숫자카드2

쉬운 문제이지만, 처음 알게 된 지식이 있어 글을 적습니다. 여러분은 배열을 함수 내에서 선언하는 것과 함수 밖에서 선언하는 것의 차이를 아시나요?전역 변수 / 지역 변수 말고 다른 부분에서요.. 함수 내에서 선언하는 것은 stack 영역에 할당하게 되고, 전역이나 static 으로 선언하는 경우는 data 영역에 할당하게 된다고 합니다. #include int main(void){ int result[20000001]; int n; scanf("%d", &n); int k; for (int i = 0; i 처음에 이렇게 작성하고 실행하는데 segmentation fault 가 계속 떠서 왜그런지 찾아보니까 지역변수에서 크기가 큰 배열을 생성하면 segmentation faul..

백준/c 2024.05.08