알고리즘 & 자료구조/기초 다잡기
6. 숫자만 추출
알못에서잘알까지
2020. 9. 1. 17:49
6번 문제
내가 풀이한 답
문자가 50을 넘지 않으므로 51까지 배열을 선언하였다. 그리고C/C++ 에서는 Char형 데이터와 Int형 데이터를 제대로 구분해 본 적이 없었다. 그러던 중 아스키 코드를 알게 되었고 공부를 하게 되었다. (https://almotjalal.tistory.com/22) 공부를 한 뒤 코드를 짜 보니 char형과 int형이 구분되었고 char형 데이터를 int형 데이터로 바꾸는 작업도 성공했다. 그리고 순회(for)를 돌면서 숫자들이 쌓이면 자릿수가 변하므로 *10씩 곱해주었다. 약수 구하는 것은 5번 문제(진약수)와 비슷했다.
#include <stdio.h>
#include <cstring>
using namespace std;
int main(int argc, char** argv) {
//freopen("input.txt", "rt", stdin);
char a[51];
int num = 0, cnt = 0, i;
scanf("%s", &a);
for(i=0; i<strlen(a); i++){
if((a[i]>=48) && (a[i]<=57)){
num = num * 10 + (a[i]-'0');
}
}
for(i=1; i<=num; i++) {
if(num%i==0) cnt++;
}
printf("%d\n%d\n", num, cnt);
return 0;
}
그 결과 통과를 했다.
사이트의 답안
#include<stdio.h>
using namespace std;
int main(){
//freopen("input.txt", "rt", stdin);
char a[100];
int res=0, cnt=0, i;
scanf("%s", &a);
for(i=0; a[i]!='\0'; i++){
if(a[i]>=48 && a[i]<=57){
res=res*10+(a[i]-48);
}
}
printf("%d\n", res);
for(i=1; i<=res; i++){
if(res%i==0) cnt++;
}
printf("%d\n", cnt);
return 0;
}
사이트의 답안과 비슷한데 순회(for)문을 도는 과정에서 차이가 있었다. 배열에서 빈 인덱스는 '\0'으로 채워지는데 그것을 이용한 것이다. 나머지는 다 똑같은 논리였다.