본문 바로가기

분류 전체보기57

[Algorithm] 순열 구하기(DFS) ❐ 순열 구하기 ▶︎ 문제 10이하의 N개의 자연수가 주어지면 이 중 M개를 뽑아 일렬로 나열하는 방법을 모두 출력합니다. 입력으로 M과 N개의 자연수가 오름차순으로 정렬된 배열이 주어집니다. ▷ 입력 예제 2, [3, 6, 9] ▶︎ 출력 예제 3 6 3 9 6 3 6 9 9 3 9 6 ▶︎ 문제 설명 순열은 서로 다른 n개의 원소에서 r개를 중복없이 순서에 상관있게 나열하는 것을 말한다. 이전 포스팅에서 중복순열은 중복을 허용하기 때문에 3 3과 같은 경우의 수가 가능했던 반면, 순열에서는 이것이 허용되지 않는다. ▷ 내 답안 function solution(m, arr) { let answer = []; let n = arr.length; let ch = Array.from({ length: n }.. 2022. 10. 13.
[Algorithm] 중복순열 구하기(DFS) ❐ 중복순열 구하기 ▶︎ 문제 1부터 N까지 번호가 적힌 구슬이 있습니다. 이 중 중복을 허락하여 M번을 뽑아 일렬로 나열하는 방법을 모두 출력합니다. ▷ 입력 예제 3 2 ▶︎ 출력 예제 1 1 1 2 1 3 2 1 2 2 2 3 3 1 3 2 3 3 ▷ 문제설명 일반적으로 순열은 서로 다른 n개 중 r개를 순서를 고려하여 나열하는 것을 말한다. 한 번 고른 것은 다시 고를 수 없는 것이 원칙이나, 중복순열의 경우에는 특별히 중복을 허용한다. 문제는 3까지의 번호가 적힌 구슬에서 두 개를 뽑아 중복을 허락하여 나열하는 경우의 수를 구하라고 한다. 즉, 주머니에 1부터 3까지 적혀있는 구슬 세개가 들어있다고 가정했을 때 ① 주머니에 들어있는 세개의 구슬 중 하나를 뽑아서 첫번째 자리 수를 정하고 ② 뽑은.. 2022. 10. 12.
[Algorithm] 합이 같은 부분집합(DFS) ❐ 합이 같은 부분집합 ▶︎ 문제 N개의 원소로 구성된 자연수 집합이 주어지면, 이 집합을 두 개의 부분집합으로 나누었을 때 두 부분집합의 원소의 합이 서로 같은 경우가 존재하면 "YES"를 출력하고, 그렇지 않으면 "NO"를 출력하는 프로그램을 작성하세요. 둘로 나뉘는 두 부분집합은 서로소 집합이며, 두 부분집합을 합하면 입력으로 주어진 원래의 집합이 되어야 합니다. 예를 들어 {1, 3, 5, 6, 7, 10} 이 입력되면 {1, 3, 5, 7} = {6, 10} 으로 두 부분집합의 합이 16으로 같은 경우가 존재하는 것을 알 수 있습니다. ▷ 입력 예제 1 3 5 6 7 10 ▶︎ 출력 예제 YES ▷ 내 답안 function solution(arr) { let answer = "NO"; let c.. 2022. 10. 9.
[Algorithm] 부분집합 구하기(DFS) ❐ 부분집합 구하기 ▶︎ 문제 자연수 N이 주어지면 1부터 N까지의 원소를 갖는 집합의 부분집합을 모두 출력하는 프로그램을 작성하시오. 단, 공집합은 출력하지 않습니다. ▷ 입력 예제 3 ▶︎ 출력 예제 1 2 3 1 2 1 3 1 2 3 2 3 ▷ 내 답안 function solution(n) { let answer = ""; let ch = Array.from({ length: n + 1 }, () => 0); function DFS(L) { if (L > n) { ch.forEach((ele, i) => { if (ele === 1) { answer = answer + i.toString(); } }); answer = ""; return; } else { ch[L] = 1; DFS(L + 1); .. 2022. 10. 8.
[Algorithm] 이진트리 깊이우선탐색(DFS) ❐ 이진트리순회 이진트리는 부모노드에서 자녀노드로 뻗어나가는 구조를 가진다. 그림에서 왼쪽에 위치한 자녀는 (부모노드)*2의 값을 가지고, 오른쪽에 위치한 자녀는 (부모 노드)*2+1의 값을 가지게 된다. 이진트리를 순회하는 여러가지 방법이 있다. 이 글에서는 3가지 방법을 소개하는데 부모의 순서에 따라 전위/중위/후위 순회로 구분된다. 전위 순회는 부모, 왼쪽자녀, 오른쪽 자녀 순서로 출력된다. 중위 순회는 왼쪽자녀, 부모, 오른쪽 자녀 순서로 출력된다. 후위 순회는 왼쪽자녀, 오른쪽 자녀, 부모 순서로 출력된다. 위의 그림을 전위/중위/후위 순회한 결과는 이렇다. 전위 순회: 1-2-4-5-3-6-7 중위 순회: 4-2-5-1-6-3-7 후위 순회: 4-5-2-6-7-3-1 코드로 나타내보자. con.. 2022. 10. 7.
[Development] 프론트엔드 면접 예상 질문 - React 1. Virtual DOM 작동 원리에 대해 설명해주세요. 2. React를 사용하는 이유에 대해 말씀해주세요. 3. React에서 JSX 문법이 어떻게 사용되나요? 4. React hook에 대해서 설명해주세요. 5. 상태관리의 필요성에 대해서 설명해주세요. 1. Virtual DOM 작동 원리에 대해 설명해주세요. 가상 돔은 실제 돔보다 상대적으로 가벼운 자바스크립트 객체 어떤 데이터가 변경이 되어서 화면을 업데이트 해야할 때, React는 가상 돔을 이용해서 빠르게 랜더링을 진행함 React는 메모리에 가상 돔을 올려놓고 (데이터 변경) 이전와 이후의 가상 돔을 합리적인 알고리즘으로 비교하여 변경된 부분만 실제 돔에 반영함 React에서 데이터 변경에 의한 화면 업데이트는 크게 렌더단계와 커밋단계를.. 2022. 9. 27.
[Development] 프론트엔드 면접 예상 질문 - JavaScript(3) 1. 호이스팅(hoisting)에 대해서 설명하세요.2. call 메서드와 apply 메서드의 차이점은 무엇인가요?3. 함수 선언문과 표현식의 차이점은 무엇인가요?4. 전역 스코프(global scope)를 사용했을 때 장단점에 관해 설명해주세요.5. 가비지 콜렉터(garbage collector)에 대해서 아는대로 설명해 주세요.  1. 호이스팅(hoisting)에 대해서 설명하세요.함수가 실행되기 전에 코드 안에 있는 변수들을 최상단으로 끌어올리는 것이러한 현상이 발생하는 이유는 변수가 선언되는 시점과 값의 할당이 되는 시점이 다르기 때문(자바스크립트 엔진에 의해) 변수 선언은 런타임 이전에 실행되고 값의 할당은 런타임에서 실행됨호이스팅으로 발생하는 var과 let, const의 차이호이스팅으로 나타.. 2022. 9. 27.
[Development] 프론트엔드 면접 예상 질문 - JavaScript(2) 1. 자바스크립트의 원시 타입(primitive type)과 참조 타입(reference type)에 대해서 설명해주세요. 2. 이벤트 버블링(event bubbling)과 캡쳐링(event capturing)에 대해서 설명하세요. 3. 이벤트 위임(event delegation)에 관해 설명해주세요. 4. 이벤트 루프(event loop)란 무엇인가요? (+ call stack, task queue 포함 ) 5. 불변 객체(immutable object)에 관해 설명해주세요. 1. 자바스크립트의 원시 타입(primitive type)과 참조 타입(reference type)에 대해서 설명해주세요. 원시 타입과 참조 타입은 데이터가 메모리에 어떻게 저장되느냐에서 가장 큰 차이를 보인다. 원시 타입 문자열.. 2022. 8. 3.
[Development] 프론트엔드 면접 예상 질문 - JavaScript(1) 1. 클로져(closure)는 무엇이며, 어떻게/왜 사용하는지 알려주세요. 2. 스코프(scope)에 대해서 아는 대로 설명해주세요. 3. 프로토타입(prototype) 기반 상속은 어떻게 이루어지는지 설명해주세요. 4. this는 자바스크립트에서 어떻게 작동하는지 알려주세요. 5. null과 undefined 그리고 undeclared의 차이점은 무엇인가요? 1. 클로져(closure)는 무엇이며, 어떻게/왜 사용하는지 알려주세요. 클로져란 함수의 실행이 끝난 후에도 함수에 선언된 값을 접근할 수 있도록 만든 함수이다. 이것이 가능한 이유는 자바스크립트에서 함수는 호출되는 환경과 관계없이 자신이 정의된 환경을 기억하기 때문 정확히 말하면 함수는 자신의 내부 슬롯에 자신이 정의된 환경, 즉 상위 스코프에.. 2022. 8. 2.
[Books] 일 잘하는 개발자가 되는 방법? - 「함께 자라기, 에자일로 가는 길(김창준 저)」 일 잘하는 개발자는 어떤 개발자일까요? 이 질문에 대해 우리가 흔히 내리는 결론은 '일 잘하는 사람은 전문성을 가진 사람, 그 분야에서 오래 일한 사람일 것이다.'입니다. 이 책을 읽기 전의 저의 생각도 크게 다르지 않았습니다. 부트캠프 혹은 스터디에서 저보다 오래 개발을 한 사람의 말을 절대적으로 신뢰하였고, 누군가에게 질문을 할 때 '당연히 저 사람은 이 문제에 대한 정답을 알고 있겠지', '당연히 A라는 기술에 대해서 나보다 훨씬 더 잘 알겠지'라는 생각을 하며 그분의 피드백을 한 치의 의심과 고민 없이 받아들이곤 했던 기억이 있습니다. 하지만 이 책은 이러한 통념을 정면으로 반박합니다. 대다수의 조직에서 직원을 뽑는 데 중요하다고 생각하는 요소가 많은 경우 별로 중요하지 않고, 중요하지 않다고 .. 2022. 6. 21.