알고리즘 89

[프로그래머스 level 1] 정수 제곱근 판별

[출처 : 프로그래머스] 문제 임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다. n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요. 제한 사항 n은 1 이상, 50000000000000 이하인 양의 정수입니다. 입출력 예 입출력 예#1 121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다. 입출력 예#2 3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다. 풀이 제곱근된 값 x가 정수인지, 아닌지 판단하여 정수가 아니면 -1을 리턴하였다. 정수일 경우 pow함수를 통해 x+1의 제곱을 구했다. #include #include #include #include..

[프로그래머스 level 1] 자연수 뒤집어 배열로 만들기

[출처 : 프로그래머스] 문제 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를 들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다. 제한 조건 n은 10,000,000,000이하인 자연수입니다. 풀이 자릿수 문제랑 비슷하다. 일의 자릿수를 구하고 10으로 나눠가며 십의 자리, 백의 자리 차례로 구한 값들을 차례로 배열에 넣으면 된다. #include #include #include int* solution(long long n) { // 리턴할 값은 메모리를 동적 할당해주세요. int* answer = (int*)malloc(sizeof(int)*12); for(int i=0; n!=0; i++){ answer[i]=n%10; n/=10; } return answ..

[프로그래머스 level 1] 자릿수 더하기

[출처 : 프로그래머스] 문제 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요. 예를 들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다. 제한사항 N의 범위 : 100,000,000 이하의 자연수 입출력 예 입출력 예 #1 문제의 예시와 같습니다. 입출력 예 #2 9 + 8 + 7 = 24이므로 24를 return 하면 됩니다. 풀이 10의 나머지는 일의 자릿수 이므로 n을 10으로 나눠가며 계속해서 일의 자릿수를 더하면 된다. #include #include #include int solution(int n) { int answer = 0; while(n){ answer += n%10; n /= 10; } return..

[프로그래머스 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..