코딩 테스트

문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr핵심 아이디어카운팅 객체 만들기tangerineSizes[size]: 현재 요소의 개수를 가져온다.|| 0: 해당 요소가 아직 등장하지 않은 경우, 기본값 0을 설정한다.+ 1: 현재 요소의 개수를 1 증가시킨다.for (const size of tangerine) { tangerineSizes[size] = (tangerineSizes[size] || 0) + 1;}정답function solution(k, tangerine) { let tangerineSizes = {}; let totalCount = 0; let answer = 0; for..
문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr핵심 아이디어left와 right 포인터를 사용하여 배열의 양끝에서 접근한다.조건 확인: people[left]와 people[right]의 합이 limit 이하인 경우 두 사람을 한 번에 태운다. 그렇지 않으면 left에 해당하는 무거운 사람만 태운다.left++와 right--로 배열의 범위를 줄여 나가면서 필요한 보트의 개수를 최소화한다.left 정답function solution(people, limit) { people.sort((a, b) => b - a); let answer = 0; let left = 0; let right = p..
문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr핵심 아이디어탐욕법(Greedy Algorithm)은 문제를 해결할 때 각 단계에서 그 순간에 최선이라고 생각되는 선택을 하는 방법이다. 매 선택이 문제 전체의 최적해로 이어진다고 가정하고 진행하는 방식이다.스택을 이용해 주어진 숫자를 앞자리에서부터 하나씩 비교해가며 큰 것만 남긴다.정답 자리수까지 해당 작업을 반복하고 남은 숫자를 문자열로 바꾼다.스택에서 필요한 숫자만 남겨 최종적으로 k개만큼 제거된 결과를 반환한다.정답function solution(number, k) { let stack = []; for (const num of number)..
문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr정답// dfs 사용 Xfunction solution(k, dungeons) { let answer = []; // 탐험한 던전들을 저장하는 배열 (탐험 횟수를 세기 위한 용도) while (k > 0) { // 현재 피로도가 0보다 큰 동안 반복 // 각 던전마다 [최소 필요 피로도, 탐험 가능한 던전 수, 던전 인덱스] 배열을 생성 const choices = dungeons .map((dungeon, index) => { const [minFatigue, consumeFatigue] = dungeon; // 던..
문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr핵심 아이디어다리를 나타내는 배열을 길이만큼 0으로 초기화한다.현재 다리 위 트럭들의 무게를 추적하는 변수를 0으로 설정한다.전체 경과 시간을 추적하는 변수를 0으로 설정한다.모든 트럭이 다리를 건너거나 현재 다리 위에 트럭이 없을 때까지 반복문을 실행한다.매 반복마다 1초가 증가한다.다리에서 가장 앞에 있는 트럭(또는 0)을 제거하고 그 트럭의 무게를 현재 무게에서 뺀다.대기 중인 트럭이 남아 있고, 현재 다리 위 트럭들의 무게 합과 대기 중인 첫 번째 트럭의 무게를 더했을 때 허용 무게 이하이면 그 트럭을 다리로 옮긴다.그렇지 않으면 0을 다리에 추..
문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr핵심 아이디어결과 배열 초기화: answer 배열을 prices 길이만큼 0으로 초기화한다.스택을 사용한 가격 비교: 주식 가격을 순차적으로 탐색하며, 이전 가격과 비교하기 위해 인덱스를 스택에 저장한다.가격이 하락할 때 처리: 현재 주식 가격이 스택에 저장된 이전 주식 가격보다 낮으면, 스택에서 인덱스를 꺼내고, 그 차이를 계산해 answer 배열에 기록한다.남은 스택 처리: 스택에 남아 있는 인덱스들은 끝까지 가격이 떨어지지 않은 경우로, 그 차이를 계산해 answer 배열에 기록한다.결과 반환: 모든 계산이 완료된 후 answer 배열을 반환한다...
문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr핵심 아이디어입력 배열을 순차적으로 탐색: i를 사용해 배열을 처음부터 끝까지 순회.중복 제거: 현재 값과 스택의 마지막 값을 비교해, 중복이 아닐 때만 스택에 추가.스택 사용: 중복되지 않은 값을 stack.push()로 스택에 쌓고, 조건에 따라 추가하지 않음.최종 결과 반환: 중복된 값들이 제거된 stack을 반환.정답function solution(arr) { let stack = []; let i = 0; while (i
문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr핵심 아이디어각 프로세스의 우선순위와 인덱스를 객체로 저장해 큐를 생성한다.큐는 먼저 들어온 프로세스가 먼저 처리되는 선입선출(FIFO) 방식으로 작동한다.큐에서 첫 번째 프로세스를 꺼낸 후, 남은 프로세스 중 더 높은 우선순위가 있는지 some 메서드를 사용해 확인한다.더 높은 우선순위의 프로세스가 있으면 꺼낸 프로세스를 다시 큐에 넣는다.더 높은 우선순위가 없으면 해당 프로세스를 실행하고, 실행 순서를 기록한다.기록된 실행 순서 중에서 원하는 location의 프로세스가 몇 번째로 실행되었는지 반환한다.정..
문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr핵심 아이디어논문 인용 횟수를 내림차순으로 정렬한다.정렬된 배열에서 인덱스와 해당 인덱스의 인용 횟수를 비교한다.인용 횟수가 인덱스보다 큰 경우에만 h-index 후보를 증가시킨다.조건을 만족하지 않는 시점에서 h-index 값을 반환한다.정답function solution(citations) { citations.sort((a, b) => b - a); let answer = 0; while (answer
문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr핵심 아이디어정렬 기준: 숫자 a, b에 대해 String(a) + String(b)와 String(b) + String(a)를 비교하고, localeCompare를 사용하여 더 큰 쪽이 먼저 오도록 정렬한다.최종 결과: 정렬된 숫자 배열을 문자열로 변환해 이어 붙여 가장 큰 수를 만든다.예외 처리: 배열에 있는 모든 숫자가 0일 때는 "0"을 반환한다.정답function solution(numbers) { numbers.sort((a, b) => { const order1 = String(a) + S..
문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr핵심 아이디어장르별로 노래와 재생 횟수 분류:songsByGenre 객체에 각 장르별로 노래의 재생 횟수와 인덱스를 저장.genrePlayCount 객체에 각 장르의 총 재생 횟수를 저장.장르 정렬:genrePlayCount를 기준으로 각 장르의 총 재생 횟수를 내림차순으로 정렬한 배열 sortedGenres를 생성.장르별로 노래 정렬 및 상위 2개 선택:각 장르에서 노래를 재생 횟수 기준으로 정렬하고, 재생 횟수가 동일하면 인덱스 순으로 정렬.상위 2개의 노래를 선택해 answer 배열에 저장.결과 반환:a..
문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr핵심 아이디어의류 데이터 구조화:clothes 배열을 순회해 각 의류 아이템의 타입별로 개수를 세는 객체 clothesByType을 생성.타입별 개수 세기:각 아이템에서 타입을 추출해 해당 타입의 개수를 증가시킴.타입이 처음 등장할 경우에는 1로 초기화.조합 수 계산:Object.values(clothesByType)를 사용해 타입별 의류의 개수 배열을 생성.reduce를 사용해 각 타입의 개수에 1을 더한 후 곱해 전체 조합 수를 계산.초기값을 1로 설정해 곱셈을 진행.아무것도 착용하지 않는 경우 제외:최종..
문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr핵심 아이디어전화번호 목록을 저장하기 위해 phone_book 배열의 각 전화번호를 키로 가지는 해시 테이블인 phoneMap을 생성한다. 해시를 사용하여 전화번호 검색을 O(1) 시간 복잡도로 수행할 수 있다.각 전화번호에 대해 1자리부터 시작하여 마지막 자리 전까지의 모든 접두사를 생성하고, 해당 접두사가 phoneMap에 존재하는지 확인한다.만약 접두사가 phoneMap에 존재한다면, 해당 전화번호가 다른 전화번호의 접두사임을 의미하므로 false를 반환한다.모든 접두사 검사가 끝났다면, 모든 전화번호에..
문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr핵심 아이디어배열을 사용하지 않고 구간만 계산: 모든 아파트에 대해 배열을 만들지 않고, 기지국이 설치된 범위와 그 사이의 전파가 닿지 않는 구간을 계산한다.전파가 닿지 않는 구간을 기준으로 최소 기지국 계산: 기지국이 닿지 않는 구간의 길이를 기준으로 필요한 기지국 개수를 계산하여 효율성을 높인다.기지국 사이의 전파가 닿지 않는 구간 처리: 각 기지국 사이와 마지막 기지국 이후에 전파가 도달하지 않는 구간에 대해 필요한 기지국을 계산한다.정답function solution(n, stations, w) { ..
문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 핵심 아이디어목표 스킬 트리를 확인할 때, 목표 스킬 트리에서 아직 배우지 않은 스킬이 있어도 순서만 맞으면 유효한 스킬 트리로 간주한다.목표 스킬 트리와 관련 없는 스킬은 검사 과정에서 무시한다.배우려는 스킬(learned_skill)이 목표 스킬 트리의 첫 번째 스킬과 일치하지 않으면 해당 스킬 트리는 유효하지 않다. 일치할 경우, 목표 스킬 트리의 첫 번째 스킬을 제거하고 다음 스킬로 진행한다.이러한 과정을 스킬 트리의 모든 스킬에 대해 반복해 최종적으로 유효한 스킬 트리의 개수를 계산한다.정답func..
문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr핵심 아이디어이 코드는 최소한의 점프를 사용하여 건전지 사용량을 최소화한다. 건전지는 점프할 때만 소모되므로, 최대한 점프를 피하고 순간이동을 활용하는 것이 효율적이다.n % 2 === 0일 때 n /= 2는 현재 거리가 짝수일 경우 순간이동을 통해 건전지 사용 없이 이동할 수 있음을 의미한다. 이는 효율적인 이동 방법이다.n % 2 !== 0일 때는 1칸 점프를 해야 하며, 이때 n -= 1을 통해 홀수를 짝수로 만들어 이후에 순간이동이 가능하게 한다. 이 과정에서 점프 횟수가 증가하고, count는 점프한..
문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 핵심 아이디어배열 A와 B는 오름차순으로 정렬된다. 이를 통해 작은 값부터 차례대로 비교할 수 있다.A의 각 원소 a를 순회하면서, B에서 a보다 큰 값을 찾기 위해 포인터 i를 사용한다.while 루프는 B[i]가 a보다 작거나 같으면 i를 증가시켜 a보다 큰 값을 찾는다.a보다 큰 값 B[i]를 찾으면, 그 값을 매칭한 것으로 간주하고 answer를 1 증가시키고, i를 다시 증가시켜 다음 비교에 사용한다.두 배열을 모두 순회한 후, 조건을 만족하는 쌍의 개수인 answer를 반환한다.정답function..
문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr핵심 아이디어현재 위치를 추적하기 위해 currentPath 배열을 사용하며, 초기값은 (0, 0)으로 설정된다.입력된 문자열 dirs를 순회하며 각 방향(U, D, L, R)에 따라 현재 위치를 업데이트한다. 방향에 따라 y 좌표를 증가 또는 감소시키거나, x 좌표를 증가 또는 감소시킨다.새로운 위치가 (-5, -5)와 (5, 5) 경계를 넘어가지 않도록 검증하고, 경계를 넘으면 해당 이동을 무시한다.이동 전의 좌표와 이동 후의 좌표를 기반으로 형식을 지정해 경로를 문자열 형태로 만든다. 이 경로는 최소값과..
문제 10798번: 세로읽기 총 다섯줄의 입력이 주어진다. 각 줄에는 최소 1개, 최대 15개의 글자들이 빈칸 없이 연속으로 주어진다. 주어지는 글자는 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’ www.acmicpc.net 정답 const fs = require("fs"); const filePath = process.platform === "linux" ? "/dev/stdin" : "test.txt"; const input = fs .readFileSync(filePath) .toString() .split("\n") .map(_ => _.split("")); // 배열에서 가장 긴 문자열의 길이 구하기 const maxStrNum = Math.max.apply( n..
문제 2738번: 행렬 덧셈 첫째 줄에 행렬의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 차례대로 주어진다. 이어서 N개의 줄에 행렬 B의 원소 M개가 차례대로 주어진다. N과 M은 100보다 작거나 같 www.acmicpc.net 정답 const fs = require("fs"); const filePath = process.platform === "linux" ? "/dev/stdin" : "test.txt"; const input = fs .readFileSync(filePath) .toString() .split("\n") .map(str => str.split(" ").map(Number)); // 첫 번째 행을 A, B의 행렬 크기를 알려주는 변수로 따로 빼기..