일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- BaekJoon
- 유니온파인드
- LIS #Algorithm #요소추적
- Smilegate
- 1편
- 소감
- 카카오
- c++
- 투포인터
- 코테
- 서버개발캠프
- 알고리즘
- 삼성 #코테 #2020상반기 #c++
- 코딩테스트
- 식단
- BFS
- 백준
- 스마일게이트
- IBK기업은행 #기업은행 #디지털 #직무 #정리
- 보석쇼핑
- 카카오인턴
- 중반부
- Algorithm
- Union-find
- Today
- Total
목록Algorithm (178)
짱아의 개발 기록장
카카오에서 나올 법한 문자열 처리 문제였다. 숫자를 기준(idx)으로 idx+2값이 전체 문자 전체의 길이에 벗어나지 않는다면, 괄호를 추가하거나 추가하지 않는다. 1) 괄호를 추가한다면, idx(숫자), idx+1(연산자), idx+2(숫자) 값을 계산해준 다음 그 전까지의 총합과 계산하여 넘겨주었다. 그리고 다음 idx값은 idx+4가 된다. 2) 괄호를 추가하지 않는다면, 그 전까지의 총합과 지금 값을 연산해주고 다음 숫자로 넘어간다. 코드를 보면 더 이해가 잘 될 것이다. 코드 첨부 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 31 32 33 34 35 36 37 38 39 40 41 42 43 4..
본인은 c++의 큐 라이브러리를 사용하지 않고 직접 구현하여 문제를 풀었다. 코드 첨부 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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 // 큐 #include using namespace std; int queue[10001] = {0, }; int front = -1, rear = -1; int n, m; string s; void insert(int data) { if(front==-1)..
본인은 c++의 스택 라이브러리를 쓰지 않고 직접 구현하여 문제를 풀었다. 코드 첨부 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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 // 스택 #include using namespace std; int n, m; string s; int stack[10002] = {0, }; int top = -1; // 가장 위에 부분을 가리키고 있는 변수 bool empty() { if(top==-1){ return 1; }else{ return 0; }..
전형적인 탐색 문제이다. 변수에 맨 처음 보이는 트로피의 값을 넣어주고 그 변수 값보다 큰 값이 나올때마다 변수 값을 갱신해주면서 카운팅해주면 된다. 코드 첨부 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 31 32 33 34 35 36 37 38 39 // 트로피 진열 #include #include using namespace std; int n, m, Left = 1, Right = 1; vector v; int main() { cin>>n; for(int i=0; i>m; v.push_back(m); } // 왼쪽에서 봤을 때 int temp = v[0]; for(int i=0; i
최대 100,000개의 열을 가질 수 있기 때문에 바로 dp로 풀었다. 생각해보면 (i, j)의 자리에 스티커를 붙이게 되면 변이 닿아 있는 부분은 훼손되기 때문에 결국 (i-1, j-1), (i-1, j-2)의 자리 중 큰 값에 붙이는 것이 이득이 된다. 따라서, 0행일 때는 dp[0][j] = max(dp[1][j-1], dp[1][j-2]) + sticker[0][j]라는 점화식이 나오고 1행일 때는 dp[1][j] = max(dp[0][j-1], dp[0][j-2]) + sticker[1][j]라는 점화식을 도출할 수 있다. 코드 첨부 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 31 32 33 3..
'최소'라는 조건이 있었기 때문에 바로 bfs로 풀어야 한다고 생각했다. 풀고 나서 다른 분들의 풀이를 보니, 굳이 bfs 뿐 아니라 dfs로 푸신 분들도 있으셔서 상관은 없는 듯 싶다. 일단, 초기 동전의 위치를 큐에 넣어주고 1) 네 방향에 있어서 각각의 동전의 위치가 범위를 벗어나는지, 한 개만 벗어나는지, 범위를 안 벗어나는지를 판단한다. 2) 두 동전 모두 범위를 벗어나면, continue 3) 한 개만 벗어나면 -> cnt가 10이 넘지 않는지 확인후 cnt를 반환해준다. cnt가 10이 넘으면 -1을 반환 4) 범위를 벗어나지 않으면 -> 이동한 곳이 벽인지 아닌지를 확인해주고 큐에 넣는다. 코드 첨부 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20..
시뮬레이션 문제입니다. for문으로 돌면서 '*'이 있으면 그것을 십자가의 중점으로 생각하고 십자가가 있을 수 있는 자리인지를 확인했습니다. 그리고 있을 수 있는 자리라면, visited배열에 십자가에 해당하는 모든 점들을 방문처리했습니다. 코드 첨부 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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 // 십자가 찾기 #..
완벽한 백트래킹(dfs)문제이다. dfs 함수에서 모든 상태를 새로운 배열과 벡터에 담아두고 물고기를 움직이고, 상어를 움직인 후 재귀함수를 통해 계속 반복한다. 그 후 재귀에서 돌아오면 다시 담아두었던 새로운 배열과 벡터의 값들을 원래 배열과 벡터에 넣어주면 된다. 즉, 계속 백트래킹을 하면서 원래대로 돌려놓는 작업이 중요하다! 코드첨부 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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 ..