15번 - 소수의 개수
자연수 N이 입력되면 자연수 N이 입력되면 1부터 N까지의 소수의 개수를 출력하는 프로그램을 작성하세요. 만약 20이 입력되면 1부터 20까지의 소수는 2, 3, 5, 7, 11, 13, 17, 19로 총 8개입니다. 제한시간은 1초입니다.
입력: 20
출력: 8
// 15번 - 소수의 개수 (제한 시간 1초)
// 제한시간 넘어버림
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int N, cnt = 0;
scanf("%d", &N);
for (int i = 2; i <= N; i++) { //1은 소수가 아님
//flag가 1이면 소수
int flag = 1;
for (int j = 2; j * j<= i; j++) {
if (i % j == 0) {
flag = 0;
break;
}
} // i의 제곱근만 확인해보면 됨
// 즉 j*j <= i
//나눠서 0인게 없으면 flag는 여전히 1 즉, 해당 i는 소수이다
if (flag == 1) cnt++;
}
printf("%d\n", cnt);
return 0;
}
16번 - 아나그램
Anagram이란 두 문자열이 알파벳의 나열 순서를 다르지만 그 구성이 일치하면 두 단어는 아나그램이라고 합니다. 예를 들면 AbaAeCe 와 baeeACA 는 알파벳을 나열 순서는 다르지만 그 구성을 살펴보면 A(2), a(1), b(1), C(1), e(2)로 알파벳과 그 개수가 모두 일치합니다. 즉 어느 한 단어를 재 배열하면 상대편 단어가 될 수 있는 것을 아나그램이라 합니다. 길이가 같은 두 개의 단어가 주어지면 두 단어가 아나그램인지 판별하는 프로그램을 작성하세 요. 아나그램 판별시 대소문자가 구분됩니다.
입력예제
AbaAeCe
baeeACA
출력예제
YES
// 16번 - 아나그램
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <algorithm>
//알파벳 소문자+대문자 합친 수 (비교용_
//전역으로 선언하면 0이 채워져있음
int a[60], b[60];
int main() {
char str[100];
int i;
scanf("%s", &str);
for (int i = 0; str[i] != '\0'; i++) {
if (str[i] >= 65 && str[i] <= 90) {//대문자면
a[(str[i] - 64)]++;
}
else {
a[(str[i] - 70)]++;
}
}
scanf("%s", &str);
for (int i = 0; str[i] != '\0'; i++) {
if (str[i] >= 65 && str[i] <= 90) {//대문자면
b[(str[i] - 64)]++;
}
else {
b[(str[i] - 70)]++;
}
}
for (int i = 1; i <= 52; i++) //52는 알파벳 소문자 대문자 합한 수
if (a[i] != b[i]) {
printf("NO");
exit(0);
}
printf("YES");
}
*첫번째 문자들도 str에, 두번째 문자들도 str에 str은 하나만 사용해도 된다.
17번 - 선생님 퀴즈
현수네 반은 학생이 N명 있습니다. 수업도중 선생님이 잠깐 자리를 비워야 하는데 그 동안 학 생들이 떠들거나 놀지 않도록 각 학생들에게 퀴즈를 냈습니다. 선생님은 각 학생들에게 숫자가 적힌 카드를 줬습니다. 각 학생들은 1부터 자기 카드에 적힌 숫자까지의 합을 구하는 퀴즈입니다. 선생님이 돌아와서 각 학생들의 답이 맞았는지 확인을 하려고 하는데 너무 힘들어서 여러분에 게 자동으로 채점을 하는 프로그램을 부탁했습니다. 여러분이 선생님을 도와주세요.
입력 :
3
10 55
20 350
100 5050
출력예제:
YES //1부터 10까지의 합이 55가 맞기에 YES 출력
NO
YES
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <algorithm>
int main() {
int N, num = 0, ans = 0;
int res[10];
scanf("%d", &N);
for (int i = 1; i <= N; i++) {
scanf("%d %d", &num, &ans);
int sum = 0;
for (int j = 1; j <= num; j++) {
sum = sum + j;
}
if (sum == ans) printf("YES\n");
else printf("NO\n");
}
return 0;
}
'[알고리즘] 문제풀이 연습' 카테고리의 다른 글
[알골90제] 46번 - 멀티태스킹 (카카오 먹방 문제 변형) (0) | 2019.07.26 |
---|---|
[알골 90제] 37번 - LRU 카카오 캐시 문제 변형 (0) | 2019.07.23 |
[알골 90제] 14번 - 뒤집은 소수 (0) | 2019.07.13 |
[알골 90제] 13번 - 가장 많이 상용된 자릿수 (0) | 2019.07.13 |
[0707 복습] 알골 연습문제 90제 - 11번 (0) | 2019.07.07 |