일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 쉬운 알고리즘 문제
- 알고리즘
- English
- sw expert academy
- 프로그래머스
- 코테 준비
- readingbook
- BFS
- D4
- 삼성
- 직무면접
- STUDYENGLISH
- 백준
- SQL
- 완전탐색
- the midnight library
- MySQL
- englishbook
- 코테
- 코딩테스트
- swexpertacademy
- nightroutine
- 원서읽자
- sw expert
- 알고리즘 문제
- dfs
- 원서읽기
- PyQt
- 코테 대비
- 원서
- Today
- Total
목록전체 글 (172)
시나브로
추천도 : 3 (풀어볼만한 문제이다.) 이 문제의 경우 전체탐색의 문제이다. 간단한 문제인거 같지만, 함정이 있어 조심해야된다. 함정은 데이터 그대로 인덱스로 사용하면 의도한 그림이 나오지 않는다. 이럴 경우, 1 6 14라는 답을 얻게된다. n m 를 행/열이라고 생각하여 사용하면 그림은 행/열이 바껴서 그려진다. 이것만 유의하면 손쉽게 풀 수 있는 문제이다. 만약 이 문제가 단순히 직사각형을 제외한 면적을 구하는 문제였다면, 굳이 100*100 배열을 선언하여 공간을 낭비하지 않을 수 있다. 직사각형의 정보를 받을 때, 면적을 계산하고 겹치는 부분이 있다면, 그 공간의 면접만 빼줘 직사각형의 모든 넓이를 구할 수 있다. 이를 전체면적에서 빼면 간단하게 짧은 시간에 구할 수 있다. 저는 map을 전체 ..
이 문제는 완전탐색문제의 하나의 과정을 추가한 문제이다. 문제 요약 ) 각 빙산의 값(matrix에 있는 숫자값)은 시간이 지남에 따라 4방(상/하/좌/우)에 0의 갯수만큼 녹는다. 시간이 지남에 따라 빙산이 녹을 때, 한 덩어리의 빙산이 2개 이상으로 나눠지는 순간을 찾아라. 문제요약 1은 완전탐색 BFS을 이용하여 쉽게 구현할 수 있다. 여기서 유의점은 순차 탐색을 하면서 (i,i)이 녹아 0이 되었을 때, 다음값인 (i,i+1)에서는 (i,i)값을 녹았다고 생각하면 안된다. 그 이유는 동시에 녹기 때문에 (i,i+1)값을 계산할 때 (i,i)값이 있다고 생각한다. 문제요약 2의 경우, 처음에 빙하의 총 갯수를 구해놓고, 빙하가 녹을 때마다 개수를 조정한다. 그리고 하나의 시간 단위가 지났을 때, 아..
이 문제의 경우, 추천하지 않습니다. 이 문제는 기본의 완전탐색에 조건이 하나가 추가된 문제입니다. 완전탐색문제의 경우, 구현을 연습하는 문제입니다. 하지만, 이 문제의 추가된 조건은 구현시 실력향상에 도움이 되기 어려우며, 조건을 구현하는 방법이 단일적이기 때문입니다. 또한, 문제도 애매모호하며, 다수의 문제에 대한 의문점을 가질 수 있는 문제이기 때문입니다. 완전탐색을 연습하고자 이 문제를 풀는 사람들은 이 문제말고 다른 정석적인 완전탐색문제를 풀어보길 권장합니다. 아래에 제가 정리한 정석적인 완전탐색문제의 링크가 있는 페이지를 첨부합니다. 도움이 되셨으면 좋겠습니다. https://hyemsinabro.tistory.com/122 알고리즘 기초 문제 모음 vol.1 1. 단순 배열을 이용한 문제 (..
1. 단순 배열을 이용한 문제 (3) https://swexpertacademy.com/main/talk/solvingClub/problemView.do?solveclubId=AXOLHohKxsMDFAQT&contestProbId=AV139KOaABgCFAYh&probBoxId=AXOLHohKxsQDFAQT&type=PROBLEM&problemBoxTitle=7%EC%9B%9427%EC%9D%BC%28%EC%9B%94%29&problemBoxCnt=3 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com https://swexpertacademy.com/main/talk/solvingClub/problemView.d..
Solution 데이터를 받아 map에 저장합니다 (0.0)으로 dfs함수를 호출합니다. 문제에서 무조건 0,0은 치즈가 없다고 하였기에 이점을 이용하여 공기에 접촉된 치즈를 찾습니다. 찾은 치즈는 list 큐에 저장합니다. 여기서 포인트는 각 치즈의 시간을 알아야 된다는 것입니다. 저는 이를 해결하기위해 자료구조 큐와 (1110,1110)이라는 값을 넣어줬습니다. => 큐를 이용하면 순차적으로 pop이 되어 순서를 지킬 수 있습니다. 한번 dfs함수를 돌면서 들어온 값들은 동일한 시간을 가지고 있기에 이후 값과 섞이지 않고 관리할 수 있습니다. 하지만, 이렇게 한다고 해도 시간이 변경되는 기준점을 찾을 수 없습니다. 그래서 저는 임의값 (1110,1110)을 넣어 시간이 변경되는 시점을 체크하였습니다...
단순 완전탐색보다는 조금 힘든 문제인 것 같다. Solution 먼저 데이터를 받아 map를 만든다. 여기서 min_high와 max_high를 찾는다. 이는 처음 물높이를 설정할 때 이용한다. 모든 점을 우선순위 큐에 넣어서 오름차순 정렬을 한다. => 여기서 다른 구조를 사용해도 된다. 나는 벡터를 쓸려고하다가 큐가 편할 것 같아서 큐를 사용했는데 정렬이 안되서 할 수 없이 우선순위 큐를 이용했다. 그러므로 아무 자료구조를 사용해도 좋다. 단, 구조체 정렬이 가능해야된다는 점을 유의하자. 자료량이 계속 들어오는게 아니라 자료량의 크기도 정해져있기 때문에배열도 상관없다. 높이 가장 작은 곳을 찾아 물 높이가 min_high일 때, 잠기는 지 확인하다. 잠긴다면, 잠겼다는 표시로 0으로 바꿔준다. 만약 ..
이 문제는 전형적인 DFS/BFS 완전탐색 문제이다. Solution 값을 입력 받는다. 여기서 값이 1인 인덱스를 벡터 stack에 입력한다. 벡터 stack이 빌때까지 while문을 돌면서 dfs 함수를 호출한다. 호출할 때는 새로운 단지를 발견한 것이기에 answer함수에 새로운 단지를 찾았다는 뜻으로 push_back으로 값을 넣어준다. dfs함수에서는 4방향을 보며 1일 경우, 재귀호출을 해준다. => 여기서 유의점은 범위체크이다. 인덱스가 배열을 범위를 넘어서면 무조건 오류가 나기때문에 귀찮더라도 범위체크를 해줘야한다. 재귀호출하면서 집의 갯수를 세야된다. 그렇기에 새로운 집에 방문할때마다 answer의 마지막 요소에 +1를 해준다. 여기서 왜 마지막 요소인가하면, 동시에 여러단지를 검색하지않..
DFS / BFS 백준 : 2667 https://hyemsinabro.tistory.com/118 / 2468 https://hyemsinabro.tistory.com/119 / 2636 https://hyemsinabro.tistory.com/120 / 2573 / 2589
#include #include #include using namespace std; void quick_sort(int right, int left, int list[][2]) { if (right = L) { while (list[R][1] >= list[middle][1]&&R>=middle) R--; while (list[L][1] > column >> row; int have_paper; cin >> have_paper; int tail; cin >> tail; int tail_list[1010][2] = { 0 }; int max_column = 0; for (int i = 1; i > tail_list[i][0] >> tail_list[i][1]; if (max_column < tail_li..
싸피는 합격하기 위해서는 총 3가지 단계가 필요합니다. 서류[자기소개서] / 인적성 / 면접 이 순서로 진행됩니다. 서류[자기소개서] 먼저, 서류를 작성하게 됩니다. 여기서 우리가 변화를 줄 수 있는 부분은 자기소개서뿐입니다. 그렇기에 자기소개서를 공드려서 작성하게 됩니다. 순전히 저의 생각이지만, 대부분 서류 통과를 하기에 이 단계에서는 자기소개서가 그렇게 중요하지 않습니다. 하지만, 합격을 목표로하면 대충 쓰지말고 공들여서 열정을 뽐내는 자기소개서를 작성하는 것을 추천합니다. 인적성 서류 작성 후, 대부분 인적성 단계로 넘어갑니다.(저는 3기에도 지원했지만, 서류에서 떨어진 사람의 소식을 들어 본 적이 없습니다.) 싸피 인적성은 2그룹으로 나눠 시간대가 다릅니다. 날짜는 동일하지만, 시간은 대략 2시..
1. reckon : similar to think Do you think it'll rain tomorrow? -> Do you reckon it'll raing tomorrow? I think it'll be clear all day -> I reckon it'll be clear all day 2. find : give or ask for opinions How are you finding your new job? -> i'm finding work pretty stressful at the moment. How did you find the exam? -> i ffound the exam really easy, actiudally! 3. to be honest [솔직히] : when being v..
Nice -> fun /sunny, glorious / great,fantastic / tasty, delicious / wonderful, lovely 우리는 nice day, nice idea 등 nice라는 영단어를 많이 사용합니다. 영작을 할 경우, 결과물을 보면 nice라는 단어가 자주 보입니다. 하나의 글에 nice 라는 단어가 자주 등장하다보면 글이 지루해질 수 있습니다. 그렇기에 우리는 nice라는 단어를 다른 다양한 단어로 바꿔서 사용해보는 것은 어떨까요?? 밑에는 하나의 영어글에서 nice를 다른 단어로 변경해 보도록 하겠습니다. 1. Last weekend i was feeling a bit bored at home, so i decided to do something nice wit..
조합을 이용하여 팀을 나눈다. Solution 조합을 이용해 팀을 나눈다 팀별로 연산을 한다. #include #include #include #include #include #include using namespace std; #define INF 1000000000 int main(void) { freopen("inp.inp", "r", stdin); freopen("out.out", "w", stdout); vector map; vector person; int amount = 0; cin >> amount; for (int i = 0; i < amount; i++) { vector a; map.push_back(a); person.push_back(i); for (int j = 0; j < amo..
전형적인 전체탐색 문제이다. Solution 재귀함수를 통해 벽을 세울 위치를 3개를 탐색한다. 3개가 탐색되면, 바이러스를 퍼지는 것을 시뮬레이션 돌려서 완전공간을 확인한다. Key Point 상관은 없지만, 시간을 줄이기 위해서 check함수로 통해 중복연산을 줄였다. 하지만, 이를 하지 않아도 성공할 수 있다. #include #include #include #include #include #include using namespace std; #define INF 10000000 typedef struct A { int i, j; }; vector map; int n, m; queue list; int wall_number = 0; int dx[] = { -1,0,1,0 }; int dy[] = {..
완전 쉬운 완전탐색 문제입니다. 처음 편하게 시도하기에 적합한 문제인듯합니다. Solution 재귀호출을 하면서 상담을 하는 경우와 안하는 경우 모두 탐색을 해줍니다. 그중에 max값을 선택합니다. Key Point 완전탐색 #include #include #include #include #include #include using namespace std; #define INF 10000000 int max_value = 0; int n = 0; int list[16][2] = { 0 }; void dfs(int value,int time) { if (time+1 > n) { if (value > max_value) max_value = value; return; } if (list[time][0] !=..