Header Banner
Kakao Logo

TECH.KAKAO.GG

기술 자료

다양한 기술 자료를 찾아보세요.

추천 카테고리

Algorithm

알고리즘 학습 및 문제 해결

더 알아보기

최근 게시글

프로그래머스 배열 조각하기

정수 배열 arr와 query가 주어집니다. query를 순회하면서 다음 작업을 반복합니다. 짝수 인덱스에서는 arr에서 query[i]번 인덱스를 제외하고 배열의 query[i]번 인덱스 뒷부분을 잘라서 버립니다. 홀수 인덱스에서는 arr에서 query[i]번 인덱스는 제외하고 배열의 query[i]번 인덱스 앞부분을 잘라서 버립니다. 위 작업을 마친 후 남은 arr의 부분 배열을 return 하는 solution 함수를 완성해 주세요. function solution(arr, query) { for (let i = 0; i < query.length; i++) { if (i % 2 === 0) { arr = arr.slice(0, query[i] + 1); } else { arr = arr.slice(query[i]); } } return arr; } for (let i = 0; i < query.length; i++): query 배열을 순회합니다. 여기서 i는 query의 현재 인덱스입니다. if (i % 2 === 0): query의 현재 인덱스 i가 짝수일 경우 (0, 2, 4, ...). arr = arr.slice(0, query[i] + 1);: arr 배열을 0번 인덱스부터 query[i]번 인덱스까지 (exclusive of query[i] + 1) 자릅니다. 이렇게 하면 query[i]번 인덱스 이후의 모든 요소가 버려집니다. else: query의 현재 인덱스 i가 홀수일 경우 (1, 3, 5, ...). arr = arr.slice(query[i]);: arr 배열을 query[i]번 인덱스부터 마지막까지 자릅니다. 이렇게 하면 query[i]번 인덱스 이전의 모든 요소가 버려집니다. return arr;: 모든 작업을 마친 후 최종적으로 남은 arr의 부분 배열을 반환합니다

프로그래머스 배열 만들기 2

문제 설명 정수 l과 r이 주어졌을 때, l 이상 r 이하의 정수 중에서 숫자 "0"과 "5"로만 이루어진 모든 정수를 오름차순으로 저장한 배열을 반환하라.조건을 만족하는 정수가 없을 경우 [-1]을 반환한다. 문제 풀이 핵심 아이디어 숫자를 직접 생성해보되, 0과 5로만 이루어진 숫자만 생성한다. 숫자를 문자열로 이어 붙이는 방식으로 탐색(DFS)하며, 조건에 맞는 경우만 수집한다. 시작점은 "5"부터 재귀적으로 "0"과 "5"를 붙여 나가며 l num r 인 숫자들을 결과 배열에 추가한다. JavaScript 구현 function solution(l, r) { const answer = []; function genNum(current) { const num = Number(current); if (num > r) return; if (num >= l) answer.push(num); genNum(current + "0"); genNum(current + "5"); } genNum("5"); // 조건에 맞는 시작 숫자 answer.sort((a, b) => a - b); return answer.length ? answer : [-1]; } 해설 genNum은 문자열로 숫자를 만들며 "0" 또는 "5"만을 덧붙인다. 만들어진 숫자가 r보다 크면 더 이상 탐색하지 않음으로써 가지치기를 한다. 이 방식은 0~1,000,000 범위 내에서 0과 5로만 이루어진 수의 개수가 제한적이므로 성능적으로도 효율적이다. 중요한 점은 초기 호출 시 l을 넣는 것이 아니라 조건을 만족하는 숫자("5")부터 시작해야 한다는 것

프로그래머스 전국 대회 선발 고사

문제 설명 목표: rank 배열에는 각 학생의 등수, attendance 배열에는 대회 참가 가능 여부가 주어졌을 때, 참석 가능한 학생들 중 상위 3명을 선발 function solution(rank, attendance) { // 1. 참가 가능한 학생 (index와 rank 함께 저장) const candidates = []; for (let i = 0; i < rank.length; i++) { if (attendance[i]) { candidates.push({ index: i, rank: rank[i] }); } } // 2. rank 기준 오름차순 정렬 candidates.sort((a, b) => a.rank - b.rank); // 3. 상위 3명 뽑아서 인덱스 추출 const a = candidates[0].index; const b = candidates[1].index; const c = candidates[2].index; // 4. 정답 계산 return 10000 * a + 100 * b + c; } 문제 핵심 핵심 키워드 ✔️ 인덱스(index)와 등수(rank) 맵핑✔️ 필터링과 정렬✔️ 선발된 학생 번호(index) 활용한 수식 계산 문제 풀이 흐름 요약 참석 가능한 학생 필터링 attendance[i] === true인 학생만 선별 해당 학생들만 등수 기준 정렬 rank 값이 낮을수록 높은 순위 정렬된 결과에서 상위 3명 추출 각각의 index가 a, b, c 공식에 맞춰 계산 후 리턴 10000 * a + 100 * b + c

카테고리 모음

추가되었으면 하는 내용이 있으신가요?

기술 자료에 대한 요청이나 제안이 있으시면 관리자에게 연락해 주세요.

문의하기