목록전체 글 (65)
BFS/DFS를 사용하는 문제. BFS를 사용하였다. 입력을 받은 후 전체 맵을 탐색하면서 배추가 있는 부분부터 BFS를 사용하여 배추 한 덩어리를 찾고, 한 덩어리당 배추흰지렁이 갯수를 늘리면 된다. BFS를 사용하는 것은 동일하지만, 좌표를 큐에 넣어야 하기때문에 pair를 사용한다. 또한 좌표가 맵을 벗어나지 않도록 조건을 넣어주어야 한다. 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 #include #i..
Outlook에서 학생들의 정보를 추출했으니, 엑셀 파일에 해당 학생의 퀴즈 제출 여부에 체크를 하면 된다. 먼저, 엑셀을 사용하기 위해서는 openpyxl 이라는 라이브러리를 사용해야한다. from openyxl import load_workbook 을 사용하여 엑셀의 한 시트에 접근하여 작업을 할 수 있다. 1 2 3 4 5 from openpyxl import load_workbook # Exel API wb = load_workbook(filename="test.xlsx") # 엑셀파일 오픈 sheet = wb.worksheets[0] # 맨 앞에 시트 꺼내기 sheet['C4'] = 'o' # 시트에 작성 wb.save("test.xlsx") cs 위와 같이 엑셀 파일을 열고, 시트 인덱스에 따..
학부생 수업의 조교를 맡게 되었다. 일거리가 늘어났지만 나 또한 학부생때 들었던 수업이라 열심히 하려고 한다. 매주 학부생들은 한 챕터가 끝날때마다 수업에 대한 퀴즈를 풀고, 조교에게 메일로 퀴즈결과를 전송한다. 조교의 업무 중 하나는 매주 메일을 확인하여 제출을 완료 한 학생을 엑셀에 표시하는 것. 매우 단순한 일이다. 다만 문제는 매주 174개의 메일이 온다는것.... 메일 내용에 있는 챕터 번호와 학번을 일일히 확인하고 엑셀에 해당 학번을 검색해서 "o"를 표시하면 되는데.... 20개쯤 하다보니 현타가 왔다. ... 내가 지금 뭘 하는거지 .... 공부할 것도 산더미 인데... 이렇게 시간낭비를 할수는 없다. 사실 귀찮다... 인터넷에서 이런말을 봤다. 파이썬과 구글만 있으면 못할게 없다고. 나는..
중복을 허용하게 되므로 N과 M(1) 에서 중복방지를 위해 존재했던 chk를 제거하여 방문 표시를 하지 않으면 된다. 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 #include #include #include #include #include #include #include using namespace std; void DFS(vector v, vector arr, int cnt, int n, int m, int x) { arr.push_back(v[x]); // 값 넣어줌 cnt++; // 갯수 계산 if (cnt == m)..
이 전 문제에서 오름차순 조건이 추가되었다. 이런 저런 조건 필요 없이 이미 벡터에 들어있는 마지막 값보다 큰 값만 추가하면 자연히 오름차순이 만족된다. 또한, 처음 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 #include #include #include #include #include #include #include using namespace std; void DFS(vector v, vector arr,..
기본적인 백트래킹 문제이다. c++의 endl 때문에 한번 시간초과가 나긴 했다..... 백트래킹의 경우 트리로 생각하면 간단하게 해결 할 수 있다. (4,2)가 입력일때, 루트노드가 1이라면 자식노드는 1을 제외한 2,3,4 가 되고, 트리의 계층이 2층 이므로 모두 탐색을 완료한 것이다. 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 #include #include #include #include #include #include #include using names..
문제를 읽어보면 알겠지만 논리적으로는 굉장히 쉬운 문제이다. 다만 입력을 문자열로 받기에 그 부분을 처리하는데 있어 조금 귀찮을 뿐이다. 예를들어 55-50+40 이 주어질 경우, 가장 작은 값을 만들기 위한 괄호는 55-(50+40) 이다. 즉, 55-50-40 으로 만들면 된다는 것이다. 이를 위해 음수 이후의 덧셈을 모두 뺄셈 처리를 해주면 해결된다. 위 처럼 계산을 해주기 위해 문자열을 적절히 처리하여 배열에 {55, -50, 40} 으로 넣어주었다. 위 배열처럼 만들기 위해 아스키 코드 값을 기준으로 숫자를 분류하였고, atoi() 를 사용하여 정수값으로 변환 시켰다. 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..
문제를 읽자마자 그냥 오름차순으로 정렬한 후에 더하는 것만 하면 된다고 생각했다. 하지만 실버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 #include #include #include #include #include #i..