일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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++
- 중반부
- 보석쇼핑
- Union-find
- Algorithm
- 소감
- 삼성 #코테 #2020상반기 #c++
- 1편
- 백준
- IBK기업은행 #기업은행 #디지털 #직무 #정리
- 코테
- 카카오
- BFS
- 알고리즘
- LIS #Algorithm #요소추적
- 스마일게이트
- 투포인터
- 서버개발캠프
- 코딩테스트
- 식단
- BaekJoon
- Smilegate
- Today
- Total
목록Algorithm (178)
짱아의 개발 기록장
전형적인 스택문제이다. 열린 괄호와 닫힌 괄호의 개수가 일치해야하는 것 뿐 아니라, 올바른 괄호의 형태여야한다. 즉, ()()는 YES이지만, )()(와 같은 형태는 NO이다. 코드 첨부 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 // 괄호 #include #include using namespace std; int n; stack S; string s; int main() { cin>>n; for(int i=0; i>s; bool check = true; for(int j=0; j
시뮬레이션 문제이다. 처음에 치즈 안에 있는 공기를 제외하고 겉에만 세야하는 것을 어떻게 해야할까 엄청 고민하다가... 어차피, 치즈는 가에 있을 수 없다는 조건을 보고 (0, 0)의 점을 큐에 넣고 외부의 공기를 모두 표시해주었다. 그리고 그 외부의 공기와 맞닿아 있는 치즈의 표면을 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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 ..
처음에는 전혀 감을 잡지 못하고 결국.. 다른 분의 코드를 약간 참고해서 구현했다. dp를 사용하여 "SAMSUNG"을 dp[0]~dp[6]으로 잡아서 1) "S" 일때는 0, 3이니까 dp[0] = dp[0]+1; dp[3] = dp[2]+dp[3] 2) "A"일때는 1이니까 dp[1] = dp[0]+dp[1] ....이런식으로 dp를 이용하면 된다. 코드 첨부 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 // 8676. 동현이와 한결이는 아이돌 #include #include #include using namespace std; int t..
간단한 문자열 처리 문제입니다. 앞의 두 글자와 뒤의 두 글자를 나눠서 1) 둘 다 01~12에 해당한다면, "AMBIGUOUS" 2) 앞에만 01~12에 해당한다면, "MMYY" 3) 뒤에만 01~12에 해당한다면, "YYMM" 4) 둘 다 해당되지 않는다면, "NA" 코드 첨부 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 // 10059. 유효기간 #include #include using namespace std; int testc..
문자열 처리문제이다. 나는 생각보다 쉬운 문제지만, 어떻게 풀지 고민하는 데에 상당히 많은 시간을 할애한 것 같다. 잘못된 방식으로 풀었다가 시간 낭비를 많이 했다. ex) abaa -> 1211 / ccbc -> 1121 / abcd -> 1234 이런식으로, 같은 문자는 같은 번호로 다른 문자라면 +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 // 비슷한 단어 #include #include #includ..
전형적인 플로이드 와샬 문제이다. 거쳐가는 점, 출발 점, 도착 점을 3중 for문으로 돌아 dp값을 계속 갱신해주었다. 그 후에는 i->i로 의 경로중 가장 최소 값을 구해주었다. 코드 첨부 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 // 운동(플로이드 와샬) #include #include using namespace std; int v, e, a, b, c; int dp[401][401] = {0, }; int road[401][401] = {0, }; int total ..
전형적인 다익스트라 문제이다. 다만, 최소 비용을 구하는 것에서 끝나는 것이 아니라 최소비용을 위해 거치는 모든 도시들을 출력해야한다. 그래서 본인은 city라는 배열을 사용하여 최소 비용의 값이 갱신 될 때마다, 해당 도시를 넣어주었다. 즉, city[a] = b라면 a로 오는 모든 경로중 최소 비용을 차지하는 경로의 출발 도시가 b임을 의미한다.(b->a) 코드 첨부 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 ..
시작점을 제외하고 거칠 수 있는 점이 총 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 ..