본문 바로가기

C

(13)
[C/C++] 함수의 리턴값으로 주소(포인터) 참조자를 받을 시 유의점 *개인적인 공부 내용을 기록하는 용도로 작성한 글 이기에 잘못된 내용을 포함하고 있을 수 있습니다. #1 Return By Value #2 Return By Address / Reference #1 Return By Value getValue 함수는 값(Value)을 반환하는 간단한 Return-By-Value 함수입니다. Return-By-Value 함수는 복사 과정이 많이 일어나서 비효율적이라는 단점이 있습니다. 물론 아래 코드처럼 간단한 케이스는 상관 없지만 배열이나 구조체 등 데이터가 많은 자료형을 반환할 때는 문제가 발생할 수 있습니다. #include using namespace std; // return by value int getValue(int x) { int value = x * 2;..
[C/C++] Call-By-Value VS Call-By-Reference * 개인적인 공부 내용을 기록하는 용도로 작성한 글 이기에 잘못된 내용을 포함하고 있을 수 있습니다. #1 값에 의한 전달 Call-By-Value #2 참조에 의한 전달 Call-By-Reference #1 값에 의한 전달 Call-By-Value Call-By-Value 방식은 인자로 넘기는 값을 "복사"하여 함수에 넘겨주는 방식입니다. 즉, 값의 복사에 의한 함수 호출을 의미합니다. 다음 코드는 main() 함수에서 doSomething 함수로 x의 값 5를 전달해 출력하는 예제입니다. 유의해야 할 점은 x가 직접 전달되는 것이 아닌 x의 값 "5"만이 전달되는 것으로 doSomething 함수의 파라미터 x와 main() 함수의 x는 서로 다른 메모리에 할당되어 있습니다. 따라서, 각 함수에서 x..
[BOJ] 10824 "네 수" 문제 풀이 & 소스 코드 with C/C++ #INFO 난이도 : BRONZE3 문제 출처 : https://www.acmicpc.net/problem/10824 10824번: 네 수 첫째 줄에 네 자연수 A, B, C, D가 주어진다. (1 ≤ A, B, C, D ≤ 1,000,000) www.acmicpc.net #SOVLE 간단한 문자열 연결 문제이다. ab 문자열에 a 와 b 문자열을 연결한 값을 저장하고, cd 문자열에 c 와 d 문자열을 연결한 값을 저장한다. string a, b, c, d, ab, cd; cin >> a >> b >> c >> d; ab = a + b; cd = c + d; 다음으로 stoll (string to long long) 함수를 이용해 ab와 cd 문자열을 long long 타입으로 변경하여 ans 값에 저..
[BOJ] 11655 "ROT13" 문제 풀이 & 소스 코드 with C/C++ #INFO 난이도 : BRONZE1 알고리즘 유형 : 자료구조 문제 출처 : https://www.acmicpc.net/problem/11655 11655번: ROT13 첫째 줄에 알파벳 대문자, 소문자, 공백, 숫자로만 이루어진 문자열 S가 주어진다. S의 길이는 100을 넘지 않는다. www.acmicpc.net #SOLVE 아스키 코드를 이용하는 간단한 문자열 문제이다. a(97) ~ m(109) 사이의 문자는 13을 더해도 (ROT13 문자열로 만들어도) 아스키의 범위를 벗어나지 않으니 그대로 출력하고 , n(110) ~ z(122) 사이의 문자는 13을 더하면 알파벳 아스키 범위를 벗어나니 13을 빼준다. if (('a'
[C/C++] BOJ(백준) 2776 "암기왕" 문제 풀이 & 소스 코드 (feat. 이진탐색) #문제정보 출처 : https://www.acmicpc.net/problem/2776 난이도 : 실버3 사용된 알고리즘 : 이진탐색 알고리즘 #문제분석 단순 중첩 for로 돌리면 시간초과(TLE)가 나기에, 이진탐색 알고리즘(binary search)을 이용해 풀이했습니다. C++ STL의 라이브러리는 binary search 알고리즘을 지원하지만, 연습용으로 직접 이진탐색을 구현했습니다. int binSearch(int arr[], int len, int key) { int l = 0; int r = len - 1; int m; while (l
[C/C++] BOJ(백준) 11000 "강의실 배정" 문제 풀이 & 소스 코드 #문제정보 출처 : www.acmicpc.net/problem/11000 난이도 : 골드5 분류 : 그리디(GREEDY) 알고리즘 #문제분석 저는 11000 문제 풀이를 위해서 C++ STL의 우선순위 큐(priority_queue) 자료구조를 사용했습니다. 문제에서 주어진 예제(1,3)(2,4)(3,5)를 통해서 설명하도록 하겠습니다. 우선, 시작시간을 기준으로 오름차 정렬을 수행합니다. 다음으로, 시작시간이 가장 빠른 수업의 끝나는 시간(3)을 우선순위 큐(priority_queue)에 push합니다. (* 참고로 priority_queue는 오름차순으로 설정합니다.) priority_queue 에 다음으로 시작시간이 빠른 수업의 끝나는시간(4)를 push 합니다. 그 후 , 첫 번째 수업의 끝나는 ..
[C/C++] BOJ(백준) 2847 "게임을 만든 동준이" 문제 풀이 & 소스 코드 #문제정보 출처 : www.acmicpc.net/problem/2847 난이도 : 실버4 분류 : 그리디(GREEDY) 알고리즘 #문제분석 레벨별로 점수를 부여하기 위해서는, 각 레벨의 점수가 오름차 순으로 주어져야 합니다. 단, 점수를 내리는것을 최소한으로 해야 하기 때문에, i-1번째 레벨의 점수가 i번째 레벨의 점수보다 높은 점수를 갖고 있다면, i번째 레벨의 점수 - 1 값을 i-1번째 레벨에 부여하면 됩니다. 따라서 저는 레벨의 점수를 갖고 있는 level 벡터의 마지막 값을 compare 점수에 초기화 한 뒤 반복문을 돌려서 뒤에서부터 차례로 검사했습니다. int compare = level[N-1]; for (int i = N - 2 ; i >= 0 ; i--) { while (level[i..
[C/C++] BOJ(백준) 1744 "수 묶기" 문제 풀이 & 소스 코드 #문제정보 출처 : www.acmicpc.net/problem/1744 난이도 : 골드4 분류 : 그리디(GREEDY) 알고리즘 #문제분석 입력받은 수들을 양수,음수,0 으로 각각 다른 벡터에 저장해서 풀이했습니다. vector pos; // 양수 벡터 vector neg; // 음수 벡터 vector zero; // 0 저장 벡터 vector res; // 출력 값 CASE1 : 양수벡터 양수가 홀수개인 경우 : 가장 작은 값을 결과값에 더합니다. 양수가 짝수개인 경우 : 양수벡터를 오름차 정렬한 후 , 뒤에서 부터 2개씩 묶어 곱한 뒤 결과값에 더합니다. (내림차 정렬한 후 앞에서 부터 2개씩 곱해도 상관은 없습니다.) // positive int pSize = pos.size(); if (pSize..