알고리즘 c언어 26

[프로그래머스 level 1] 이상한 문자 만들기

[출처 : 프로그래머스] 문제 문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백 문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요. 제한 사항 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야 합니다. 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다. 입출력 예 s return try hello world TrY HeLlO WoRlD 입출력 예 설명 try hello world는 세 단어 try, hello, world로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸..

[프로그래머스 level 1] 약수의 합

[출처 : 프로그래머스] 문제 정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요. 제한 사항 n은 0 이상 3000이하인 정수입니다. 입출력 예 n return 12 28 5 6 입출력 예 #1 12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다. 입출력 예 #2 5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다. 풀이 이전에 약수와 관련된 문제를 풀면서 많이 해봤던 약수 구하기이다. 1부터 n까지 수를 번갈아 가며 n에 나누었을 때 나머지가 0인 수가 약수이다. #include #include #include int solution(int n) { int answer = 0; for(int i=1; i

[프로그래머스 level 1] 문자열을 정수로 바꾸기

[출처 : 프로그래머스] 문제 문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요. 제한 조건 s의 길이는 1 이상 5이하입니다. s의 맨 앞에는 부호(+, -)가 올 수 있습니다. s는 부호와 숫자로만 이루어져 있습니다. s는 0으로 시작하지 않습니다. 입출력 예 예를 들어 str이 1234이면 1234를 반환하고, -1234이면 -1234를 반환하면 됩니다. str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다. 풀이 stdlib.h 에 선언되어있는 atoi 함수(ASCII string to integer)를 사용하면 10진법으로 표기된 문자열을 정수로 바꿀 수 있다. #include #include #include // 파라미터로 주어지는..

[프로그래머스 level 1] 수박수박수박수박수박수?(strcpy 활용하기)

[출처 : 프로그래머스] 문제 길이가 n이고, 수박수박수박수....와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 수박수박을 리턴하고 3이라면 수박수를 리턴하면 됩니다. 제한 조건 n은 길이 10,000이하인 자연수입니다. 입출력 예 풀이 malloc 함수로 동적할당을 받으면 초기화하지 않을 때까지 쓰레기 값이 들어가 있다. 따라서 반드시 NULL로 초기화를 해주기!!!! strcpy(answer, "\0"); 이거 안해서 계속 실패했다. 코드 #include #include #include #include char* solution(int n) { char* s="수"; char* p="박"; // 리턴할 값은 메모리를 동적 할당해주세요. char*..

[프로그래머스 level 1] 문자열 다루기(isdigit함수)

[출처 : 프로그래머스] 문제 문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 a234이면 False를 리턴하고 1234라면 True를 리턴하면 됩니다. 제한 사항 s는 길이 1 이상, 길이 8 이하인 문자열입니다. 풀이 #include #include #include #include // 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요. bool solution(const char* s) { bool answer=true; if(strlen(s)==4||strlen(s)==6){ for(int i=0; i

[프로그래머스 level 1] 문자열 내림차순으로 배치하기

[출처 : 프로그래머스] 문제 문자열 s에 나타나는 문자를 큰 것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요. s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다. 제한 사항 str은 길이 1 이상인 문자열입니다. 풀이 - 나는 선택정렬을 사용하여 풀었다. 선택 정렬은 O(N^2)의 시간 복잡도. 그렇게 좋진 않다. #include #include #include #include #define swap(x, y, temp) ((temp=x), (x=y), (y=temp)) // 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요. char* solution(const char* s) { i..

[프로그래머스 level 1] 두 정수 사이의 합

[출처 : 프로그래머스] 문제 문제 설명 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다. 제한 조건 a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요. a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다. a와 b의 대소관계는 정해져있지 않습니다. 풀이 #include #include #include #define swap(x, y, temp) (temp=x, x=y, y=temp) long long solution(int a, int b) { long long answer = 0; int temp; if(a>b) s..

[프로그래머스 level 1] 가운데 글자 가져오기

[출처 : 프로그래머스] 문제 문제 설명 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두 글자를 반환하면 됩니다. 제한사항 s는 길이가 1 이상, 100이하인 스트링입니다. 예시 풀이 문자열에 대해 좀 더 제대로 이해할 수 있었던 문제였다. 문자열 포인터에 대한 개념이 명확히 세워지지 않아서 굳이 strcpy를 사용해가며 이상하게 코드를 짰다. 어쨋던 정답을 맞히고 다른 사람들 코드를 보니 문자열에 다시 공부를 해야겠다는 생각이 든다. - 처음에 짠 코드 #include #include #include // 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요. char* solution(const cha..

[알고리즘 3단계] 이진 탐색(Binary Search)

[출처 : Goorm 사이트 - 웃긴 뽑기] 문제 Binary Search (이진 탐색)을 통해서 오름차순으로 정렬된 수열 내에 찾고 싶은 수의 존재 유무와 위치를 출력하는 프로그램을 작성하십시오. 이진 탐색 알고리즘(binary search algorithm)은 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘입니다. 처음 중간의 값을 임의의 값으로 선택하여, 그 값과 찾고자 하는 값의 크고 작음을 비교하는 방식을 채택하고 있습니다. 처음 선택한 중앙값이 만약 찾는 값보다 크면 그 값은 새로운 최고값이 되며, 작으면 그 값은 새로운 최하 값이 됩니다. 검색 원리상 정렬된 리스트에만 사용할 수 있다는 단점이 있지만, 검색이 반복될 때마다 목표값을 찾을 확률은 두 배가 되므로 속도가 빠르다는..

[알고리즘 2단계] 여려운 문제(정수의 각 자리수 합 구하기)

[출처 : Goorm 사이트 - Yun Goon] 문제 팩토리얼은 느낌표를 사용하여 표기하며, 다음과 같이 정의합니다. 0! = 1 N! = N * (N-1)! (단, N은 1 이상의 정수) 예를 들어 3!은 3*2*1 = 6이 되고, 10!은 10*9*8*7*6*5*4*3*2*1 = 3628800이 됩니다. 이번 문제에서는 팩토리얼을 통해 만들어진 결과 값이 두 자리 이상이면 한 자리가 될 때까지 자릿수를 더합니다. 예를 들어 3!은 6이므로 그대로 6이 되고, 10!은 3628800이므로 3+6+2+8+8+0+0 = 27까지 계산되지만 아직 한 자리가 아니기에 또 자릿수를 더한 2+7 = 9가 최종 결과값이 됩니다. 위와 같은 조건으로 계산할 때, 입력으로 N이 주어지면 N!을 구하여 결과 값이 한 ..