프로그래머스 18

[프로그래머스] 택배 상자 꺼내기 (JS)

문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이(1) 2차원 배열의 행(row) 개수를 계산한다.주어진 상자 개수(n)와 한 줄에 배치할 수 있는 개수(w)를 이용해 전체 행(row) 수를 구한다.(2) 택배 상자를 저장할 2차원 배열을 생성하고 0으로 초기화한다.w개의 열을 가진 row개의 행을 만들어, 모든 값을 초기 상태(0)로 채운다.(3) 짝수 행은 정방향, 홀수 행은 역방향으로 1부터 n까지 순차적으로 저장한다.상자를 채울 때, 짝수 행은 왼쪽에서 오른쪽(정방향), 홀수 행은 오른쪽에서 왼쪽(역방향) 으로 채운다.이 과정에서 찾고자 하는 숫자(num)가 등장하면, 해당 열(column..

코딩테스트 2025.03.12

[프로그래머스] 유연근무제 (JS)

문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이(1) startday 값을 기준으로 주말의 인덱스를 구한다. (주말 출근은 고려할 필요가 없음)(2) 출근 기록이 담긴 배열을 순회하며, 각 출근 희망 시각에 10분을 더한 시간을 계산한다. (예: 855 + 10 = 905가 되도록 addMinutes 함수를 사용)(3) 주말 출근을 제외하고, 모든 출근 시간이 출근 희망 시각 + 10분 이내라면 카운트를 1씩 증가시킨다.function solution(schedules, timelogs, startday) { let answer = 0; const saturdayIdx = st..

코딩테스트 2025.03.11

[프로그래머스] n^2 배열 자르기 (JS)

문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이  (1) 문제에서 요구한 2차원 배열을 초기화한다.  (2) flat 메서드를 이용하여 1차원 배열로 변환한다.  (3) 요구사항에 맞게 left에서 right까지 잘라서 답을 return한다. 시간초과2차원 배열을 생성할 때, 2차원 배열을 1차원 배열로 변환할 때 각각 O(n^2)의 시간이 소요된다..function solution(n, left, right) { const answer = []; const matrix = Array.from({ length: n }, (_, i) => Array.from({ len..

코딩테스트 2025.01.01

[프로그래머스] 이진 변환 반복하기 (JS)

문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이  (1) 문자열 s에서 0의 갯수를 구하기 위해 배열로 변환 -> filter 메서드를 이용하여 length를 구한다.  (2) 1만 추출하여 2진수로 변한하기 위해 toString 메서드를 사용한다.  (3) s가 1이 될 때까지 반복한 후 2진수 변환 횟수, 지운 2의 총 갯수를 반환한다.function solution(s) { let tryCnt = zeroCnt = 0; while (s !== "1") { s = s.split(""); zeroCnt += s.filter(num => num ===..

코딩테스트 2025.01.01

[프로그래머스] 캐시 (JS)

문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이  (1) 캐시 배열을 생성한다.  (2) 캐시에 들어 있지 않은 도시는 실행 시간 5초를 더해주고, 캐시의 가장 최근 사용한 위치에 추가한다. 캐시 사이즈 초과를 막기 위해 가장 오랫동안 사용되지 않은 항목을 우선적으로 제거한다.  (3) 캐시에 들어 있는 도시는 실행 시간 1초를 더해주고, 캐시의 가장 최근 사용한 위치에 추가한다.function solution(cacheSize, cities) { if (cacheSize === 0) return cities.length * 5; const cache = []; let ..

코딩테스트 2024.11.24

[프로그래머스] 가장 많이 받은 선물 (JS)

문제https://school.programmers.co.kr/learn/courses/30/lessons/258712 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이 (1) 주고 받은 선물과 선물 지수를 객체로 생성 후 셋팅한다. (2) 준 사람의 선물 갯수와 받은 사람의 선물 갯수를 비교하기 위해 배열로 변환 후 반복문을 실행한다. (3) 준 선물과 받은 선물의 갯수를 비교하여 A가 받을 선물의 개수를 1씩 늘린다. (4) 주고 받은 선물 갯수가 같을 경우 앞서 생성해 둔 선물 지수로 비교한다. (5) 최종적으로 가장 많은 선물을 받는 사람의 선물 갯수를 return한다.function..

코딩테스트 2024.11.23

[프로그래머스] 테이블 해시 함수 (JS)

문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이  (1) 조건에 맞게 data를 정렬한다.  (2) 정렬된 data에서 각 튜플의 요소를 인덱스 i + 1로 나눈 나머지를 구하고, 그 나머지들을 모두 합산한다.  (3) XOR 연산자 ^을 사용하여 answer를 구한다.function solution(data, col, row_begin, row_end) { let answer = 0; data.sort((a, b) => { if (a[col - 1] === b[col - 1]) return b[0] - a[0]; return a[col - 1] - ..

코딩테스트 2024.11.20

[프로그래머스] 숫자 카드 나누기 (JS)

문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이  (1) 비교할 마지막 숫자를 구하기 위해 두 배열의 최대 정수를 구한다. (Math.max 시간초과 -> sort로 변경)  (2) every 함수를 이용하여 조건에 맞는 답을 구한다.function solution(arrayA, arrayB) { const unionArr = [...arrayA, ...arrayB].sort((a, b) => a - b); const limitNum = unionArr[unionArr.length - 1]; let answer = 0; for (let i = 2; i num % ..

코딩테스트 2024.11.20

[프로그래머스] 과제 진행하기 (JS)

문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이  (1) 과제 시작시간 기준으로 오름차순 정렬 후 비교하기 편하게 분(정수)으로 치환한다.  (2) (시작시간 + 소요시간)과 다음 과제의 시작시간을 비교하여 과제 완료가 가능하면 answer에 push한다.그렇지 않으면 과제를 중단하고 남은 시간과 함께 stopPlan에 push한다.  (3) 과제 완료가 가능한 경우 다음 과제의 시작 시간과, 중단된 과제를 저장하고 있는 stotPlan을 이용하여 최근 과제부터 순차적으로 수행한다. function solution(plans) { const answer = []; const stop..

코딩테스트 2024.11.16

[프로그래머스] 뉴스 클러스터링 (JS)

문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이  (1) 비교할 문자열을 소문자로 통일시킨 후 알파벳으로만 이루어진 문자열인지 검사하여 배열에 push한다.  (2) 배열의 filter 메서드와 concat 메서드를 사용하여 교집합, 합집합을 구한다. temp 배열 생성 후 교집합에 포함된 문자열은 제거한다. (합집합을 구할 때 중복 문자열이 들어가는 것을 방지하기 위해)   (3) 문제 조건에 맞게 65536을 곱한 후에 소수점 아래를 버리고 정수만 return한다.function solution(str1, str2) { const leftStr = []; const rightSt..

코딩테스트 2024.11.03