[알고리즘 연습] 프로그래머스 요격 시스템 (LEVEL 2, 자바스크립트)
·
알고리즘 연습
문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 현재 폭격 미사일이 이전 폭격 미사일의 범위 안에 있을 때, 이전 폭격 미사일의 범위와 겹칠 때, 이전 폭격 미사일의 범위와 아에 겹치지 않을 때 3가지 케이스를 고려하여 기준 범위를 계속 변경하면 된다. 제일 처음 비교할 기준 범위가 필요하기에 초기 기준 범위는 [-1, 100000001]로 설정한다. 이때 주의할 점은 반드시 targets 값을 시작점 기준으로 오름차순 정렬해준다. 범위 안에 있을 때 : 기준 범위를 현재 폭격 미사일의 범위로 변경한다. 범위가 겹칠 때 : 기준 범위의 시작점을 ..
[알고리즘 연습] 프로그래머스 도넛과 막대 그래프 (LEVEL 2, 자바스크립트)
·
알고리즘 연습
문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 생성한 노드, 도넛 모양 그래프 개수, 막대 모양 그래프 개수, 8자 모양 그래프 개수를 구하기 위해 이들을 각각 구분할 수 있는 수단이 필요했다. 그 수단은 바로 각 노드에서 들어오는 간선(in)의 개수와 나가는 간선(out)의 개수였다. 생성한 노드: in === 0 out >=2, out이 2개 이상인 이유는 모든 그래프 개수의 합은 2이상이고 생성한 노드는 모든 그래프와 연결되어 있다. 막대 모양 그래프: out === 0, out이 0인 노드는 막대 모양 그래프의 최상단 노드 밖에 없다. ..
[알고리즘 연습] 프로그래머스 튜플 (LEVEL 2, 자바스크립트)
·
알고리즘 연습
문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 문자열 s에서 불필요한 문자들을 모두 제거해주고 원소의 길이를 기준으로 오름차순을 수행한다. 길이가 짧은 원소부터 차례대로 정답 배열에 넣어준다. 이때 중복되지 않는 값만 넣어주면 된다. 소스 코드 function solution(s) { const answer = []; const tempArr = s.split('},{'); const len = tempArr.length; tempArr[0] = tempArr[0].replace('{{', ''); tempArr[len - 1] = tempAr..
[알고리즘 연습] 프로그래머스 메뉴 리뉴얼 (LEVEL 2, 자바스크립트)
·
알고리즘 연습
문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 단품 메뉴를 조합한 코스 요리의 개수를 구할 때 편하게 구하기 위해 orders의 모든 원소를 오름차순으로 정렬한다. course과 orders를 순회하며 재귀를 통해 정해진 단품 메뉴 개수를 만족하는 코스 요리의 조합을 구한다. 정해진 단품 메뉴 개수를 만족하는 코스 요리 중 가장 많이 주문한 것을 선택한다. 이 때 가장 많이 주문한 것이 2개 이상일 수도 있다. 가장 많이 주문한 것이 1개 이하일 때는 선택하지 않는다. 소스 코드 function solution(orders, course) { ..
[알고리즘 연습] 프로그래머스 순위 검색 (LEVEL 2, 자바스크립트)
·
알고리즘 연습
문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 문자열 조작, 재귀, 이분 탐색을 모두 구현해서 풀어야 하는 문제로 단계적으로 차근차근 구현하면 어렵지 않게 풀 수 있는 문제였다. 재귀를 통해 조건의 각 자리에 한번은 조건 자체를 한번은 '-' 를 대입하여 모든 경우의 수를 구해준다. (시간 초과가 발생하지 않는다.) 이때 각 조건에 대한 점수는 배열 형태로 저장하고 오름차순으로 정렬한다. query 배열을 순회하며 조건에 해당하는 점수 배열에서 이분 탐색을 수행하여 점수의 하한선을 구한다. query 배열에 있는 조건이 아까 구한 경우의 수에 ..
[알고리즘 연습] 프로그래머스 거리두기 확인하기 (LEVEL 2, 자바스크립트)
·
알고리즘 연습
문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 대기실의 갯수와 한 대기실의 행과 열의 최댓값이 5로 크지 않았기 때문에 for문을 중첩해서 풀어도 시간초과가 나지 않는다. 대기실 배열을 순회하면서 해당 지점에 사람(P)이 있을 때, 8방향을 모두 탐색하며 거리두기를 확인한다. 상하좌우를 해당 지점부터 2칸을 확인하고 대각선 방향은 해당 지점부터 1칸을 확인한다. 대각선 방향의 경우 두 사람이 맨해튼 거리를 유지하고 있지 않다면 행 기준 더 위에 있는 사람의 아래에 파티션, 행 기준 더 아래에 있는 사람의 위에 파티션이 있는지 확인해야 한다. 이..
[알고리즘 연습] 프로그래머스 k진수에서 소수 개수 구하기 (LEVEL 2, 자바스크립트)
·
알고리즘 연습
문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 해당 문제를 풀어본 결과 패턴 파악만 끝나면 엄청 쉽게 풀 수 있는 문제였다. 자바스크립트의 경우 toString() 함수로 쉽게 n을 k진수로 변경할 수 있다. 변경 후 '0'을 기준으로 문자열을 스플릿해준다. 이 때 빈문자열은 제거해준다. 스플릿한 문자열을 순회하며 소수를 찾아서 발견하면 answer += 1을 해준다. 소스 코드 function solution(n, k) { let answer = 0; const arr = n.toString(k).split('0').filter(el => e..
[알고리즘 연습] 프로그래머스 주차 요금 계산 (LEVEL 2, 자바스크립트)
·
알고리즘 연습
문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 시간에 따른 전개와 문자열 조작 등으로 약간은 복잡할 수 있는 구현 문제였다. 그러나 차가 입차하고 출차하는 흐름 및 패턴만 파악하면 쉽게 풀 수 있었다. 우선, 차가 입차할 때는 입차한 시간을 저장하고 해당 차량이 나갔는지 파악할 수 있게 차량 번호를 저장하여 추적할 수 있게 한다. 차가 출차할 때는 입차 기록과 출차 기록을 통해 차량이 주차장에 있었던 시간을 구해주고 출차를 확인했기 때문에 추적도 제외시켜준다. 입출차 내역을 모두 순회했을 때 추적한 배열을 통해 23:59까지 출차하지 않은 차량..
[알고리즘 연습] 프로그래머스 양궁대회 (LEVEL 2, 자바스크립트)
·
알고리즘 연습
문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 양궁게임에 몰입해서 게임에서 있을 수 있는 케이스를 파악 후 의식의 흐름대로 풀면 쉽게 풀 수 있는 문제였다. n의 최대값이 10으로 재귀를 통해 모든 경우의 수를 구해서 그 중 두 플레이어의 점수 차가 가장 큰 경우를 구하면 된다. 이 때 주의할 점은 2가지가 있었다. 라이언이 큰 점수 차이로 우승할 수 있는 방법이 여러 가지 일 경우, 가장 낮은 점수를 더 많이 맞힌 경우를 선택한다. 이 문제는 재귀를 수행할 때 낮은 점수부터 수행하면 해결된다. 화살의 개수가 남는 경우가 존재한다. 이 문제는 ..
[알고리즘 연습] 프로그래머스 두 큐 합 같게 만들기 (LEVEL 2, 자바스크립트)
·
알고리즘 연습
문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 해당 문제를 자바스크립트로 풀 때 2개의 Queue를 사용해 shift/push로 구현하면 몇 개의 테스트 케이스에서 시간 초과가 발생하기 때문에 1개의 Queue를 사용한다. 고려해야 할 사항은 크게 2가지가 있었다. Queue의 상태에 따라 어떤 Queue에서 원소를 추출해서 어떤 Queue에 추가할 것인가 두 Queue의 합계가 같을 수 없는 경우 언제 반복문을 멈출 것인가 첫 번째 사항은 합계가 큰 Queue에서 원소를 추출하여 합계가 작은 Queue에 추가하는 방식으로 구현한다. (그리디)..