PS
제코베 JS 100제 / 78 / 원형 테이블
기린은 중국집에서 친구들과 만나기로 하고, 음식을 시켰습니다. 음식이 나오고 한참을 기다렸지만 만나기로 한 친구 2명이 오지 않았어요. 기린은 배가 너무 고파 혼자 음식을 먹기 시작합니다. 원형 테이블에는 N개의 음식들이 있습니다. 한 개의 음식을 다 먹으면 그 음식의 시계방향으로 K 번째 음식을 먹습니다. 하지만 아직 오지 않은 친구들을 위해 2개의 접시를 남겨야 합니다. 마지막으로 남는 음식은 어떤 접시인가요? /** * 첫 번째 가져가는 음식이 K 번째 음식이며 * * 나머지는 첫 번째 음식으로부터 시계방향으로 가져간다 * * @param {Number} N 음식의 개수 * @param {Number} K 먹은 음식 다음으로 K번째 음식을 먹는다 * @returns {Number[]} 남은 음식들의..
제코베 JS 100제 / 77 / 가장 긴 공통 부분 문자열
가장 긴 공통 부분 문자열(Longest Common Subsequence)이란 A, B 두 문자열이 주어졌을 때 두 문자열에 공통으로 들어 있는 요소로 만들 수 있는 가장 긴 부분문자열을 말합니다. 여기서 부분문자열이란 다른 문자열에서 몇몇의 문자가 빠져 있어도 순서가 바뀌지 않은 열을 말합니다. 예를 들어 S1 = ['T', 'H', 'I', 'S', 'I', 'S', 'S', 'T', 'R', 'I', 'N', 'G', 'S'] S2 = ['T', 'H', 'I', 'S', 'I', 'S']라는 두 문자열이 있을 때 둘 사이의 부분 공통 문자열의 길이는 ['T', 'H', 'I', 'S', 'I', 'S']의 6개가 됩니다. 이처럼 두 문자열이 주어지면 가장 긴 부분 공통 문자열의 길이를 반환하는 ..
제코베 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..