일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준
- 2019 카카오 공채
- 부스트코스
- set
- Baekjoon
- 2020 카카오 공채
- Java
- 2019 카카오 개발자 겨울 인턴십 코딩테스트
- 알고리즘
- 2020 KAKAO BLIND RECRUITMENT
- map
- 2019 KAKAO BLIND RECRUITMENT
- CS 스터디
- gcp
- 2018 카카오 공채
- 2018 KAKAO BLIND RECRUITMENT
- 프로그래머스
- dfs
- 자바
- gradle
- bfs
- 젠킨스
- 카카오 공채
- 카카오
- 비트마스크
- 삼성 SW 역량테스트
- 삼성 SW 기출문제
- 2018 카카오
- c++
- 2018 KAKAO BLIND RECRUITMENT 1차
- Today
- Total
목록알고리즘 (76)
아무코딩
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/edNnYs/btqDbmkWn8G/TyGh8A1dGQCS5F3zZ297Xk/img.png)
문제풀이 범위가 작아 완탐이 가능한 문제입니다. dfs를 사용하였고 문제에 제재 아이디 목록들을 구했을 때 아이디들이 나열된 순서와 관계없이 아이디 목록의 내용이 동일하다면 같은 것으로 처리하여 하나로 세면 됩니다. 라는 부분을 보고 중복방지와 순서가 필요없다는 부분에서 set이 생각나 set을 사용하였습니다. 아이디 목록도 set 그 목록자체의 목록도 set으로 구성하여 이중 set을 사용하였습니다. 소스코드 더보기 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 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cnCrGM/btqDbEr5HD8/8FWESA13XsokQkShzScE40/img.png)
문제풀이 코딩 테스트에 자주 사용되는 string_tokenize를 사용하는 문제입니다. 그리고 분리한 배열들의 순서를 정하는 아이디어는 길이를 이용하여 소팅하는 방법을 이용하였습니다. 문제자체는 어렵지 않지만 이미 만들어본 string_tokenize를 적용하려다보니 1,2,3문제중에서는 가장 좀 지저분하게 풀었고 시간을 쓴 문제였습니다. 소스코드 더보기 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..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/mAaVS/btqC9MEDS1K/ClqbKxxTVr0QtpFM7bB8F1/img.png)
문제풀이 출제의도는 스택 같으나 성질이 비슷한 vector를 이용하였습니다. 소스코드 더보기 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 #include #include using namespace std; vector box; vector basket; int cnt = 0; void moveCrain(int idx) { if (box[idx].size() > 0) { basket.push_back(box[idx][box[idx].size() - 1]); box[idx].pop_back(); } else return; ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/do3rpT/btqC8IVh8mJ/2QzoiSRFPpk9zYu09hbzz0/img.png)
블록 위치를 따로 저장하고 여러 번 돌리는 게 효율적일 거 같아서 시도하였으나 매우 번거로워 방법을 바꾸고 이 방법으로 풀었다. 풀이 과정 풀면서 고려했던 사항 채울수 있는지 체크하는 방법 구현 -> 위에서 쭉 내려보며 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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dC0FZh/btqC5adYXDq/8k5e6NzjA8cgxBPkqdKOCk/img.png)
보자마자 자료구조 때 배운 스택을 이용한 계산기 만드는 과제가 생각났다. 그 방식을 적용하여 풀었다. 자료구조에 나오는 스택 계산기는 infix -> postfix postfix 를 통한 결과 로 이루어지는 과정이다. 풀이과정 dfs를 통해 괄호를 친다. 괄호가 중복될수 없기 때문에 괄호보다는 괄호 처리된 연산을 따로 우선순위만 높여주는 방식으로 마킹하였다. 괄호 처리 : 우선순위 1 * : 우선순위 2 +,- : 우선순위 3 dfs를 끝까지 간 후 수식을 계산한다. 수식계산법 Infix -> postfix 피연산자가 들어오면 바로 postfix 벡터에 넣는다. 입력이 연산자인 경우에는 스택이 비었거나, 스택 top보다 우선순위가 낮은 인풋일 때까지 pop 한다. pop한뒤에는 postfix 벡터에 넣는..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/AGqiL/btqC5pacNuV/9ttRfTQb0Bf3RqoqsW1GEk/img.png)
풀이 방법 이 문제는 시간 초과를 해결하는 게 관건인 문제였다. 기존에 2048(easy) 문제를 풀 때 완 탐으로 풀었었는데 가지를 쳐서(백트래킹 이용) 시간을 줄이는 방법으로 풀었다. 시간 초과 해결법 - 백트래킹을 이용한다. 진행할 때 단계별 최댓값을 미리 계산하여 불가능한 경우 더 이상 진행하지 않는다. 이동하여 맵이 같은 경우 더 이상 진행하지 않는다. 여기서 시간 초과 해결법 2번의 경우에 의해 예외처리를 제대로 해주지 않아 많이 헤맸다. 이유는 가장 큰 블록의 최신화를 항상 cnt==10 일 때 해주었었는데 그 때문에 움직이지 못하는 경우에 0으로 뽑히는 문제가 있었다. 반례가 나왔던 예 4 2 4 8 16 4 8 16 32 8 16 32 64 16 32 64 128 정답 : 128 내 기존..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lKiAQ/btqCYF61kBJ/4ag1qFUBWV75ju4PWUYkAK/img.png)
문제 풀이 CCTV 번호마다 감시하는 방법이 다르다. 하지만 1번카메라를 통해서 모두 똑같이 구현할수 있다. 1번카메라를 통해 벽을 만나는 계산하는 함수를 구한뒤 나머지에 중복 적용 해준다. 소스코드 더보기 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 86 87 88 89 90 91 92 93 94 95 96 97 ..
풀이 문제에서 요구한 조건대로 재귀코드를 작성하면 된다. 소스코드 더보기 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 #include #include #include #include using namespace std; string divide_str(string str) { int cntl=0, cntr=0; for (int i = 0; i