본문 바로가기

알고리즘98

백준 g4 불 c++ https://www.acmicpc.net/problem/5427 풀이 1. 불이 퍼지는 시간을 나타내는 fireVis를 만든다. (BFS) 2. 상근이 위치를 BFS로 돌리면서 벽이거나, 불이 더 이전에 번진 곳이거나(상근이가 방문하는 시간보다 불이 퍼진 시간이 더 작을 때), 범위를 넘어가는 곳은 제외한다. 이때 불이 퍼진 시간이 0일 때는 불이 퍼지지 않았으면서 상근이가 방문하는 시간보다 작으므로, 예외처리 해주어야 한다. 고려한 것 1. 처음에는 불이 0초일 때 시작할 수 있으니 -1로 초기화하고 0부터 시작했으나 그냥 처음 시작을 1로 통일했다 /*boj g4 5427 불*/ #include #include #define MAXN 1005 using namespace std; int T, M, .. 2024. 1. 12.
백준 s1 1926 그림 c++ https://www.acmicpc.net/problem/1926 풀이 for (모든 좌표 i, j) if board가 1이고, vis 방문하지 않았다면 mx = max(mx, bfs로 나온 그림 크기) answer++; 실수했던 것 그림이 아무 것도 없을 때 max값이 0이 나와야 하는데 습관적으로 max = -1로 두어서 틀렸음 역시 틀린 게 있을 땐 문제를 다시 읽어보는 게 중요 /*boj s1 1926 그림*/ #include #include #define MAXN 502 using namespace std; int N, M; int board[MAXN][MAXN]; int vis[MAXN][MAXN]; int answer = 0; int mx = 0; int dx[4] = { -1, 0, 1, .. 2024. 1. 12.
백준 g5 5430 AC c++ https://www.acmicpc.net/problem/5430 풀이 배열을 뒤집을 필요 없이, 덱은 양 끝에서 pop이 자유로우므로 그 점을 사용해서 direction만 지정해주면 된다. 배열을 string으로 받을 때, 숫자가 두 자리수 이상이 될 때를 예외처리 해줘야 한다. /*boj g5 5430 AC*/ #include #include #include #define MAXN 100005 using namespace std; int T, N; string P; string arr; deque DQ; void strToDQ() { DQ.clear(); string str = ""; for (int i = 1; i < arr.size(); i++) { if (arr[i] == ']' || arr[i.. 2024. 1. 11.
백준 s4 1021 회전하는 큐 c++ https://www.acmicpc.net/problem/1021 deque 라이브러리 1. front에서도 삽입, 삭제가 O(1)에 가능 2. 벡터와 다르게 메모리상 연속된 위치에 존재하지는 않는다. 풀이 1. 찾아야 할 target의 위치를 찾는다. O(n) 2. 찾은 위치가 front와 가까운지, back과 가까운지 찾는다. 이때 back은 3번 연산의 수를 한번 더 해줘야 front에서 pop할 수 있으므로, if (log > N >> M; for (int i = 0; i > target[i]; for (int i = 1; i 2024. 1. 11.
백준 s4 2164 카드2 c++ https://www.acmicpc.net/problem/2164 /*boj s4 2164 카드2*/ #include #include using namespace std; int N; int main(void) { ios::sync_with_stdio(0); cin.tie(0); cin >> N; queue Q; for (int i = 1; i 2024. 1. 10.
백준 g5 2493 탑 c++ https://www.acmicpc.net/problem/2493 ​ 풀이 역순으로 맨 뒤에서부터 시작 > N; for (int i = 1; i > tower[i]; } for (int i = N; i >= 1; i--) { int cur = tower[i]; while (!S.empty() && S.top().second < cur) { answer[S.top().first] = i; S.pop(); } S.push({i, cur}); } for (int i = 1; i 2024. 1. 10.
백준 s2 1874 스택수열 c++ https://www.acmicpc.net/problem/1874 ​ 풀이 계속 push하다가 원하는 수가 나오면 pop, pop하고 나서 또 top이 원하는 숫자면 다시 pop > N; int target; vector result; cin >> target; int tCnt = 1; for (int i = 1; i > target; tCnt++; } } // 출력 if (S.empty()) { for (char v : result) { cout 2024. 1. 10.
c++ 4. 연결리스트 연습문제 c++ 라이브러리 string의 크기는 이론적으론 무한, 메모리가 되는 데까지 가능 문자열의 끝을 표시하는 '\0' 대신 string 클래스 내에서 길이를 따로 갖고 있음 맨 뒤에 더미노드 존재 L.end() L.insert(t, 2) -> t 커서 앞에 추가 L.erase(t) -> t커서가 가리키는 값 삭제, 다음 위치를 가리킴 ​ 연습 문제 풀이 ​ 백준 s2 1406 에디터 https://www.acmicpc.net/problem/1406 ​ 풀이 커서를 _라고 표시하면, (_a) (_b) (_c) (_ ) 커서가 한 문자를 가리킴 == 그 문자의 앞에 커서가 있음 으로 두고 풀었다 ​ 백스페이스 /*boj s2 1406 에디터*/ #include #include #include using nam.. 2024. 1. 10.