728x90
반응형
728x90
반응형
inline 함수inline 함수는 매크로 함수를 대체할 수 있다. #include #define SQUARE(x) ((x)*(x))// inline으로 정의inline int square(int x){ return x*x;}int main(){ // inline 함수를 호출 std::cout3번째 줄에서 정의한 #define SQUARE(x) ((x)*(x)) 매크로 함수와 6~9 번째 줄에 정의한 inline int square(int x)는 동일한 기능을 수행하는 함수다. 매크로 함수를 호출한 경우 전처리 과정을 거치면서 SQUARE(12) 가 ((12)*(12))로 대체된다. 이와 같이 함수의 몸체 부분이 함수 호출 문장을 완전히 대체 했을 때 함수가 인라인화 되었다. 라고 표..
두 정수 a, b 가 주어진다. a부터 b 까지 숫자의 약수를 구한다. 약수의 갯수가 짝수면, 해당 수를 더하고, 홀수면 뺸다. 다양한 코드가 있지만 거의 대부분 나와같이 코드를 작성했고, 어떤 한분이 조금 독특한 방식으로 코드를 작성했는데, 이건 뭐 개인의 취향이지만 난 가독성도 중요하게 생각한다. 짧고 간결한것도 중요하지만, 누구나 다 쉽게 읽고 빠르게 파악할 수 있도록 코드를 짜는것도 중요하다고 생각한다. #include #include #include int solution(int left, int right) { int answer = 0; int count = 1; // 1은 무조건 포함 int len = right - left; // left 부터 right 까지 갯수 for(int i = ..
주어진 문자열을 소문자에서 대문자 순서로 정렬하라. #include #include #include #include // 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요. char* solution(const char* s) { // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요. int len = strlen(s); char temp; char* answer = (char*)malloc((sizeof(char) * len)); strcpy(answer, ""); // answer clear strcpy(answer, s); for (int i = 0; i < len; i++) { // bubble sort ..
없는 숫자 더하기, 0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요. 문제를 해결하는 방법은 2가지다. 1. 0부터 9까지 모두 더하면 45다. 배열 numbers에 있는 모든 숫자를 더한 다음 45에서 빼면 간단하게 해결 2. 배열에서 없는 숫자를 골라낸 다음 더하는 방법 실제로 기업에서 이런 테스트가 나왔을 때 1번과 같이 해결한다? 코딩 테스트는 통과하겠지만 풀이 과정 또한 중요하기 때문에 나 같으면 틀린 것으로 채첨 할 것 같다. 문제에는 분명 "모두 찾아 더한 수"라고 되어 있다. 1번 과같이 해결한 방법은 더한수를 리턴한..
아... 문자열에 취약한 콩이... 임베디드 개발을 하다 보면 문자열을 다룰일이 거의 없다. 아니 정확히 말하면 있는데 보통 하나의 바이트로 처리를 하니까 특별히 신경 쓸 일이 없다. 그리고, 한글? 다룰일이 없다. 이번 기회에 공부했다. 1. 길이가 n인 "수박수박수박수박수박..."과 같은 패턴을 유지하는 문자열을 리턴 2. 홀수면 "수", 짝수면 "박"으로 끝남. #include #include #include #include char* solution(int n) { // 리턴할 값은 메모리를 동적 할당해주세요. char* answer = (char*)malloc(((sizeof(char)*3)*n)); strcpy(answer, ""); // 쓰레기값 제거 for(int i = 0; i < n; ..
숫자가 담긴 배열 absolutes 숫자의 개수(길이)가 담긴 배열 abolutes_len 숫자의 부호가 담긴 배열 signs 숫자의 부호 개수(길이)가 담긴 배열 signs_len 1. absoultes에 담긴 모든 숫자를 더함. 2. 부호를 판별해 fasle면 숫자를 음수로 변경하고 더함. #include #include #include // absolutes_len은 배열 absolutes의 길이입니다. // signs_len은 배열 signs의 길이입니다. int solution(int absolutes[], size_t absolutes_len, bool signs[], size_t signs_len) { int answer = 0; for(int i = 0; i < absolutes_len; ..
주어진 번호의 뒷자리 4개를 제외하고 모두 '*'로 가리기 #include #include #include #include // 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요. char* solution(const char* phone_number) { // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요. char* answer = (char*)malloc(sizeof(char) * 20); int len = strlen(phone_number); int i = 0; while((len-i) > 4) { answer[i] = '*'; i++; } strcpy(&answer[i], &phone_number[i..
두 정수가 주어졌을 때 두 정수 사이의 합을 구해서 리턴, ex) 3, 5가 주어지면 3+4+5 = 12, 12를 리턴 ex) 5, 3으로 주어져도 위와 같이 12를 리턴해야 함. 내가 작성한 코드, 대부분 이런 방식으로 해결했다. #include #include #include long long solution(int a, int b) { long long answer = 0; int s, e; s = (a > b) ? b : a; e = (a > b) ? a : b; printf("%d, %d", s, e); for ( int i=s; ib) //if a is greater, replace num. num = a-b+1; return (long long) sum*num/2; //cast the num..
https://namu.wiki/w/%EC%BD%9C%EB%9D%BC%EC%B8%A0%20%EC%B6%94%EC%B8%A1 콜라츠 추측 - 나무위키 만약 이 추측이 거짓이라면, 1로 가지 않는 반례가 존재한다는 것을 의미한다. 수학자들은 이런 대표적인 반례에 대해서 자기 자신으로 순환하는 루프가 존재할 것으로 예상한다[10]. 예를들어 namu.wiki 주어진 수가 1이 될때까지 반복해서 작업을 한다. 1. 주어진수가 짝수면 2로 나눈다. 2. 주어진수가 홀수면 3을 곱하고 1을 더한다. 3. 결과로 나온수에 같은 작업(1번 or 2번)을 1이 될때까지 반복한다. #include #include #include int solution(long num) { if(num == 1) { return 0; } ..
문자열 str을 정수형으로 변환하는 문제, 1. str의 맨 앞에는 부호가 올 수 있다. 2. s는 부호와 숫자로만 이루어져 있다. 3. str은 0으로 시작하지 않는다. 조건들이 있지만 주의해야할 내용은 없는것 같다. #include #include #include int solution(const char* s) { int answer = 0; answer=atoi(s); return answer; } atoi 함수를 사용하면 해결된다. Ascii to Integer 함수다. 다른 방법으로는 #include #include #include int solution(const char* s) { int answer = 0; sscanf(s, "%d", &answer); return answer; } ss..
하샤드 수 구하기, https://ko.wikipedia.org/wiki/%ED%95%98%EC%83%A4%EB%93%9C_%EC%88%98 하샤드 수 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 하샤드 수 또는 니번 수는 주어진 진법에서 그 수의 각 자릿수 숫자의 합으로 그 수가 나누어지는 양의 정수를 말한다. 즉 이말은 하샤드 수의 정의가 자기자신 ko.wikipedia.org #include #include #include bool solution(int x) { bool answer = false; int harshad=0; int xbuf=x; while(xbuf > 0) { harshad += xbuf % 10; xbuf /= 10; } if(x % harshad ==..
입력된 정수 n이 어떤 양의 정수 x의 제곱인지 아닌지 판별하는 문제, 문제풀이 중 알아낸것 1. n에 0.5를 제곱하면 x가 나온다. 2. 소수점의 판별은 소수점 n에서 강제 형변환한 값을 빼서 나머지가 0이 아니면 소수다. 3. sqrt 함수 내가 작성한 코드 #include #include #include #include long long solution(long long n) { long long answer = 0; double exponentiation; exponentiation = pow(n, 0.5); // sqrt(n); 대체 가능 exponentiation = pow((exponentiation+1), 2); if((exponentiation - (long long)exponentia..
이번에 알아볼 C 표준 라이브러리 함수는 sscanf sscanf? 문자열 버퍼의 데이터를 지정된 포맷에 맞춰 변경해주는 함수다. 말로 설명이 어려우니 코드를 보면서 확인해보자. int main(void) { char str[13] = "ABC 123 ab"; char alpha[10]; int num=0; char alphaS[10]; sscanf(str, "%s %d %s", alpha, &num, alphaS); printf("%s", str); printf("\n"); printf("%s\n", alpha); printf("%d\n", num); printf("%s\n", alphaS); return 1; } 첫 번째 str[13] 변수에 문자열 "ABC 123 ab"가 저장되어 있다. sscan..
오늘 알아볼 memcpy 함수는 "메모리를 복사" 하는 함수다. memcpy? 메모리(Memory)를 복사(카피, copy) 하는 함수다. memcpy함수를 사용하기 위해서는 string.h파일이나 memory.h 파일이 include 되어 있어야 한다. 일반적으로 string.h파일을 include 한다. 아래 코드를 보자. #include #include int main(void) { int a = 10; int b = 0; printf("a = %d\n", a); printf("b = %d\n", b); memcpy(&b, &a, sizeof(int)); printf("a = %d\n", a); printf("b = %d\n", b); return 1; } int형 변수 a를 10으로 초기화하고, ..
오늘 알아볼 내용은 memset 함수다. memset? 메모리(Memory)를 설정(Settting) 하는 함수다. memset함수를 사용하기 위해서는 string.h 파일이나 memory.h 파일이 include 되어 있어야 한다. 일반적으로 string.h파일을 include 한다. 아래 코드를 보자. #include #include int main(void) { int a = 10; printf("%d\n", a); memset(&a, 0, (sizeof a)); printf("%d\n", a); } int형 변수 a가 10으로 초기화되어있고, printf를 통해 a를 출력한다. 결과는 10이 나올 것이다. 바로 아래 코드를 보면 memset이 나온다. msdn에 검색해보면 아래와 같이 나온다. m..
"__attribute__" 키워드는 GCC 컴파일러가 제공하는 확장 기능으로 C 표준은 아니며 윈도우의 #pragma와 비슷한 역할을 한다. Linux나 MCU 소스코드를 분석하다보면 자주 볼 수 있을 것이다. attribute라는 단어 그대로 "속성"을 지정하는 키워드다. __attribute__((__used__)) 컴파일러가 컴파일 과정에서 코드를 최적화 할 때 선언되어 있고 사용되지 않는 변수를 제거하지 않도록 하는 기능 변수를 선언해놓고 사용하지 않을 때 발생하는 관련 warning를 발생시키지 않음 __attribute__((__aligned__(x))) 선언한 변수의 메모리주소를 x의 배수로 정렬 example : __attribute__((__aligned__(sizeof(long))))..