본문 바로가기

728x90
반응형

전체 글

(108)
[UML] Class Diagram https://sabarada.tistory.com/72 [UML] 클래스 다이어그램 이해하기 [UML] 클래스 다이어그램 이해하기 [UML] 시퀀스 다이어그램 이해하기 안녕하세요. 오늘은 클래스 다이어그램에 대해서 이야기 해보고자 합니다. 최근 레거시 시스템의 구조개선을 조금씩 하고 있 sabarada.tistory.com 위 링크에 참조된 Contents Review 1. UML (United Modeling Language) 도메인 결제(시스템 등)을 모델로 표현해주는 언어 목적 의사소통 또는 설계 논의를 위해 전체 시스템의 구조 및 클래스의 의존성 파악을 위해 유지보수를 위한 설계의 back-end 문서 제작을 위해 2. 클래스 다이어그램 UML 중 클래스 다이어그램은 정적 다이어그램으로 클래스의..
[백준] 17135 캐슬디펜스 (C++) 백준 17135 캐슬 디펜스 1. 문제 문제링크 2. 접근법 문제 접근 3. 코드 #include #include #include #include using namespace std; int map[17][16]; int back[17][16]; bool die[300]; pair e[300]; pair enemy[300]; int enemyCnt, ans, dieCnt; int N, M, D; int checked[16]; bool isDie() { for (int i = 0; i < enemyCnt; ++i) { if (!die[i]) return false; } return true; } //적들이 이동 void move() { for (int i = 0; i < enemyCnt; i++) { if..
[백준] 14442 벽 부수고 이동하기 2 (C++) 백준 14442 벽 부수고 이동하기 1. 문제 문제 링크 2. 접근법 [ 문제 접근 ] BFS 알고리즘을 사용하여 풀었다. 1. 현재 위치와 벽을 부순 횟수를 담을 구조체를 만들어 주고, 3차원 배열을 선언하여 현재 위치까지 이동한 횟수를 담아준다. 2. 다음 위치까지 BFS 탐색을 진행하면서 벽이 있는 경우와 없는 경우로 나누어준다. 3. 다음 위치에 벽이 없다면 3차원 배열에 다음 위치까지 이동한 거리를 담아주고 다음 위치를 큐에 담는다. 4. 다음 위치에 벽이 있고, 벽을 K개 미만으로 부쉈다면 벽을 부수고 해당 위치까지 이동한 거리를 3차원 배열에 담는다. 또한 다음 위치를 큐에 넣어준다. 5. 현재 위치의 좌표가 N-1, M-1인 경우 ans에 현재 위치까지 이동한 거리를 넣어주고 break 시..
[백준] 1461 도서관 (C++) 백준 1461 도서관 1. 문제 문제 링크 2. 접근법 [ 문제 접근 ] 그리디 알고리즘을 사용하여 푸는 문제였다. 1. 맵을 오름차순으로 정렬한다. 2. 양수와 음수를 따로 계산해주기 위해 입력받을 때, 음수의 개수만큼 인덱스를 하나씩 증가시킨다. 3. 한 번에 들 수 있는 최대 개수 M만큼 for문을 돌리면서 왕복해야 하기 때문에 거리*2만큼 ans에 담아준다. 4. 최단거리를 구해야 하고, 마지막에는 출발지점까지 올 필요가 없으므로 양 끝점의 값 중 더 큰 값을 ans에서 빼주면 된다. 3. 코드 #include #include #include using namespace std; int map[10001]; int N, M; int idx, ans; int main() { ios_base::syn..
[백준] 11657 타임머신 (C++) 백준 11657 타임머신 1. 문제 문제 링크 2. 접근법 [ 문제 접근 ] 비용의 값이 음수이기 때문에 다익스트라를 사용하여 풀 수 없다. 따라서 벨만 포드 알고리즘을 사용한다. 벨만 포드 알고리즘은 아래 블로그에 잘 설명되어있다. https://yabmoons.tistory.com/365 [ 벨만포드 알고리즘 ] 개념과 구현방법 (C++) 이번 글에서는 벨만포드 알고리즘에 대해서 알아보자. 1. 벨만포드 알고리즘 ?? 그래프 알고리즘에서 '최소비용'을 구하는 대표적인 알고리즘으로는 '다익스트라 알고리즘', '벨만포드 알고리즘' yabmoons.tistory.com 1. 비용을 업데이트하기 위해 최소 비용을 담을 배열을 모두 INF 값으로 초기화시킨다. 2. M개의 노선 개수만큼 입력받으면서 adj 벡..
[백준] 1766 문제집 (C++) 백준 1766 문제집 1. 문제 문제 링크 2. 접근법 [ 문제 접근 ] 위상 정렬을 사용하여 푸는 문제이며, 이전에 풀었던 2252번 줄 세우기 문제와 유사하다. 2021.12.18 - [알고리즘 스터디] - [백준] 2252 줄 세우기 (C++) [백준] 2252 줄 세우기 (C++) 백준 2252 줄 세우기 1. 문제 문제 링크 2. 접근법 [ 문제 접근 ] 위상 정렬을 사용하는 문제이다. 1. n과 m을 입력받은 후 m만큼 for문을 돌리면서 a, b를 입력받는다. 2. adj [a]에 b를 넣고 b에 대한 진입 pro-grammers.tistory.com 1. 위상정렬 문제는 진입 차수가 핵심이므로 indegree를 생성하여 다음 문제보다 먼저 풀어야 할 문제가 있다면 다음 문제를 기준으로 차수..
[백준] 3020 개똥벌레 (C++) 백준 3020 개똥벌레 1. 문제 문제 링크 2. 접근법 누적합을 사용하여 이분 탐색을 진행해 푸는 문제였다. [ 문제 풀이 ] 1. 종유석과 석순이 번갈아 가면서 입력받게 되므로 배열을 각각 생성하여 따로 담아준다. 2. 예를 들어 높이가 5이라면, 길이가 5 이상인 종유석을 파괴해야 한다. 3. 따라서 i가 H(높이)-1부터 시작해 1일 때까지 감소시키면서 누적합을 만들어준다. 4. 전체 높이가 7이라고 가정하면 길이가 6인 종유석에 자기 자신과 길이가 7인 종유석의 개수를 더해준다. 5. 이와 같이 길이가 5인 석순은 자기 자신과 길이가 6, 7인 석순을 포함하여 누적합을 쌓아준다. 6. 높이에 따라 파괴해야 할 종유석과 석순의 개수를 담을 벡터를 하나 생성하여, 위에서 만들어준 길이에 따른 종유석..
[백준] 14502 연구소 (C++) 백준 14502 연구소 1. 문제 문제 링크 2. 접근법 [ 문제 접근 ] 삼성 SW 역량테스트에 출제된 문제이다. 벽을 3개 세운 뒤, DFS와 BFS를 사용하여 바이러스가 퍼지지 않은 안전영역의 최대 크기를 구해주는 문제였다. 1. 우선 입력받을 때, 바이러스가 있는 위치를 큐에 담는다. 2. 이후 DFS를 돌리면서 바이러스와 벽이 없는 곳에 벽을 세워준다. 3. 벽이 3개 세워졌으면, tmp맵에 입력받은 map을 백업해둔다. 4. BFS를 돌려서 벽이 없는 곳으로 바이러스를 퍼뜨린다. 5. 안전영역의 최대 크기를 구해주고 최댓값을 업데이트 해준 후, 백업해둔 맵을 원상 복귀한다. 3. 코드 #include #include #include #include using namespace std; int ..

728x90
반응형