완전 탐색- 재귀함수를 이용한 완전 탐색(기본 개념) 완전 탐색은, 말그대로 어떠한 답을 도출하기 위해 가능한 모든 케이스를 연산(완전탐색)하고 확인하여 답을 도출하는 알고리즘이다. 그러므로, 완탐의 시간복잡도는 아래와 같다. 완전탐색의 시간복잡도: 가능한 모든 경우의 수 이러한 완전탐색 알고리즘을 재귀함수를 통해 구현할 수 있다. 재귀함수는 자신이 수행할 작업을 유사한 형태의 여러 조각으로 쪼갠 뒤 그 중 한 조각을 수행하고, 나머지를 자기 자신을 호출해 실행하는 함수이다. ( 사실 알고리즘 문제풀이에 익숙하지 않으면, 자기 자신을 호출해 실행한다는 개념이 한 번에 받아들여지지는 않는다.. 인내를 갖고 반복해서 생각하는 것이 중요한 것 같다.) 재귀 함수는 Recursive Case, Base Case 두 가지로 크게 구성해서 설계하면 된다. 여기서 신기.. 앞으로의 공부 방향 최근 작은 회사 두 군데, (커머스, 블록체인업) 중견이상 서비스 기업(커머스)에 면접을 보고 느낀 점이 있다. 회사의 규모(정확히는 개발 조직의 규모가 되겠다.) 등에 따라 면접에서 질문하는 포인트가 다르다. 큰 회사일수록, CS의 기초 전공 지식을 물어보는 것 같다. 기초 Data Structure 및 거기에서 파생되는 알고리즘까지. 사실 얼마전까지는 알고리즘 문제 풀이를 위한 자료구조 몇 가지를 이해하고 '사용하는 것'에 초점을 맞췄기 때문에 C++ STL로 끌어와 쓰는 것이 전부였는데, 앞으로 당분간은 이 기본 자료구조를 하나씩 짜볼 예정이다.. 그래서 우선은 자료구조 페이지를 새로 만들었다. 사실 자료구조를 하나씩 짜는건 좀 재미가 없을 수 있는데, 기본을 할 줄 아는 개발자가 되기 위해서는 피.. JavaScript에서의 this 란? this는 '함수가 호출되었을 때 그 함수가 속해 있던 객체의 참조' 라고 볼 수 있다. var list = { name: 'Lee', sayHello: ()=>{ console.log("Hello! " + this.name); } } 이때 list.sayHello() 를 실행하면 Hello! Lee 가 콘솔에 출력됨 이유를 뜯어보면, this.name에서 함수 sayHello()가 호출되었을 때 sayHello가 속해있던 객체는 list객체다. 따라서 정의에 따라 this는 이 list객체를 참조하기 때문에, this.name 은 list.name의 값인 Lee를 참조한다. this 가 함수가 호출 되었을 때 그 함수가 속해있는 객체를 가리킴을 더 명확히 확인하기 위해, 아래 예를 추가로 들 수 있다... 프로그래머스/숫자게임/2018서머코딩기출/ https://programmers.co.kr/learn/courses/30/lessons/12987 알고리즘 연습 - 숫자 게임 | 프로그래머스 실행 결과가 여기에 표시됩니다. programmers.co.kr A팀과 B팀의 숫자를 오름차순으로 sort 한뒤, A팀의 작은 숫자부터 순회하면서 B팀에서 작은 숫자부터 비교하여, B팀에서 더 큰 숫자가 나오자마자, answer에 ++하고, 다음 B팀에서의 순회는 B팀에서 이전에 큰 숫자가 나온 index 다음 index부터 탐색해나간다. 구현코드 구현코드_ C++로 작성 #include #include #include #include using namespace std; int solution(vector A, vector B) { int answer = 0.. 프로그래머스/2018서머코딩기출/예산 https://programmers.co.kr/learn/courses/30/lessons/12982 알고리즘 연습 - 예산 | 프로그래머스 실행 결과가 여기에 표시됩니다. programmers.co.kr 낮은 예산을 필요로 하는 부서부터 순회하면서 balance에서 계속 -로 까주면서 코드 돌리면 된다. 쉬우니까 더 이상 말은 생략. [구현코드_C++] #include #include using namespace std; int solution(vector d, int budget) { int answer = 0; int balance = budget; //budget으로부터 balance를 값복사 한다. sort(d.begin(),d.end()); for(int i = 0; i < d.size(); .. 프로그래머스/윈터코딩2018기출/쿠키구입/C++ https://programmers.co.kr/learn/courses/30/lessons/49995 알고리즘 연습 - 쿠키 구입 | 프로그래머스 실행 결과가 여기에 표시됩니다. programmers.co.kr m번째 바구니를 기준(시작점)으로 두 아들이 m번째 바구니부터 각각 좌우로 순회하면서 쿠키 갯수를 서로 더해가면서 양아들의 쿠키갯수가 같아지면서 동시에 이것이 최대값일 경우 max값을 갱신해주는 방식으로 코드를 구현할 수 있다. 시간 초과가 걸리는 문제가 있는데, 중간에 주석으로 달아놓은 설명대로 break를 사용하여 불필요한 순회를 하지 않는다면, 효율성 테스트 케이스 부분까지 모두 통과할 수 있다. [구현코드_C++로 구현] #include #include #include using names.. 프로그래머스/윈터코딩2018기출/방문길이/해시를 이용한 풀이/C++ https://programmers.co.kr/learn/courses/30/lessons/49994 알고리즘 연습 - 방문 길이 | 프로그래머스 실행 결과가 여기에 표시됩니다. programmers.co.kr 내 기준으로는 호락호락하지 않은 문제다. 핵심은 단순 경로가 아니고, 중복되지 않은 '경로 궤적'의 길이를 구해야 한다는 점이다. 이를 구현하기 위해 한 점에서 이동을 할 때 시작점 -> 도착점, 도착점->시작점 이 두 가지 경로에 대해 방문이 되지 않은 경우만, 경로의 길이에 합산하였다. 그리고, 굳이 -5~5값을 갖는 범위로 하지 않고, 0~10 까지의 좌표를 갖는 좌표계로 옮겨서 생각하였다 (그럼 시작점도 0,0 에서 5,5로 이동될 것이다.) 저 시작점 -> 도착점, 도착점->시작점은 ma.. 프로그래머스/윈터코팅2018/스킬트리 https://programmers.co.kr/learn/courses/30/lessons/49993 알고리즘 연습 - 스킬트리 | 프로그래머스 실행 결과가 여기에 표시됩니다. programmers.co.kr 드디어 프로그래머스 코딩테스트에 나왔던 기출문제를 건드리고 있다. 이 문제는 각 skill_trees 원소의 string을 차례로 탐색하면서 핵심 skill에 해당하는 char가 있으면 이를 차례대로 queue에 집어 넣었다가, queue에서 다시 한개씩 꺼내서 q의 사이즈만큼 순회하면서 핵심 스킬의 앞부분과 하나씩 비교하는 방식으로 가능한 스킬트리인지를 확인하였다. 아직, 그래프의 위상정렬은 익숙하지 않기 때문에 queue의 특성을 이용하여 풀어보고자 하였는데, 간신히 통과하였다 .. (공부가 많.. 이전 1 ··· 5 6 7 8 9 10 11 다음