Algorithms/Implementation
-
[구현 알고리즘] 청소년 상어 / G3Algorithms/Implementation 2021. 3. 21. 21:26
기출 : 2020 삼성전자 공채 아이디어는 다음과 같다 1. 현재 상태 꺼내기 2. 물고기 이동 3. 먹을 수 있는 물고기를 향해 상어를 이동하고 상태 저장 4. 먹을 수 있는 물고기가 없다면 최댓값 갱신, 있다면 1번으로 각 단계별로 살펴보자 1. 현재 상태 꺼내기 현재 상태는 물고기들의 값, 방향이 저장된 배열과 상어의 값, 방향이 포함된다 상태를 저장하기 위해 큐를 사용했다 현재 상태를 꺼내 상어가 움직이는 경우를 각각 큐에 저장했다 2. 물고기 이동 물고기를 이동시키기 위해 물고기의 크기가 작은 순서대로 저장된 배열이 필요했다 우선순위 큐에 그 값을 넣는 것으로 처리했으나 나중에 확인한 결과 이 과정이 없어도 시간 복잡도에는 문제가 없다 물고기를 회전시키고 이동이 가능한 경우 swap하는 방식으로..
-
[구현 알고리즘] 경사로 / G3Algorithms/Implementation 2021. 3. 18. 18:45
특별할 게 없는 구현 문제다 각 줄에 대한 알고리즘은 다음과 같다 1. 이전 값보다 큰 값이 나오면 이전 L칸이 한칸 작은 칸인지 확인 후 check배열에 체크 2. 이전 값보다 작은 값이 나오면 다음 L칸이 한칸 작은 칸인지 확인 후 check 배열에 체크 #include using namespace std; int n, l; int cnt; int board[101][101]; bool checkRow(int row){ bool check[101] = {false, }; int ex = board[row][0]; //cout
-
[구현 알고리즘] 로봇 청소기 / G5Algorithms/Implementation 2021. 3. 15. 17:03
기출 : 백준 #14503 이 문제의 함정은 바로 회전하는 방향에 있다 문제에서 주어지는 방향은 북쪽부터 시작해 시계방향으로 북 동 남 서가 0, 1, 2, 3으로 주어진다 하지만 로봇의 청소 방향은 서쪽부터 시작해 반시계방향으로 서 남 동 북이 0, 1, 2, 3으로 주어진다 로봇의 위치와 방향을 나타내는 구조체를 만들어 반복문으로 구현했다 #include #define X first #define Y second using namespace std; struct robot { pair coor; int dir; robot(pair c, int d) : coor(c), dir(d) {}; }; int dx[4] = {0,1,0,-1}; int dy[4] = {-1,0,1,0 }; int n, m; in..
-
[구현 알고리즘] 외벽 점검 ★★★Algorithms/Implementation 2021. 2. 26. 17:23
원형 구조를 순회하는 문제를 처음 만나봐서 어려움을 많이 느꼈다 원형 구조의 경우 몇바퀴를 돌 것인지 확인한 뒤 그 두 배만큼 둘레 길이를 설정하면 된다 이 문제의 경우 한바퀴를 돌 것이라고 했으므로 원의 둘레의 두배를 배열로 설정해 주면 된다 그런 뒤 출발점을 매 취약점으로 잡고 출발 인원들을 하나씩 출발시키면 된다 문제를 해결하지 못해 답을 확인하였지만 얻을 것이 많은 문제였다 #include using namespace std; int solution(int n, vector weak, vector dist) { // 길이를 2배로 늘려서 '원형'을 일자 형태로 변경 int length = weak.size(); for (int i = 0; i < length; i++) { weak.push_bac..
-
[구현 알고리즘] 치킨 배달 ★★☆Algorithms/Implementation 2021. 2. 25. 17:03
기출 : 삼성전자 SW 역량테스트 모든 치킨집 중 M개를 고르고 나머지는 폐업한 상황에서 모든 집의 치킨 거리를 더한 것 중 최솟값을 출력하면 된다 #include #define X first #define Y second using namespace std; int n, m; int minval = 0x7f7f7f7f; int board[51][51]; vector chicken_loc; vector home_loc; vector chicken; int distance(pair a, pair b) { return abs(a.X - b.X) + abs(a.Y - b.Y); } int calc() { // 모든 집에 대해 가까운 치킨집과의 거리를 다 더한 것 int sum=0; for (int i = 0;..
-
[구현 알고리즘] 뱀 ★★☆Algorithms/Implementation 2021. 2. 24. 15:48
기출 : 삼성 SW 역량테스트 문제를 처음 보고 꼬리와 머리 좌표, 머리의 방향을 저장하는 snake 구조체를 생각해 냈다 코드를 작성하다 보니 꼬리의 방향, 즉 몸통의 좌표가 필요한 것을 알았다 뱀이 사과를 먹으면 꼬리는 그대로 있고 머리만 한칸 추가된다 만약 사과가 없다면 꼬리가 사라지고 머리는 추가된다 머리쪽은 항상 추가되고 꼬리쪽은 항상 삭제되므로 추가, 삭제 방향이 정해진 Queue를 사용해야 한다 #include #define X first #define Y second using namespace std; int dx[4] = { 0, 1, 0, -1 }; int dy[4] = { 1, 0, -1, 0 }; int n, k, l; int board[101][101]; int t; int di..
-
[구현 알고리즘] 자물쇠와 열쇠 ★★☆Algorithms/Implementation 2021. 2. 23. 15:56
기출 : 2020 카카오 신입 공채 문제 자체는 어렵지 않았는데 구현에 대한 경험이 부족하다면 좀 까다롭게 느낄 수 있는 문제였다 문제의 아이디어는 정말 간단하다 열쇠를 회전하면 총 4가지의 패턴이 나오고 각 패턴에 대해서 자물쇠에 하나씩 대 보는 것이다 구현 자체가 어려운 문제들, 즉 피지컬을 필요로 하는 문제들을 풀 때 항상 해야 하는 것이 있다 먼저 문제를 큰 덩어리로 구분하고 각 덩어리를 pseudo code로 작성하는 것이다 작성한 pseudo code는 다음과 같다 for 회전하여 만든 모든 열쇠 패턴에 대하여 for 열쇠를 상하좌우로 이동하며 if(check()) return true;자물쇠에 대보고 맞으면 true return return false모든 경우의 수를 확인한 뒤 return ..