일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 카카오인턴
- c++
- 삼성 #코테 #2020상반기 #c++
- LIS #Algorithm #요소추적
- 보석쇼핑
- 식단
- 코테
- Union-find
- 스마일게이트
- Algorithm
- 투포인터
- 카카오
- Smilegate
- BFS
- BaekJoon
- 코딩테스트
- IBK기업은행 #기업은행 #디지털 #직무 #정리
- 1편
- 유니온파인드
- 알고리즘
- 백준
- 소감
- 서버개발캠프
- 중반부
- Today
- Total
목록Algorithm/Baekjoon (70)
짱아의 개발 기록장
시작점을 제외하고 거칠 수 있는 점이 총 7개(텔레포트 6개 + 도착 점 1개)이다. 총 7개의 점을 순열로 순서를 정하고 순서에 맞게 각 점사이의 거리를 더하고 텔레포트를 하기 위한 시간 10을 더한다. 텔레포트를 하기 위한 시간을 왜 더했는지 묻는다면.... V.push_back({a, b, c, d}) 와 같이 구조체 형태로 텔레포트지점을 저장했기 때문이다. 그리고 중간에 도착지점에 도착한다면 break로 빠져나왔다. 흠..이 문제는 설명하기가 참 어렵다...ㅎㅎ 그냥 코드를 읽으면 이해하기 더 쉽다. 코드 첨부 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 ..
카카오에서 나올 법한 문자열 처리 문제였다. 숫자를 기준(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 // 십자가 찾기 #..