Skip to content

Commit fcb95a4

Browse files
committed
added lecture2
1 parent 46cbf7a commit fcb95a4

File tree

15 files changed

+675
-24
lines changed

15 files changed

+675
-24
lines changed

lecture1/lecture1/ex010.cpp

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,21 @@ void ex010() {
1010
vector<int> number{ 125, 15232, 79, 1325, 97 };
1111
int max = 0;
1212
int max_idx;
13-
for (int i = 0; i < number.size(); i++)
14-
{
13+
for (int i = 0; i < number.size(); i++){
1514
int target = number[i];
1615
int sum = 0;
17-
while (target)
18-
{
16+
17+
while (target){
1918
sum += target % 10;
2019
target /= 10;
2120
}
2221

23-
if (max < sum)
24-
{
22+
if (max < sum){
2523
max = sum;
2624
max_idx = i;
2725
}
28-
else if (max == sum)
29-
{
30-
if (number[max_idx] < number[i])
31-
{
26+
else if (max == sum){
27+
if (number[max_idx] < number[i]){
3228
max = sum;
3329
max_idx = i;
3430
}
@@ -38,7 +34,6 @@ void ex010() {
3834
cout << "max number : " << number[max_idx] << ", sum max :: " << max << endl;
3935
}
4036

41-
4237
//int main() {
4338
// ex010();
4439
// std::cout << "done!" << std::endl;

lecture1/lecture1/ex011.cpp

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,25 @@ using namespace chrono;
66

77
// ¼ýÀÚÀÇ ÃÑ °³¼ö (small)
88

9-
void ex011() {
9+
void ex011(int N) {
1010
auto start = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
11-
12-
int N = 15;
1311
int cnt = 0;
14-
for (int i = 1; i < N + 1; i++)
15-
{
12+
for (int i = 1; i < N + 1; i++){
1613
int target = i;
17-
while (target)
18-
{
14+
while (target){
1915
cnt++;
2016
target /= 10;
2117
}
2218
}
23-
2419
cout << cnt << endl;
25-
2620
auto dur = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count() - start;
2721
std::cout << std::endl << "ex011 1 Dur time :: " << dur << " milliseconds" << std::endl;
2822
}
2923

3024

31-
int main() {
32-
ex011();
33-
std::cout << "done!" << std::endl;
34-
}
25+
//int main() {
26+
// int N = 15;
27+
// ex011(N);
28+
// std::cout << "done!" << std::endl;
29+
//}
3530
// 21

lecture1/lecture1/ex012.cpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#include <iostream>
2+
#include <vector>
3+
#include <chrono>
4+
using namespace std;
5+
using namespace chrono;
6+
7+
// ¼ýÀÚÀÇ ÃÑ °³¼ö (large)
8+
9+
void ex011_1(int N) {
10+
auto start = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
11+
int cnt = 9;
12+
int num = 1;
13+
int count = 0;
14+
int answer = 0;
15+
16+
while (N > cnt) {// 1 * 9 + 2 * 90 + 3 * 900 ...
17+
count += cnt;
18+
answer += cnt * num;
19+
cnt *= 10;
20+
num++;
21+
}
22+
answer += (N - count) * num;
23+
cout << answer << endl;
24+
auto dur = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count() - start;
25+
std::cout << "ex011_1 Dur time :: " << dur << " milliseconds" << std::endl;
26+
}
27+
28+
void ex011_2(int N) {
29+
auto start = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
30+
int cnt = 0;
31+
for (int i = 1; i < N + 1; i++) {
32+
int target = i;
33+
while (target) {
34+
cnt++;
35+
target /= 10;
36+
}
37+
}
38+
cout << cnt << endl;
39+
auto dur1 = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count() - start;
40+
std::cout << "ex011_2 Dur time :: " << dur1 << " milliseconds" << std::endl;
41+
}
42+
43+
44+
//int main() {
45+
// int N = 131320121;
46+
// ex011_1(N);
47+
// ex011_2(N);
48+
// std::cout << "done!" << std::endl;
49+
//}
50+
// 1070769987
51+
// ex011_1 Dur time :: 2 milliseconds
52+
// 1070769987
53+
// ex011_2 Dur time :: 2197 milliseconds

lecture1/lecture1/ex013.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#include <iostream>
2+
#include <vector>
3+
#include <chrono>
4+
using namespace std;
5+
using namespace chrono;
6+
7+
// °¡Àå ¸¹ÀÌ »ç¿ëµÈ ÀÚ¸´¼ö
8+
9+
void ex013(string N) {
10+
vector<int> vec(10);
11+
for (int i = 0; i < N.size(); i++){
12+
vec[int(N[i]) - 48]++;
13+
}
14+
15+
int max = 0;
16+
int max_idx;
17+
for (int i = 0; i < 10; i++){
18+
if (max <= vec[i]){
19+
max = vec[i];
20+
max_idx = i;
21+
}
22+
}
23+
24+
cout << "max_number : " << max_idx << ", max count: " << max << endl;
25+
}
26+
27+
//int main() {
28+
// string N = "12301156516215";
29+
// ex013(N);
30+
// std::cout << "done!" << std::endl;
31+
//}
32+
// max_number : 1, max count: 5

lecture1/lecture1/ex014.cpp

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
#include <iostream>
2+
#include <vector>
3+
#include <chrono>
4+
#include <string>
5+
using namespace std;
6+
using namespace chrono;
7+
8+
// °¡Àå ¸¹ÀÌ »ç¿ëµÈ ÀÚ¸´¼ö
9+
10+
int reverse(int x) {
11+
int ans = 0;
12+
string s = to_string(x);
13+
for (int i = s.size() - 1; i >= 0; i--) {
14+
ans += (int(s[i]) - 48) * pow(10, i);
15+
}
16+
//cout << ans << endl;;
17+
return ans;
18+
}
19+
20+
int reverse2(int x) {
21+
int ans = 0;
22+
while (x > 0) {
23+
int tmp = x % 10;
24+
ans = ans * 10 + tmp;
25+
x /= 10;
26+
}
27+
//cout << ans << endl;;
28+
return ans;
29+
}
30+
31+
bool isPrime(int x) {
32+
if (x == 1) return false;
33+
bool flag = true;
34+
for (int i = 2; i < x; i++) {
35+
if (x % i == 0) {
36+
flag = false;
37+
break;
38+
}
39+
}
40+
return flag;
41+
}
42+
43+
void ex014() {
44+
vector<int> vec = { 12, 123, 42, 123, 17, 71 };
45+
for (int i = 0; i < vec.size(); i++) {
46+
//int reverse_num = reverse(vec[i]);
47+
int reverse_num = reverse2(vec[i]);
48+
if (isPrime(reverse_num)) {
49+
cout << reverse_num << "<Prime Number>" << endl;
50+
}
51+
else {
52+
cout << vec[i] << endl;;
53+
}
54+
}
55+
}
56+
57+
58+
//int main() {
59+
// ex014();
60+
// std::cout << "done!" << std::endl;
61+
//}
62+
//12
63+
//123
64+
//42
65+
//123
66+
//71 < Prime Number >
67+
//17 < Prime Number >

lecture1/lecture1/ex015.cpp

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
#include <iostream>
2+
#include <vector>
3+
#include <chrono>
4+
using namespace std;
5+
using namespace chrono;
6+
7+
// Prime Number 소수 개수 구하기
8+
// 소수란 자신을 제외한 자연수로는 나누어 떨어지지 않는 자연수
9+
10+
// 1) 모든 수에 대해 약수가 있는지 확인
11+
void ex015_1(int N) {
12+
auto start = duration_cast<milliseconds>(system_clock::now().time_since_epoch()).count();
13+
14+
int count = 0;
15+
for (int j = 2; j < N; j++) {
16+
bool flag = true;
17+
for (int i = 2; i < j; i++) {
18+
if (j % i == 0) {
19+
flag = false;
20+
break;
21+
}
22+
}
23+
if (flag) count++;
24+
}
25+
26+
auto dur = duration_cast<milliseconds>(system_clock::now().time_since_epoch()).count() - start;
27+
cout << "(1) 1 부터 " << N << " 까지 사이에 존재하는 소수 개수 : " << count << " ex015_1 Dur time :: " << dur << " milliseconds" << endl;
28+
}
29+
30+
// 2) 모든 약수가 가운데 약수를 기준으로 대칭을 갖는 성질 이용 (제곱근까지만 확인 하면 됨)
31+
void ex015_2(int N) {
32+
auto start = duration_cast<milliseconds>(system_clock::now().time_since_epoch()).count();
33+
34+
int count = 0;
35+
for (int j = 2; j < N; j++) {
36+
bool flag = true;
37+
for (int i = 2; i * i <= j; i++) {
38+
if (j % i == 0) {
39+
flag = false;
40+
break;
41+
}
42+
}
43+
if (flag) count++;
44+
}
45+
46+
auto dur = duration_cast<milliseconds>(system_clock::now().time_since_epoch()).count() - start;
47+
cout << "(2) 1 부터 " << N << " 까지 사이에 존재하는 소수 개수 : " << count << " ex015_2 Dur time :: " << dur << " milliseconds" << endl;
48+
}
49+
50+
// 3) 에라토스테네스의 체 알고리즘 이용
51+
// 1. 2부터 N까지 모든 자연수 나열
52+
// 2. 남은 자연수 중 처리되지 않은 가장 작은 수 찾기
53+
// 3. 2번 에서 찾은 가장 작은 수의 배수를 모두 제거 (해당 작은 수는 제거하지 않는다.)
54+
// 4. 끝까지 2번과 3번을 반복
55+
void ex015_3(int N) {
56+
auto start = duration_cast<milliseconds>(system_clock::now().time_since_epoch()).count();
57+
58+
int count = 0;
59+
vector<int> container(N);
60+
for (int i = 2; i < N; i++) {
61+
container[i] = i; // 2부터 N까지 모든 자연수 나열
62+
}
63+
64+
for (int i = 2; i < N; i++) {
65+
if (container[i] == 0) continue; // 이미 처리 ‰榮摸 통과
66+
for (int j = i + i; j < N; j += i) {// 해당 작은 수를 제거하지 않도록 i+i에서 시작
67+
container[j] = 0; // 해당 가장 작은 수의 배수를 모두 제거
68+
}
69+
}
70+
71+
for (int i = 2; i < N; i++) {
72+
if (container[i] != 0) count++; // 소수 카운트
73+
}
74+
75+
auto dur = duration_cast<milliseconds>(system_clock::now().time_since_epoch()).count() - start;
76+
cout << "(3) 1 부터 " << N << " 까지 사이에 존재하는 소수 개수 : " << count << " ex015_3 Dur time :: " << dur << " milliseconds" << endl;
77+
}
78+
79+
80+
//int main() {
81+
// int max = 399999;
82+
// ex015_1(max);
83+
// ex015_2(max);
84+
// ex015_3(max);
85+
// return 0;
86+
//}
87+
//(1) 1 부터 399999 까지 사이에 존재하는 소수 개수 : 33860 ex015_1 Dur time :: 10670 milliseconds
88+
//(2) 1 부터 399999 까지 사이에 존재하는 소수 개수 : 33860 ex015_2 Dur time :: 37 milliseconds
89+
//(3) 1 부터 399999 까지 사이에 존재하는 소수 개수 : 33860 ex015_3 Dur time :: 335 milliseconds

lecture1/lecture1/ex016.cpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#include <iostream>
2+
#include <vector>
3+
#include <chrono>
4+
using namespace std;
5+
using namespace chrono;
6+
7+
// Anagram (구글 인터뷰 문제)
8+
// 나열 순서는 다르지만 구성이 일치하면 아나그램이라 함.
9+
10+
void ex016() {
11+
string a = "AbaAeCe";
12+
string b = "baeeACA";
13+
//string b = "baeeACs";
14+
vector <int> chars1(52); // 26(소문자 97 - 122) + 26 (대문자 65 - 90)
15+
vector <int> chars2(52); // 26(소문자 97 - 122) + 26 (대문자 65 - 90)
16+
for (int i = 0; i < a.size(); i++) {
17+
int aski1 = int(a[i]);
18+
if (65 <= aski1 && 90 >= aski1) { //대문자
19+
chars1[aski1 - 39]++;
20+
}
21+
else { //소문자
22+
chars1[aski1 - 97]++;
23+
}
24+
25+
int aski2 = int(b[i]);
26+
if (65 <= aski2 && 90 >= aski2) { // 대문자
27+
chars2[aski2 - 39]++;
28+
}
29+
else { //소문자
30+
chars2[aski2 - 97]++;
31+
}
32+
}
33+
int flag = 0;
34+
for (int i = 0; i < chars1.size(); i++) {
35+
if (chars1[i] != chars2[i]) {
36+
flag = 1;
37+
break;
38+
}
39+
}
40+
41+
if (flag == 1) {
42+
cout << "diff" << endl;
43+
}
44+
else {
45+
cout << "same" << endl;
46+
}
47+
}
48+
49+
//int main() {
50+
// ex016();
51+
// std::cout << "done!" << std::endl;
52+
//}
53+
// same

0 commit comments

Comments
 (0)