제코베 JS 100제

    제코베 JS 100제 / 75 / 이상한 369

    369 게임을 하는데 조금 이상한 규칙이 있습니다. 3이나 6, 9 일 때만 박수를 쳐야합니다. 예를 들어 13, 16과 같이 3과 6, 9 만으로 된 숫자가 아닐 경우엔 박수를 치지 않습니다. 수현이는 박수를 몇 번 쳤는지 확인하고 싶습니다. 36일 때 박수를 쳤다면 박수를 친 횟수는 5번입니다. n을 입력하면 박수를 몇 번 쳤는지 그 숫자를 출력해주세요. /** * 1부터 n까지의 수 중에서 각 자릿수가 3,6,9 일때만 박수를 친 횟수 * @param {Number} n 입력값 * @returns {Number} 박수를 친 횟수 */ function strange369(n) { let clapCnt = 0; let isValid = false; // 각 자릿수가 3,6,9 라면 true let se..

    제코베 JS 100제 / 74 / 최장 경로 찾기

    다음과 같이 노드의 연결 관계가 주어집니다. 입력으로는 경로를 구할 두 정점의 번호가 공백으로 구분되어 주어집니다. 우리는 이 두 정점으로 가기 위한 최대 거리를 구하고자 합니다. 최대 거리란, 정점의 중복 없이 한 정점에서 다른 정점까지 경유할 수 있는 가장 많은 간선의 수를 뜻합니다. /** * 노드의 연결관계, 시작 노드, 도착 노드를 매개변수로 받아서 * * 시작 노드에서 도착 노드로 가기 위한 최대 거리를 구하는 함수 * * @param {Object} graph 노드의 연결 관계 * @param {Number} start 시작 노드 * @param {Number} end 도착 노드 * @returns {Number} 도착 노드까지 가기위한 최장경로의 간선의 개수 */ function findT..

    제코베 JS 100제 / 73 / 최단 경로 찾기

    다음과 같이 노드의 연결 관계가 리스트 형태로 주어집니다. 그다음 경로를 구할 두 정점이 공백으로 구분되어 주어질 것입니다. 두 정점 사이를 이동할 수 있는 최단 거리를 출력하는 프로그램을 작성해 주세요. 이때 최단 거리란, 정점의 중복 없이 한 정점에서 다른 정점까지 갈 수 있는 가장 적은 간선의 수를 의미합니다. /** * 그래프와 시작노드, 도착노드를 입력받아 시작노드로부터 도착노드까지의 * * 최단 경로를 구하는 함수 * @param {Object} graph 리스트 형태로 주어진 노드의 연결 관계 * @param {String} start 시작 노드 * @param {String} end 도착 노드 * @returns {Number} 최단 거리 */ function findTheShortestP..

    제코베 JS 100제 / 72 / 너비 우선 탐색

    너비 우선 탐색이란 어떤 노드를 방문하여 확인한 후, 목표한 노드가 아니면 그 노드와 연결된 정점들 중에서 우선순위가 동일한 다른 노드를 찾고 그 순위에 없으면 그다음 순위 노드를 차례대로 찾는 방법이다. 다음과 같이 입력이 주어질 때 너비 우선 탐색을 한 순서대로 노드의 인덱스를 공백 구분으로 출력하세요. /** * 너비 우선 탐색 * @param {Object} graph 리스트 형태로 노드들의 연결 관계가 담긴 오브젝트 * @param {String} start 출발 노드(= 최상위 노드) * @returns 너비 우선 탐색을 한 순서대로 노드의 인덱스를 공백으로 구분하여 리턴 */ function BFS(graph, start) { const queue = [start]; const visited..

    제코베 JS 100제 / 71 / 깊이 우선 탐색

    깊이 우선 탐색이란 목표한 노드를 찾기 위해 가장 우선순위가 높은 노드의 자식으로 깊이 들어갔다가 목표 노드가 존재하지 않으면 처음 방문한 노드와 연결된 다른 노드부터 그 자식 노드로 파고드는 검색 방법을 말합니다. 다음과 같이 리스트 형태로 노드들의 연결 관계가 주어진다고 할 때 깊이 우선 탐색으로 이 노드들을 탐색했을 때의 순서를 공백으로 구분하여 출력하세요. /** * 깊이 우선 탐색 * @param {Object} graph 리스트 형태로 노드들의 연결 관계가 담긴 오브젝트 * @param {String} start 출발 노드(= 최상위 노드) * @returns {String} DFS 방법으로 탐색했을 때의 거치는 노드 순서 */ function DFS(graph, start) { let que..

    제코베 JS 100제 / 70 / 행렬 곱하기

    행렬 2개가 주어졌을 때 곱할 수 있는 행렬인지 확인하고 곱할 수 있다면 그 결과를 출력하고, 곱할 수 없다면 -1을 출력하는 프로그램을 만들어주세요. /** * 행렬 2개가 곱연산이 가능한지 판단하는 함수 * @param {Number[]} matrix1 * @param {Number[]} matrix2 * @returns {Boolean} 곱연산이 가능하다면 true, 불가능하다면 false 리턴 */ function isMultiplyPossible(matrix1, matrix2) { const [matrix1_row, matrix1_col] = [matrix1.length, matrix1[0].length]; const [matrix2_row, matrix2_col] = [matrix2.lengt..