320x100
728x90
문자열 숫자를 입력받아
해당 숫자로 만들 수 있는 소수를 찾는 문제 입니다.
(아마도 프로그래머스 2 레벨 문제..maybe)
/**
* 소수 찾기 문제
* 문자열 numbers가 주어졌을 때, 만들 수 있는 소수 개수 찾기
*/
#include <string.h>
#include <stdio.h>
#include <stdbool.h>
#include "math.h"
#define _NO_CRT_STDIO_INLINE
int biggest_number(int* arr, int length);
int get_Prime(int* arr, int num, int size);
int main()
{
char str[7];
int num[7] = {0,};
int copy[7] = { 0, };
int len = 0;
int total_prime;
//문자열 입력받기
printf("input numbers : ");
while (0 == scanf_s("%[^\n]", str, 7)) { // 길이가 0 혹은 7을 넘을 시 계속 입력받음
printf("숫자를 다시 입력하세요.\n");
rewind(stdin);
printf("input numbers : ");
}
len = strlen(str); //입력받은 숫자 길이
// 한자리 숫자 씩 배열에 넣기
for (int i = 0; str[i] != '\0'; i++) {
num[i] = str[i] - '0';
}
memcpy(copy, num, sizeof(int)*len);
int bigNum = biggest_number(num, len);
total_prime = get_Prime(copy, bigNum, len);
printf("%d", total_prime);
return 0;
}
//가장 큰수 - 내림차순 정렬
int biggest_number(int* arr,int length)
{
int temp;
int number = 0;
for (int i = 0; i < length; i++) {
for (int j = 0; j < (length - 1 - i); j++) {
if (arr[j] < arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
//정수로 변환
for (int i = 0 ; i <length; i++) {
for (int j = 1; j < length - i; j++) {
arr[i] *= 10;
}
number += arr[i];
}
return number;
}
//범위 내의 소수 판별
int get_Prime(int* arr, int num, int size)
{
int cnt, comp;
int check = 0, len = 0, total = 0;
int temp[7] = {10,10,10,10,10,10,10};
for (int i = 2; i <= num; i++) {
cnt = 0;
for (int j = 1; j <= i; j++) {
if (i % j == 0) cnt++; //소수 아닌 수
}
if (cnt == 2) { // 소수일 때
int prime = i;
char s1[7];
int len = floor(log10(prime) + 1); //숫자 자리수 구하기
sprintf_s(s1, 7, "%d", prime); //문자열 배열에 복사
memcpy(temp, arr, sizeof(int)*size);
/*해당 소수가 입력받은 숫자로 만들 수 있는 수인지 확인*/
for (int k = 0; k < len; k++) {
for (int n = 0; n < size; n++) {
comp = temp[n] + 48;
if (s1[k] == comp) { //해당하는 문자가 있으면
memmove(temp + n, temp + n + 1, (7-n-1)*sizeof(*temp)); //해당 문자 삭제(사용완료)
check++;
}
}
if (check == len) total++;
}
check = 0;
}
}
return total;
}
개선할 점이나 궁금한 점
댓글 환영 입니다:)
728x90
반응형
'코딩테스트' 카테고리의 다른 글
[kotlin] leetcode - Binary Search (0) | 2022.04.26 |
---|---|
[python/연결리스트] leetcode - Add Two Numbers 문제 (0) | 2022.04.20 |
[python/Array] leetcode - two sum 문제 (0) | 2022.04.18 |
[C언어] 두 디렉토리 비교 (0) | 2022.03.28 |
[C언어] 삼각형 경로 최대 합 찾기 (0) | 2022.03.28 |