Skip to content

Commit a2845fd

Browse files
committed
2 parents bb25efe + bd49021 commit a2845fd

18 files changed

+587
-1
lines changed

README.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@
2121
|5주차(02/22-02/28)| 부품 찾기 | 떡볶이 떡 만들기 | # | # | **이진 탐색** |
2222
|5주차(02/23-02/27)| 1로 만들기 | 개미 전사 | 바닥 공사 | 효율적인 화폐 구성 | **DP** |
2323
|6주차(02/27~03/02)| 미래도시 | 전보 | # | # | **최단 경로** |
24+
|7주차(03/09~03/15)| 팀결성 | 도시 분할 계획 | 커리큘럼 | # | **그래프 이론** |
25+
|8주차(03/16~03/22)| **스코페 1차 리뷰로 대체** | # | # | # | # |
26+
|9주차(03/23~03/29)| **백준만 진행** | # | # | # | # |
27+
|10주차(03/30~04/05)| 모험가 길드 | 곱하기 혹은 더하기 | 문자열 뒤집기 | # | **그리디** |
28+
|11주차(04/06~04/12)| 만들 수 없는 금액 | 볼링공 고르기 | # | # | **그리디** |
2429

2530
### 백준 숙제
2631
|주차|문제1|문제2|문제3|문제4|
@@ -32,7 +37,11 @@
3237
|4주차(02/20-02/22)| 1783 병든 나이트(그리디) | 10773 제로(구현) | # | # |
3338
|5주차(02/27-03/01)| 10815 숫자 카드(정렬) | 1920 수 찾기(이진 탐색) | 1535 안녕(DP) | # |
3439
|6주차(03/01-03/08)| 14496 그대, 그머가 되어(다잌스트라) | 14501 퇴사 (DP) | 11403 경로찾기 (플로이드 와샬) | # |
35-
40+
|7주차(03/09~03/15)| 1012 유기농배추(DFS) | 2644 촌수계산 (BFS) | 11909 배열탈출 (다익스트라) | 5557 1학년(DP) |
41+
|8주차(03/16~03/22)| **스코페 1차 리뷰로 대체** | # | # | # | # |
42+
|9주차(03/23~03/29)| 4963 섬의갯수(BFS) | 2178 미로탈출(DFS) | # | # |
43+
|10주차(03/30~04/05)| 6603 로또(DFS) | 7562 나이트의 이동(BFS) | # | # |
44+
|11주차(04/06~04/12)| 11724 연결요소의 개수 | 2667 단지번호붙이기 | # | # |
3645

3746
---
3847

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
arr = []
2+
arr.append(list(map(int, list(input().rstrip()))))
3+
4+
n = len(arr[0])
5+
6+
result = max(arr[0][0] + arr[0][1], arr[0][0] * arr[0][1])
7+
8+
for i in range(2, n):
9+
if arr[0][i] == 0 or arr[0][i] == 1:
10+
result += arr[0][i]
11+
else:
12+
result *= arr[0][i]
13+
14+
print(result)

cmkim/모험가길드_311p.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
n = int(input())
2+
arr = list(map(int, input().split()))
3+
arr.sort()
4+
5+
result = 0
6+
max = 0
7+
8+
for i in arr:
9+
max += 1
10+
if max == i:
11+
result += 1
12+
max = 0
13+
14+
print(result)

cmkim/문자열뒤집기_313p.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
arr = []
2+
arr.append(list(map(int, input().rstrip())))
3+
4+
count = 0
5+
temp = arr[0][0]
6+
7+
for i in range(len(arr[0])):
8+
if temp != arr[0][i]:
9+
temp = arr[0][i]
10+
count += 1
11+
12+
print(count//2)

mhkim/baekjoon/16953.cpp

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/**
2+
* @file 16953.cpp
3+
* @brief A -> B
4+
* @author Sam Kim (samkim2626@gmail.com)
5+
*/
6+
#include <iostream>
7+
8+
using namespace std;
9+
10+
int main()
11+
{
12+
ios_base::sync_with_stdio(false);
13+
cin.tie(nullptr);
14+
15+
int a, b;
16+
cin >> a >> b;
17+
18+
int cnt = 0;
19+
while (1)
20+
{
21+
if (a > b)
22+
{
23+
cout << -1 << '\n';
24+
break;
25+
}
26+
if (a == b)
27+
{
28+
cout << cnt + 1 << '\n';
29+
break;
30+
}
31+
32+
if (b % 10 == 1)
33+
{
34+
b /= 10;
35+
}
36+
else if (b % 2 == 0)
37+
{
38+
b /= 2;
39+
}
40+
else
41+
{
42+
cout << -1 << '\n';
43+
break;
44+
}
45+
cnt++;
46+
}
47+
48+
return 0;
49+
}

mhkim/baekjoon/5557.cpp

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/**
2+
* @file 5557.cpp
3+
* @brief 1학년
4+
* @author Sam Kim (samkim2626@gmail.com)
5+
*
6+
* 못 풀어서 솔루션 참고. 문제 풀이, 접근 방법 다시 확인
7+
*
8+
* 2차원배열
9+
* dp[i][j] : i번째 수까지 계산했을 때 j값을 만드는 올바른 등식의 수
10+
* 1. j-num[i] >= 0 / 2. j+num[i] <= 20
11+
*
12+
* dp테이블 int -> long long (2^63-1)
13+
*/
14+
#include <iostream>
15+
16+
using namespace std;
17+
18+
int num[101];
19+
long long dp[101][21];
20+
21+
int main()
22+
{
23+
ios_base::sync_with_stdio(false);
24+
cin.tie(nullptr);
25+
26+
int n;
27+
cin >> n;
28+
for (int i = 1; i <= n; i++)
29+
{
30+
cin >> num[i];
31+
}
32+
33+
dp[1][num[1]] = 1; // 첫 번째 수까지 경우의 수 초기화
34+
for (int i = 2; i <= n; i++)
35+
{
36+
for (int j = 0; j <= 20; j++)
37+
{
38+
if (dp[i - 1][j] >= 0)
39+
{
40+
if (j - num[i] >= 0)
41+
{
42+
dp[i][j - num[i]] += dp[i - 1][j];
43+
}
44+
if (j + num[i] <= 20)
45+
{
46+
dp[i][j + num[i]] += dp[i - 1][j];
47+
}
48+
}
49+
}
50+
}
51+
52+
cout << dp[n - 1][num[n]] << '\n';
53+
54+
return 0;
55+
}

mhkim/baekjoon/6603.cpp

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/**
2+
* @file 6603.cpp
3+
* @brief 로또
4+
* @author Sam Kim (samkim2626@gmail.com)
5+
*
6+
* 조합(combination)
7+
* kC6 k개 중에서 6개 뽑기
8+
* DFS?
9+
*/
10+
#include <iostream>
11+
#include <vector>
12+
13+
using namespace std;
14+
15+
#define r 6
16+
17+
int k;
18+
int s[13];
19+
int arr[13];
20+
21+
void comb(int start, int depth)
22+
{
23+
if (depth == r)
24+
{
25+
for (int i = 0; i < r; i++)
26+
{
27+
cout << arr[i] << ' ';
28+
}
29+
cout << '\n';
30+
return;
31+
}
32+
33+
for (int i = start; i < k; i++)
34+
{
35+
arr[depth] = s[i];
36+
comb(i + 1, depth + 1);
37+
}
38+
}
39+
40+
int main()
41+
{
42+
ios_base::sync_with_stdio(false);
43+
cin.tie(nullptr);
44+
45+
while (1)
46+
{
47+
cin >> k;
48+
if (k == 0)
49+
{
50+
break;
51+
}
52+
53+
for (int i = 0; i < k; i++)
54+
{
55+
cin >> s[i];
56+
}
57+
58+
comb(0, 0);
59+
60+
cout << '\n';
61+
}
62+
63+
return 0;
64+
}

mhkim/baekjoon/7562.cpp

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
/**
2+
* @file 7562.cpp
3+
* @brief 나이트의 이동
4+
* @author Sam Kim (samkim2626@gmail.com)
5+
*
6+
* bfs
7+
*
8+
* !! memset - #include <cstring>
9+
*/
10+
#include <iostream>
11+
#include <deque>
12+
#include <utility>
13+
#include <cstring>
14+
15+
using namespace std;
16+
17+
bool chess[300][300];
18+
int l;
19+
pair<int, int> moves[8] = {{-2, -1}, {-1, -2}, {1, -2}, {2, -1}, {-2, 1}, {-1, 2}, {1, 2}, {2, 1}};
20+
21+
int bfs(pair<int, int> &start, pair<int, int> &end)
22+
{
23+
deque<pair<pair<int, int>, int>> q;
24+
int step = 0;
25+
q.push_back(make_pair(start, step));
26+
chess[start.first][start.second] = true;
27+
28+
int count = 0;
29+
while (!q.empty())
30+
{
31+
pair<pair<int, int>, int> qNow = q.front();
32+
pair<int, int> now = qNow.first;
33+
count = qNow.second;
34+
q.pop_front();
35+
36+
if (now.first == end.first && now.second == end.second)
37+
{
38+
break;
39+
}
40+
41+
count += 1;
42+
for (int i = 0; i < 8; i++)
43+
{
44+
if (chess[now.first + moves[i].first][now.second + moves[i].second] != true)
45+
{
46+
if (now.first + moves[i].first > l - 1 || now.first + moves[i].first < 0 || now.second + moves[i].second > l - 1 || now.second + moves[i].second < 0)
47+
{
48+
continue;
49+
}
50+
q.push_back(make_pair(make_pair(now.first + moves[i].first, now.second + moves[i].second), count));
51+
chess[now.first + moves[i].first][now.second + moves[i].second] = true;
52+
}
53+
}
54+
}
55+
56+
return count;
57+
}
58+
59+
int main()
60+
{
61+
ios_base::sync_with_stdio(false);
62+
cin.tie(nullptr);
63+
64+
int t;
65+
cin >> t;
66+
while (t--)
67+
{
68+
cin >> l;
69+
int fromX, fromY;
70+
cin >> fromX >> fromY;
71+
pair<int, int> from = {fromX, fromY};
72+
int toX, toY;
73+
cin >> toX >> toY;
74+
pair<int, int> to = {toX, toY};
75+
76+
cout << bfs(from, to) << '\n';
77+
memset(chess, false, sizeof(chess));
78+
}
79+
80+
return 0;
81+
}

mhkim/greedy-1.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/**
2+
* @file greedy-1.cpp
3+
* @brief 모험가 길드
4+
* @author Sam Kim (samkim2626@gmail.com)
5+
*
6+
* sort
7+
*
8+
*/
9+
#include <iostream>
10+
#include <algorithm>
11+
12+
using namespace std;
13+
14+
int mo[100001];
15+
16+
int main()
17+
{
18+
ios_base::sync_with_stdio(false);
19+
cin.tie(nullptr);
20+
21+
int n;
22+
cin >> n;
23+
24+
for (int i = 0; i < n; i++)
25+
{
26+
cin >> mo[i];
27+
}
28+
29+
sort(mo, mo + n);
30+
31+
int nGroup = 0;
32+
int nMo = 0; // 현재 그룹에 포함된 모험가의 수
33+
for (int i = 0; i < n; i++)
34+
{
35+
nMo++;
36+
if (nMo >= mo[i])
37+
{
38+
nGroup++;
39+
nMo = 0;
40+
}
41+
}
42+
43+
cout << nGroup << '\n';
44+
45+
return 0;
46+
}

0 commit comments

Comments
 (0)