PS/제코베 JS 100제
제코베 JS 100제 / 76 / 안전한 땅
전쟁이 끝난 후, A 나라에서는 폐허가 된 도시를 재건하려고 한다. 그런데 이 땅은 전쟁의 중심지였으므로 전쟁 중 매립된 지뢰가 아직도 많이 남아 있다는 것이 판명되었다. 정부는 가장 먼저 지뢰를 제거하기 위해 수색반을 꾸렸다. 수색반은 가장 효율적인 지뢰 제거가 하고 싶다. 수색반은 도시를 격자무늬로 나눠놓고 자신들이 수색할 수 있는 범위 내에 가장 많은 지뢰가 매립된 지역을 가장 먼저 작업하고 싶다. 가장 먼저 테스트 케이스의 수를 나타내는 1이상 100 이하의 자연수가 주어진다. 각 테스트 케이스의 첫 줄에는 수색할 도시의 크기 a와 수색반이 한 번에 수색 가능한 범위 b가 주어진다. (a와 b 모두 정사각형의 가로 또는 세로를 나타낸다. 예를 들어 10이 주어지면 10x10칸의 크기를 나타낸다.)..
제코베 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..