Skip to content

Commit

Permalink
24-03-20 하이퍼 토마토
Browse files Browse the repository at this point in the history
  • Loading branch information
makehard23 committed Mar 20, 2024
1 parent 1eeea34 commit ce055ec
Show file tree
Hide file tree
Showing 10 changed files with 280 additions and 4 deletions.
Binary file added .DS_Store
Binary file not shown.
8 changes: 4 additions & 4 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"files.associations": {
"queue": "cpp"
}
{
"files.associations": {
"queue": "cpp"
}
}
Binary file added InSange/.DS_Store
Binary file not shown.
37 changes: 37 additions & 0 deletions dhlee777/bfs/숨바꼭질.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#include<iostream>
#include<queue>
using namespace std;
int dt[100001]; // 시간(몇초)를 저장하는 배열,인덱스는 수빈이가 있는 위치이다.
int k[3] = { -1,1}; //-1,1의 위치이동을 더해주기위한 배열
queue<int>q;

void bfs(int start, int end) {
q.push(start); // 큐에 제일 처음 수빈이의 시작위치를 넣는다.
while (!q.empty()) {
int c = q.front(); //큐에서 위치를 꺼낸다.
q.pop();
if (c == end) { //큐에서 꺼낸 위치가 동생의 위치일경우
cout << dt[end]; //동생을 찾은 위치에서의 최소시간을 출력
return;
}
for (int i = 0; i < 2; i++) { //c가 갈수있는 위치를 살펴본다(-1,+1)
int d = c + k[i]; // -1,+1 의 위치이동을 해준값을 d에넣는다.
if (d >= 0 && !dt[d] && d <= 100000) { // 방문하지 않은 위치이면 탐색을 진행한다.
dt[d] = dt[c] + 1; //조건을 만족하면 방금탐색한위치의 시간을 그전 위치의시간 +1을 해준다.
q.push(d); //bfs를위해 큐에 방금 탐색한위치를 넣는다.
}
}
if (c * 2 <= 100000 && !dt[c * 2]) { //*2를 통한 탐색의 경우
dt[c * 2] = dt[c] + 1; //-1,1의경우와 동일
q.push(c * 2);
}
}
}
int main(void) {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int start,end;
cin >> start >> end; //수빈이의 현재위치와,동생의 현재위치를 입력받는다.
bfs(start, end);
return 0;
}
16 changes: 16 additions & 0 deletions seongwon030/스택/쇠막대기.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
s = input()

stack = []
cnt = 0

for i in range(len(s)):
if s[i] == '(':
stack.append('(')
else:
if s[i-1] == ')':
stack.pop()
cnt+=1
else:
stack.pop()
cnt += len(stack)
print(cnt)
Binary file added yuyu0830/.DS_Store
Binary file not shown.
Binary file added yuyu0830/탐색/.DS_Store
Binary file not shown.
85 changes: 85 additions & 0 deletions yuyu0830/탐색/12851.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
// BFS 골드 4 숨바꼭질 2 https://www.acmicpc.net/problem/12851
#include <iostream>
#include <vector>
#include <queue>

using namespace std;

int n, k;
int dist[100001] = {0, };
bool visited[100001] = {0, };

void solve() {
// 2개의 큐를 번갈아 사용하기 위한 큐 배열, 불리언 변수
priority_queue<int, vector<int>, greater<int>> q[2];
bool e = false;

// 현재 탐색에서 탐색중인 위치를 저장
vector<int> visitedVec;

q[e].push(n);
dist[n] = 1;
visited[n] = 1;

if (n == k) {
printf("0\n1");
return;
}

int time = 1, cnt = 0;

while (true) {
while (!q[e].empty()) {
int cur = q[e].top();

q[e].pop();

for (int i : {cur - 1, cur * 2, cur + 1}) {
if (i < 0 || i > 100000) continue;

// 목표 위치에 도착한 경우 경우의 수 저장
if (i == k) cnt += dist[cur] + 1;

// 첫 방문인 경우 다음 탐색 큐에 저장
if (!dist[i]) {
q[!e].push(i);
visitedVec.push_back(i);
}

// 방문한 위치에 현재 위치의 경우의 수 더하기
// 이전 탐색에서 탐색한 위치는 방문 안하도록
if (!visited[i])
dist[i] += dist[cur];

// 탐색 도중 숫자가 커지면 탐색을 종료, 탐색중 큐 비우기
if (cur > k) break;
}

// 숫자가 커져서 탐색을 종료하면 남은 큐는 비워주기
if (cur > k) {
q[e] = priority_queue <int, vector<int>, greater<int>> ();
break;
}
}

if (cnt) {
printf("%d\n%d", time, dist[k]);
break;
}

// 이번 탐색에서 방문한 노드들 전부 표시 해주기
while (!visitedVec.empty()) {
int v = visitedVec.back();
visitedVec.pop_back();
visited[v] = 1;
}

e = !e;
time++;
}
}

int main() {
cin >> n >> k;
solve();
}
68 changes: 68 additions & 0 deletions yuyu0830/탐색/17114.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#include <iostream>
#include <vector>

using namespace std;

int tomato[1000001] = {0, };
int dir[2] = {1, -1};
int total = 1, dimension = 0;
vector<int> len;
vector<int> redTomato[2];
bool curVector = false;

bool isin(int a) { return a >= 0 && a < total; }

int main() {
for (int i = 0; i < 11; i++) {
int t; cin >> t;
if (t != 1) {
len.push_back(t);
total *= t;
dimension++;
}
}

int greenTomato = 0;
for (int i = 0; i < total; i++) {
cin >> tomato[i];

if (!tomato[i]) greenTomato++;
else if (tomato[i] == 1)
redTomato[curVector].push_back(i);
}

int day = 0;
while (greenTomato > 0) {
int lastGreenTomato = greenTomato;

while (!redTomato[curVector].empty()) {
int curPos = redTomato[curVector].back();
redTomato[curVector].pop_back();

int modular = total;
for (int dim = dimension - 1; dim >= 0; dim--) {
for (int v : dir) {
int pos = curPos + (modular / len[dim]* v);

if (isin(pos) && (curPos / modular == pos / modular) && !tomato[pos]) {
tomato[pos] = 1;
redTomato[!curVector].push_back(pos);
greenTomato--;
}
}

modular /= len[dim];
}
}

if (lastGreenTomato == greenTomato) {
printf("-1\n");
return 0;
}

curVector = !curVector;
day++;
}

printf("%d\n", day);
}
70 changes: 70 additions & 0 deletions yuyu0830/탐색/1865.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
// 최단 경로 골드 3 웜홀 https://www.acmicpc.net/problem/1865
#include <iostream>
#include <string.h>
#include <vector>
#include <queue>

#define MAX 9999999
#define SIZE 502
#define fastio ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);

using namespace std;

struct edge {
int s, e, v;
};

bool f() {
int n, road, wormhole; cin >> n >> road >> wormhole;

int s, e, v;
vector<edge> edges;

// input
while (road--) {
cin >> s >> e >> v; // start, end, value
edges.push_back({s, e, v});
edges.push_back({e, s, v});
}

while (wormhole--) {
cin >> s >> e >> v;
edges.push_back({s, e, -v});
}

// Search all nodes n time
vector<int> dist(n + 1, MAX);
dist[1] = 0;

for (int node = 1; node <= n; node++) {
for (auto next : edges) {
s = next.s;
e = next.e;
v = next.v;

if (dist[e] > dist[s] + v)
dist[e] = dist[s] + v;
}
}

// Search one more time
for (auto next : edges) {
s = next.s;
e = next.e;
v = next.v;

if (dist[e] > dist[s] + v)
return true;
}

return false;
}

int main() {
fastio;
int testCase; cin >> testCase;
while (testCase--) {
if (f()) printf("YES\n");
else printf("NO\n");
}
}

0 comments on commit ce055ec

Please sign in to comment.