끄적끄적 코딩
[Javascript] 프로그래머스 - 최댓값과 최솟값
알고리즘 2025. 1. 4. 13:26

문제 설명문자열 s에는 공백으로 구분된 여러 숫자가 저장되어 있습니다. 이 숫자들 중 최소값과 최대값을 찾아, 이를 "(최소값) (최대값)" 형태의 문자열로 반환하는 함수를 작성하세요.제한 조건s는 공백으로 구분된 두 개 이상의 정수를 포함합니다.해결 방법알고리즘: 순차 탐색문자열 분리 및 변환문자열 s를 공백 기준으로 분리한 후, 각 요소를 정수로 변환하여 배열로 만듭니다.최소값과 최대값 탐색배열을 순회하며 각 요소를 비교해 최소값과 최대값을 갱신합니다.순차 탐색 방식으로 효율적으로 최소값과 최대값을 동시에 계산합니다.결과 반환최소값과 최대값을 공백으로 구분된 하나의 문자열로 반환합니다.시간 복잡도문자열 분리 및 변환문자열을 split하고 각 요소를 정수로 변환하므로 O(n)입니다.최소값과 최대값 탐색..

[Javascript] 프로그래머스 - 뒤에 있는 큰 수 찾기
알고리즘 2025. 1. 4. 00:57

문제 설명주어진 배열에서 각 요소의 "뒤에 있는 큰 수"를 찾아야 합니다."뒤에 있는 큰 수"는 현재 요소의 오른쪽에 위치한 요소 중에서 현재 요소보다 큰 값 중 첫 번째 값입니다.만약 그런 값이 없다면, 결과는 -1로 표시됩니다.예를 들어, 배열 numbers = [2, 3, 1, 5]가 주어지면 결과는 [3, 5, 5, -1]이 됩니다.제한사항1 ≤ numbers.length ≤ 1,000,000각 요소는 1 이상 1,000,000 이하의 정수입니다.해결 방법알고리즘: 스택스택 초기화스택은 배열 내 각 요소의 값과 인덱스를 저장합니다.(값, 인덱스) 형태로 저장하여 뒤에 큰 수를 효율적으로 찾습니다.배열 순회배열의 각 요소를 확인하면서 스택에 저장된 값과 비교합니다.현재 값이 스택의 최상단 값보다 크..

[Javascript] 프로그래머스 - 대충 만든 자판
알고리즘 2025. 1. 4. 00:10

문제 설명임의로 설계된 휴대폰 자판이 주어질 때, 특정 문자열을 작성하기 위해 키를 최소 몇 번 눌러야 하는지 계산하는 문제입니다.각 키는 여러 문자를 포함하며, 특정 키를 연속으로 누를 때마다 다음 문자로 넘어갑니다.작성할 수 없는 문자열이 있는 경우 결과는 -1로 표시합니다.제한사항keymap 배열1 ≤ keymap.length ≤ 1001 ≤ keymap[i].length ≤ 100각 원소는 알파벳 대문자로만 구성되며, 같은 문자가 중복될 수 있습니다.targets 배열1 ≤ targets.length ≤ 1001 ≤ targets[i].length ≤ 100각 원소는 알파벳 대문자로만 구성됩니다.해결 방법알고리즘: 배열을 활용한 효율적 탐색데이터 구조 초기화각 알파벳의 최소 키 입력 횟수를 저장할..

[Javascript] 프로그래머스 - 가장 가까운 글자
알고리즘 2025. 1. 3. 03:37

문제 설명주어진 문자열 s에서 각 문자의 가장 가까운 같은 글자와의 거리를 계산하는 문제입니다.문자열을 왼쪽에서 오른쪽으로 순회하며, 이전에 등장한 같은 문자의 위치와 현재 위치의 차이를 계산합니다.이전에 같은 문자가 없으면 결과는 -1로 표시합니다.예를 들어, 문자열 s = "banana"가 주어지면 결과는 [-1, -1, -1, 2, 2, 2]가 됩니다.제한사항문자열 길이: 1 ≤ s.length ≤ 10,000문자열 구성: 영어 소문자로만 이루어져 있습니다.해결 방법알고리즘: 해시맵을 활용한 효율적 탐색데이터 구조 초기화각 문자의 마지막 등장 위치를 저장할 해시맵(Map 객체)을 생성합니다.문자열 순회문자열을 순회하며 각 문자의 인덱스를 확인합니다.이전 위치 확인: 해시맵에 문자가 이미 존재하면, ..

[Javascript] 프로그래머스 - 카드 뭉치
알고리즘 2025. 1. 3. 03:27

문제 설명두 개의 카드 더미와 목표 단어 배열이 주어집니다.각 카드 뭉치는 단어들로 구성된 배열로, 순서를 바꿀 수 없습니다.목표 단어 배열을 만들기 위해 각 카드 뭉치에서 순서대로 단어를 사용해야 합니다.한 번 사용한 카드는 다시 사용할 수 없으며, 카드를 건너뛰어 사용할 수도 없습니다.카드 뭉치의 단어를 사용해 목표 배열을 만들 수 있으면 "Yes", 만들 수 없으면 "No"를 반환합니다.제한사항 카드 뭉치와 목표 배열1 ≤ cards1.length, cards2.length ≤ 102 ≤ goal.length ≤ cards1.length + cards2.length2단어의 길이각 단어의 길이는 1 ≤ cards1[i].length, cards2[i].length, goal[i].length ≤ 10..

[Javascript] 프로그래머스 - 연속된 부분
알고리즘 2025. 1. 3. 03:18

문제 설명비내림차순으로 정렬된 수열에서 다음 조건을 만족하는 부분 수열을 찾는 문제입니다.부분 수열은 주어진 수열에서 연속된 원소들로 이루어져야 합니다.부분 수열의 합은 k여야 합니다.합이 k인 부분 수열이 여러 개인 경우:길이가 짧은 수열을 우선적으로 선택합니다.길이가 같은 경우 시작 인덱스가 작은 수열을 선택합니다.제한사항수열의 길이: 5 ≤ sequence.length ≤ 1,000,000원소의 값: 1 ≤ sequence[i] ≤ 1,000부분 수열의 합: 5 ≤ k ≤ 1,000,000,000k는 항상 수열의 부분 수열로 만들 수 있는 값입니다.해결 방법알고리즘: 투 포인터포인터 초기화왼쪽 포인터(left)와 오른쪽 포인터(right)를 배열의 첫 번째 원소(인덱스 0)로 초기화합니다.현재 구간..

[Javascript] 프로그래머스 - 퍼즐 게임 챌린지
알고리즘 2025. 1. 3. 02:41

문제 설명퍼즐 게임에서 주어진 차이와 시간을 기준으로 제한 시간 내에 도전 과제를 완료하기 위한 최적의 기준값을 찾는 문제입니다.각 퍼즐의 난이도 차이는 배열 diffs로 주어집니다.각 퍼즐을 해결하는 데 소요되는 기본 시간은 배열 times로 주어집니다.제한 시간 limit 내에서 도전 과제를 완료하려면, 기준값을 적절히 조정하여 퍼즐의 난이도를 낮춰야 합니다.최적의 기준값을 계산하여 반환합니다.제한사항퍼즐 정보퍼즐 개수: diffs.length는 1 이상 100,000 이하.각 퍼즐의 난이도 차이: 1 이상 10^15 이하.각 퍼즐의 소요 시간: 1 이상 10^9 이하.제한 시간제한 시간 limit은 1 이상 10^18 이하.해결 방법알고리즘: 이진 탐색탐색 범위 설정기준값(mid)을 1부터 10^1..

[Javascript] 프로그래머스 - 덧칠하기
알고리즘 2025. 1. 3. 02:04

문제 설명어느 학교의 길이가 n미터인 벽에서 페인트가 벗겨진 구역들을 덧칠하려 합니다.벽은 1미터 단위로 나누어져 있으며, 왼쪽부터 순서대로 1번부터 n번까지 번호가 매겨져 있습니다.페인트를 칠하는 롤러의 길이는 m미터이며, 한 번 칠할 때 다음 규칙을 따라야 합니다:롤러는 벽에서 벗어나지 않아야 합니다.롤러로 구역의 일부만 포함되도록 칠할 수 없습니다.예산을 절약하기 위해 다시 칠할 구역을 최소한의 횟수로 덧칠해야 합니다.최소 횟수로 모든 필요한 구역을 덧칠하는 횟수를 계산합니다.제한사항벽의 길이와 롤러의 길이n: 1 이상 100,000 이하m: 1 이상 n 이하페인트를 다시 칠해야 하는 구역section의 길이는 1 이상 n 이하section의 원소는 1 이상 n 이하이며, 중복되지 않고 오름차순으로..

검색 태그