Skip to content

Commit 2c6a8a6

Browse files
committed
Update
1 parent d70c51d commit 2c6a8a6

File tree

9 files changed

+265
-0
lines changed

9 files changed

+265
-0
lines changed

7/1.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
// 순차 탐색 소스코드 구현
6+
int sequantialSearch(int n, string target, vector<string> arr) {
7+
// 각 원소를 하나씩 확인하며
8+
for (int i = 0; i < n; i++) {
9+
// 현재의 원소가 찾고자 하는 원소와 동일한 경우
10+
if (arr[i] == target) {
11+
return i + 1; // 현재의 위치 반환 (인덱스는 0부터 시작하므로 1 더하기)
12+
}
13+
}
14+
return -1; // 원소를 찾지 못한 경우 -1 반환
15+
}
16+
17+
int n; // 원소의 개수
18+
string target; // 찾고자 하는 문자열
19+
vector<string> arr;
20+
21+
int main(void) {
22+
cout << "생성할 원소 개수를 입력한 다음 한 칸 띄고 찾을 문자열을 입력하세요." << '\n';
23+
cin >> n >> target;
24+
25+
cout << "앞서 적은 원소 개수만큼 문자열을 입력하세요. 구분은 띄어쓰기 한 칸으로 합니다." << '\n';
26+
for (int i = 0; i < n; i++) {
27+
string x;
28+
cin >> x;
29+
arr.push_back(x);
30+
}
31+
32+
// 순차 탐색 수행 결과 출력
33+
cout << sequantialSearch(n, target, arr) << '\n';
34+
}

7/2.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
// 이진 탐색 소스코드 구현(재귀 함수)
6+
int binarySearch(vector<int> arr, int target, int start, int end) {
7+
if (start > end) return -1;
8+
int mid = (start + end) / 2;
9+
// 찾은 경우 중간점 인덱스 반환
10+
if (arr[mid] == target) return mid;
11+
// 중간점의 값보다 찾고자 하는 값이 작은 경우 왼쪽 확인
12+
else if (arr[mid] > target) return binarySearch(arr, target, start, mid - 1);
13+
// 중간점의 값보다 찾고자 하는 값이 큰 경우 오른쪽 확인
14+
else return binarySearch(arr, target, mid + 1, end);
15+
}
16+
17+
int n, target;
18+
vector<int> arr;
19+
20+
int main(void) {
21+
// n(원소의 개수)와 target(찾고자 하는 값)을 입력 받기
22+
cin >> n >> target;
23+
// 전체 원소 입력 받기
24+
for (int i = 0; i < n; i++) {
25+
int x;
26+
cin >> x;
27+
arr.push_back(x);
28+
}
29+
// 이진 탐색 수행 결과 출력
30+
int result = binarySearch(arr, target, 0, n - 1);
31+
if (result == -1) {
32+
cout << "원소가 존재하지 않습니다." << '\n';
33+
}
34+
else {
35+
cout << result + 1 << '\n';
36+
}
37+
}

7/3.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
// 이진 탐색 소스코드 구현(반복문)
6+
int binarySearch(vector<int> arr, int target, int start, int end) {
7+
while (start <= end) {
8+
int mid = (start + end) / 2;
9+
// 찾은 경우 중간점 인덱스 반환
10+
if (arr[mid] == target) return mid;
11+
// 중간점의 값보다 찾고자 하는 값이 작은 경우 왼쪽 확인
12+
else if (arr[mid] > target) end = mid - 1;
13+
// 중간점의 값보다 찾고자 하는 값이 큰 경우 오른쪽 확인
14+
else start = mid + 1;
15+
}
16+
return -1;
17+
}
18+
19+
int n, target;
20+
vector<int> arr;
21+
22+
int main(void) {
23+
// n(원소의 개수)와 target(찾고자 하는 값)을 입력 받기
24+
cin >> n >> target;
25+
// 전체 원소 입력 받기
26+
for (int i = 0; i < n; i++) {
27+
int x;
28+
cin >> x;
29+
arr.push_back(x);
30+
}
31+
// 이진 탐색 수행 결과 출력
32+
int result = binarySearch(arr, target, 0, n - 1);
33+
if (result == -1) {
34+
cout << "원소가 존재하지 않습니다." << '\n';
35+
}
36+
else {
37+
cout << result + 1 << '\n';
38+
}
39+
}

7/4.cpp

Whitespace-only changes.

7/4.java

Whitespace-only changes.

7/5.cpp

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
// 이진 탐색 소스코드 구현(반복문)
6+
int binarySearch(vector<int> arr, int target, int start, int end) {
7+
while (start <= end) {
8+
int mid = (start + end) / 2;
9+
// 찾은 경우 중간점 인덱스 반환
10+
if (arr[mid] == target) return mid;
11+
// 중간점의 값보다 찾고자 하는 값이 작은 경우 왼쪽 확인
12+
else if (arr[mid] > target) end = mid - 1;
13+
// 중간점의 값보다 찾고자 하는 값이 큰 경우 오른쪽 확인
14+
else start = mid + 1;
15+
}
16+
return -1;
17+
}
18+
19+
// N(가게의 부품 개수)와 M(손님이 확인 요청한 부품 개수)
20+
int n, m;
21+
// 가게에 있는 전체 부품 번호들
22+
vector<int> arr;
23+
// 손님이 확인 요청한 부품 번호들
24+
vector<int> targets;
25+
26+
int main(void) {
27+
cin >> n;
28+
for (int i = 0; i < n; i++) {
29+
int x;
30+
cin >> x;
31+
arr.push_back(x);
32+
}
33+
cin >> m;
34+
for (int i = 0; i < m; i++) {
35+
int target;
36+
cin >> target;
37+
targets.push_back(target);
38+
}
39+
// 손님이 확인 요청한 부품 번호를 하나씩 확인
40+
for (int i = 0; i < m; i++) {
41+
// 해당 부품이 존재하는지 확인
42+
int result = binarySearch(arr, targets[i], 0, n - 1);
43+
if (result != -1) {
44+
cout << "yes" << ' ';
45+
}
46+
else {
47+
cout << "no" << ' ';
48+
}
49+
}
50+
}

7/6.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
// N(가게의 부품 개수)와 M(손님이 확인 요청한 부품 개수)
6+
int n, m;
7+
int arr[1000001];
8+
vector<int> targets;
9+
10+
int main(void) {
11+
cin >> n;
12+
for (int i = 0; i < n; i++) {
13+
int x;
14+
cin >> x;
15+
arr[x] = 1;
16+
}
17+
cin >> m;
18+
for (int i = 0; i < m; i++) {
19+
int target;
20+
cin >> target;
21+
targets.push_back(target);
22+
}
23+
// 손님이 확인 요청한 부품 번호를 하나씩 확인
24+
for (int i = 0; i < m; i++) {
25+
// 해당 부품이 존재하는지 확인
26+
if (arr[targets[i]] == 1) {
27+
cout << "yes" << ' ';
28+
}
29+
else {
30+
cout << "no" << ' ';
31+
}
32+
}
33+
}

7/7.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
// N(가게의 부품 개수)와 M(손님이 확인 요청한 부품 개수)
6+
int n, m;
7+
// 가게게 있는 전체 부품 번호를 담을 집합(set) 컨테이너
8+
set<int> s;
9+
vector<int> targets;
10+
11+
int main(void) {
12+
cin >> n;
13+
for (int i = 0; i < n; i++) {
14+
int x;
15+
cin >> x;
16+
s.insert(x);
17+
}
18+
cin >> m;
19+
for (int i = 0; i < m; i++) {
20+
int target;
21+
cin >> target;
22+
targets.push_back(target);
23+
}
24+
// 손님이 확인 요청한 부품 번호를 하나씩 확인
25+
for (int i = 0; i < m; i++) {
26+
// 해당 부품이 존재하는지 확인
27+
if (s.find(targets[i]) != s.end()) {
28+
cout << "yes" << ' ';
29+
}
30+
else {
31+
cout << "no" << ' ';
32+
}
33+
}
34+
}

7/8.cpp

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
// 떡의 개수(N)와 요청한 떡의 길이(M)
6+
int n, m;
7+
// 각 떡의 개별 높이 정보
8+
vector<int> arr;
9+
10+
int main(void) {
11+
cin >> n >> m;
12+
for (int i = 0; i < n; i++) {
13+
int x;
14+
cin >> x;
15+
arr.push_back(x);
16+
}
17+
// 이진 탐색을 위한 시작점과 끝점 설정
18+
int start = 0;
19+
int end = 1e9;
20+
// 이진 탐색 수행 (반복적)
21+
int result = 0;
22+
while (start <= end) {
23+
long long int total = 0;
24+
int mid = (start + end) / 2;
25+
for (int i = 0; i < n; i++) {
26+
// 잘랐을 때의 떡의 양 계산
27+
if (arr[i] > mid) total += arr[i] - mid;
28+
}
29+
if (total < m) { // 떡의 양이 부족한 경우 더 많이 자르기(왼쪽 부분 탐색)
30+
end = mid - 1;
31+
}
32+
else { // 떡의 양이 충분한 경우 덜 자르기(오른쪽 부분 탐색)
33+
result = mid; // 최대한 덜 잘랐을 때가 정답이므로, 여기에서 result에 기록
34+
start = mid + 1;
35+
}
36+
}
37+
cout << result << '\n';
38+
}

0 commit comments

Comments
 (0)