0927

#include <iostream>
#include <vector>
using namespace std;
int main() {
long long min, max;
cin >> min >> max;
long long length = max - min + 1;
vector<bool> isSquareFree(length, true);
for (long long i = 2; i * i <= max; i++) {
long long square = i * i;
long long start = (min + square - 1) / square * square;
for (long long j = start; j <= max; j += square) {
isSquareFree[j - min] = false;
}
}
int count = 0;
for (int i = 0; i < length; i++) {
if (isSquareFree[i]) count++;
}
cout << count << '\n';
return 0;
}
0928

num = int(input())
d = [0] * (num + 1)
for x in range(2, num + 1):
d[x] = d[x - 1] + 1
if x % 2 == 0:
d[x] = min(d[x], d[x // 2] + 1)
if x % 3 == 0:
d[x] = min(d[x], d[x // 3] + 1)
print(d[num])
ํ์ด๊ณผ์ : dp ์๊ณ ๋ฆฌ์ฆ ์ค ์ํฅ์ dp๋ฅผ ์ฌ์ฉํ์๋ค.
d[x]๋ 1๋ก ๋ง๋๋๋ฐ ํ์ํ ์ต์ ์ฐ์ฐ ํ์๋ก ์ค์ ํใ ใฑ,
๋ณธ์ธ์ด ์ฐธ๊ณ ํ ์๋ฃ(๋ธ๋ก๊ทธ, ๋ ผ๋ฌธ ๋ฑ)๊ฐ ์์ผ๋ฉด ๊ผญ ์ถ์ฒ๋ฅผ ๋จ๊ธฐ์๊ธฐ ๋ฐ๋๋๋ค.
์ฐธ๊ณ ๋ธ๋ก๊ทธ: https://velog.io/@jxlhe46/์๊ณ ๋ฆฌ์ฆ-๋ค์ด๋๋ฏน-ํ๋ก๊ทธ๋๋ฐ
๋ฐฐ์ด ์ : ํด๋น ๋ฌธ์ ๋ฅผ ํ๋ฉฐ ์๋ก ๊ณต๋ถํ ๋ด์ฉ์ ๊ฐ๋ตํ๊ฒ ์์ฑํ๋ฉด ๋ฉ๋๋ค. (์์ : Gaussian Elimination์ ์์ฉํด ์ญํ๋ ฌ์ ๊ณ์ฐํ์ง ์๊ณ LU๋ถํด๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ๋ค.)
0929
๋ชธ์ด ์์ข์์ ๊ทธ๋ฅ ์ ........
0930

num, caseNum = map(int, input().split())
d = {}
for _ in range(caseNum):
s = input().strip()
if s in d:
del d[s]
d[s] = True
for x in list(d.keys())[:num]:
print(x)
ํ์ด๊ณผ์ : ๋จ์ํ๊ฒ ์ ๋ ฅ๋ฐ์ ๋น์ ์ด๋ฏธ ํด๋น ๊ฐ์ด ์กด์ฌํ๋ฉด ๊ธฐ์กด ๊ฐ์ ์ง์ด๋ค. ๋ฐ๋ณต๋ฌธ์ด ๋๋๋ฉด ์ ์๋ ์๋งํผ ์ฐจ๋ก๋๋ก ์ถ๋ ฅํ๋ค
๋ฐฐ์ด ์ : ๋ฌธ์ ์์ฒด๋ ๊ฐ๋จํ์ง๋ง ์๊ฐ ์ ํ์ด ๋นก๋นกํ ํธ์ด๋ค. ์ฒ์์ ์ผ๋ฐ์ ์ธ ๋ฐฉ์์ผ๋ก in ์ฐ์ฐ๊ณผ remove ์ฐ์ฐ์ ์ฌ์ฉํ๋๋ ์ต์ ์ ๊ฒฝ์ฐ O(n^2)๊ฐ ๋์ค๊ธฐ์ ์๊ฐ ์ด๊ณผ์ ๊ฑธ๋ ธ๋ค.
๊ณ ์น๊ธฐ ์ํด dict๋ฅผ ์ฌ์ฉํ๋ค. ๋ค๋ง ํ์ด์ฌ ๋ฒ์ ์ด ๋ฎ์ผ๋ฉด ์ผ๋ฐ dict๊ฐ ์์๋ฅผ ๊ธฐ์ตํ์ง ๋ชปํ๊ธฐ์ ์ฃผ์๊ฐ ํ์ํ๋ค
1001

#include <iostream>
#include <vector>
#include <tuple>
using namespace std;
int main(){
int num(0), height(0), weight(0), score(1);
vector <tuple<int, int, int>> arr;
cin >> num;
for(int i = 0; i < num; i++){
cin >> weight >> height;
arr.push_back({weight, height, score});
}
for(int i = 0; i < num; i++){
for(int j = 0; j < num; j++){
if(i==j) continue;
if (get<0>(arr[j]) > get<0>(arr[i]) &&
get<1>(arr[j]) > get<1>(arr[i])) {
get<2>(arr[i])++;
}
}
}
for (int i = 0; i < num; i++) {
cout << get<2>(arr[i]) << " ";
}
return 0;
}
ํ์ด๊ณผ์ : tuple์ ํตํด ๋ฒกํฐ์ ์ธ ๊ฐ์ ๋ถ๋ฅ๋ฅผ ์์ฑํ๋ค.
์ดํ ๋ฐ๋ณต๋ฌธ ์ฐ์ฐ์ ํตํด ๋ชธ๋ฌด๊ฒ, ํค๊ฐ ๋ชจ๋ ํฐ ๊ฒฝ์ฐ์๋ง ๋ฉ์น๊ฐ ํฌ๋ค๊ณ ํ์ ํ๋ค. ์ด ๊ฒฝ์ฐ ์ต์ ์ ์ํฉ์์๋ ์๊ฐ ๋ณต์ก๋๋ O(n^2)์ด ๋๋ค. ๋ฌธ์ ์ ์๊ฐ ์กฐ๊ฑด์ด 2์ด๋ฉฐ ์ ํ์ ์ฃผ์ด์ง ์ต๋ ์๊ฐ ์์ ํธ์ด๊ธฐ์ ํด๋น ๋ฐฉ์์ ์ฌ์ฉํ๋ค
1002

num = int(input())
arr = [0]
for _ in range(num):
arr.append(int(input()))
d = [0] * (num + 1)
d[1] = arr[1]
if num >= 2:
d[2] = arr[1] + arr[2]
if num >= 3:
d[3] = max(arr[1] + arr[3], arr[2] + arr[3])
for i in range(4, num+1):
d[i] = max(d[i-2] + arr[i], d[i-3] + arr[i-1] + arr[i])
print(d[num])
ํ์ด๊ณผ์ : d[i]๋ i๋ฒ์งธ ๊ณ๋จ๊น์ง ์ฌ๋ผ๊ฐ์ ๋ ์ป์ ์ ์๋ ์ต๋ ์ ์๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด์ด๋ค
d[i]๋ฅผ ๋ฐ๋ณต๋ฌธ ๋ด์์ ๋๋ฆด ๋, ์ด์ ๊ณ๋จ์์ ๋ฐ๋ก ์ฌ๋ผ์ค๊ธฐ or ๋ ๊ณ๋จ ๋ฐ๊ณ ์ฌ๋ผ์ค๊ธฐ ์ค ๋ ํฐ ๊ฐ์ ๊ณจ๋ผ ๊ฐ์ ์ง์ด ๋ฃ๋๋ค. ๋ง์ง๋ง์๋ d[num]๊ฐ์ ์ถ๋ ฅํ๋ค.
๋ฐฐ์ด ์ : dp๋ฅผ ์ ์ฉ์ํค๋ ๊ฒ์ ์ต์ํด์ง๋ ค ๋ ธ๋ ฅ ์ค์ด
1003

#include <bits/stdc++.h>
using namespace std;
int main() {
int N, M;
cin >> N >> M;
vector<string> grid(N);
for (int i = 0; i < N; i++) cin >> grid[i];
vector<vector<vector<int>>> visited(N, vector<vector<int>>(M, vector<int>(2, 0)));
queue<tuple<int,int,int,int>> q;
q.push({0, 0, 1, 0});
visited[0][0][0] = 1;
int dx[4] = {-1, 1, 0, 0};
int dy[4] = {0, 0, -1, 1};
while (!q.empty()) {
auto [x, y, dist, broken] = q.front();
q.pop();
if (x == N-1 && y == M-1) {
cout << dist << "\n";
return 0;
}
for (int dir = 0; dir < 4; dir++) {
int nx = x + dx[dir];
int ny = y + dy[dir];
if (nx < 0 || ny < 0 || nx >= N || ny >= M) continue;
if (grid[nx][ny] == '0' && !visited[nx][ny][broken]) {
visited[nx][ny][broken] = 1;
q.push({nx, ny, dist + 1, broken});
}
if (grid[nx][ny] == '1' && broken == 0 && !visited[nx][ny][1]) {
visited[nx][ny][1] = 1;
q.push({nx, ny, dist + 1, 1});
}
}
}
cout << -1 << "\n";
return 0;
}
ํ์ด๊ณผ์ : ๊ธฐ์ด ์ฝ๋๋ ppt ๊ทธ๋๋ก
while๋ฌธ์ ํตํด bfs ํ์์ ์งํํ๋ค. ํ์ฌ์ ์์น์ ์ด๋ ๊ฑฐ๋ฆฌ, ๋ฒฝ์ด ๋ถ์ด์ก๋์ง์ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์๋ค.
์ดํ if๋ฌธ์ ํตํด์๋ ๋์ฐฉ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค. ๋ง์ผ ๋ชฉํ ์ง์ ์ ๋๋ฌํ์๋ค๋ฉด ํ์ฌ dist ๊ฐ์ ์ถ๋ ฅํ ๋ค์์ ์ข ๋ฃํ๋ค. bfs๋ฅผ ์ด์ฉํ์๊ธฐ์, ์ฒ์ ๋์ฐฉํ ๊ฒฝ์ฐ๊ฐ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ๋๋ค
๊ทธ ์๋์ ๊น๋ฆฐ ์ฝ๋๋ ๋น์นธ ์ด๋/๋ฒฝ ๋ถ์๊ณ ์ด๋์ ๊ดํ ๋ด์ฉ์ด๋ค.
๋ง์ง๋ง์ผ๋ก ๋ง์ผ ๋์ฐฉ์ ์ ๋๋ฌํ์ง ๋ชปํ๋ค๋ฉด -1์ ์ถ๋ ฅํ๋ค
์ฐธ๊ณ ๋ธ๋ก๊ทธ: https://gmlwjd9405.github.io/2018/08/15/algorithm-bfs.html
๋ฐฐ์ด ์ : ์ง๋ ์ฃผ ppt์์ ์ ๊ณตํด์ฃผ์ ๊ธฐ์ด ์ฝ๋๋ฅผ ํ ๋๋ก ํ์ดํ๋ค. bfs ๊ด๋ จ ๋ฌธ์ ๋ ํ์ด๋ณด์ง ์์๋๋ฐ, ์ด๋ฒ์ ํ์ด๋ณด๊ฒ ๋์ด ์ข์๋ค.
'๊ณต๋ถ > ์ฝ๋ฉ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [์๊ณ ๋ฆฌ์ฆ ์คํฐ๋] 3์ฃผ์ฐจ ๊ฒฐ์ฐ (0) | 2025.12.12 |
|---|---|
| ์์ฃผ ์ ์ฉํ๊ณ ํธ๋ฆฌํ ์๋ ์์ผ ์ ๋ ฅ ํ๋ก๊ทธ๋จ (0) | 2025.12.08 |
| [์๊ณ ๋ฆฌ์ฆ ์คํฐ๋] 1์ฃผ์ฐจ ๊ฒฐ์ฐ (0) | 2025.09.27 |
| [C++] ๋ฒกํฐ๋ฅผ ์ง์ ์ ์ํด๋ณด์! (0) | 2025.08.20 |
| ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋์ Big-O ํ๊ธฐ๋ฒ (1) | 2025.08.18 |