알고리즘

알고리즘 연습

[알고리즘 연습] 프로그래머스 요격 시스템 (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 풀이 문제를 읽고 바로 중복 순열을 떠올렸다면 엄청 간단하게 풀 수 있는 문제였다. 이모티콘의 할인된 금액을 구해야 하고 서로 다른 이모티콘이 동일한 할인률을 가질 수 있기 때문에 할인률에 대한 중복 순열을 구해준다. (이모티콘이 최대 7개라서 시간 초과가 발생하지 않는다.) 중복 순열 각 케이스와 유저 배열을 순회하면 각 케이스에 대한 이모티콘 플러스 서비스 가입자 수와 이모티콘 판매액을 구한다. 순회하며 구한 정답 배열을 가입자 수를 기준으로 내림차순하며, 가입자 수가 동일한 경우 판매액을 기준으로 ..

알고리즘 연습

[알고리즘 연습] 프로그래머스 택배 배달과 수거하기 (LEVEL 2, 자바스크립트)

문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 인터넷에 우선순위 큐, 그리디 등 다양한 알고리즘 문제라고 소개되어 있지만 내가 스스로 풀어본 결과 약간의 센스가 필요한 단순한 구현 문제 같았다. 해당 문제를 풀 때 주의해야 할 점은 2가지가 있었다. 코드 초반에 deliveries 배열과 pickups 배열을 뒤에서부터 순회하면서 두 배열의 초기값이 모두 0인 경우 n을 줄여줘야 한다. (테스트 2) 시간 초과가 나지 않게 deliveries 배열과 pickups 배열의 맨 뒤 인덱스 값이 0이 될 경우 바로 pop 해준다. (테스트 16) 전..

산본개발자
'알고리즘' 태그의 글 목록