문제 출처 Lv.1 콜라 문제 문제 설명 오래전 유행했던 콜라 문제가 있습니다. 콜라 문제의 지문은 다음과 같습니다. 정답은 아무에게도 말하지 마세요. 콜라 빈 병 2개를 가져다주면 콜라 1병을 주는 마트가 있다. 빈 병 20개를 가져다주면 몇 병을 받을 수 있는가? 단, 보유 중인 빈 병이 2개 미만이면, 콜라를 받을 수 없다. 문제를 풀던 상빈이는 콜라 문제의 완벽한 해답을 찾았습니다. 상빈이가 푼 방법은 아래 그림과 같습니다. 우선 콜라 빈 병 20병을 가져가서 10병을 받습니다. 받은 10병을 모두 마신 뒤, 가져가서 5병을 받습니다. 5병 중 4병을 모두 마신 뒤 가져가서 2병을 받고, 또 2병을 모두 마신 뒤 가져가서 1병을 받습니다. 받은 1병과 5병을 받았을 때 남은 1병을 모두 마신 뒤 ..
문제 출처 Lv.1 개인정보 수집 유효기간 문제 설명 고객의 약관 동의를 얻어서 수집된 1~n번으로 분류되는 개인정보 n개가 있습니다. 약관 종류는 여러 가지 있으며 각 약관마다 개인정보 보관 유효기간이 정해져 있습니다. 당신은 각 개인정보가 어떤 약관으로 수집됐는지 알고 있습니다. 수집된 개인정보는 유효기간 전까지만 보관 가능하며, 유효기간이 지났다면 반드시 파기해야 합니다. 예를 들어, A라는 약관의 유효기간이 12 달이고, 2021년 1월 5일에 수집된 개인정보가 A약관으로 수집되었다면 해당 개인정보는 2022년 1월 4일까지 보관 가능하며 2022년 1월 5일부터 파기해야 할 개인정보입니다. 당신은 오늘 날짜로 파기해야 할 개인정보 번호들을 구하려 합니다. 모든 달은 28일까지 있다고 가정합니다...
문제 출처 Lv.1 크기가 작은 부분문자열 문제 설명 숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요. 예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다. 제한 사항 1 ≤ p의 길이 ≤ 18 p의 길이 ≤ t의 길이 ≤ 10,000 t와 p는 숫자로만 이루어진 문자열이며, 0으로 시작하지 않습니다. 입출력 예 t p result "3141592" "2..
문제 출처 Lv.1 카드 뭉치 문제 설명 코니는 영어 단어가 적힌 카드 뭉치 두 개를 선물로 받았습니다. 코니는 다음과 같은 규칙으로 카드에 적힌 단어들을 사용해 원하는 순서의 단어 배열을 만들 수 있는지 알고 싶습니다. 원하는 카드 뭉치에서 카드를 순서대로 한 장씩 사용합니다. 한 번 사용한 카드는 다시 사용할 수 없습니다. 카드를 사용하지 않고 다음 카드로 넘어갈 수 없습니다. 기존에 주어진 카드 뭉치의 단어 순서는 바꿀 수 없습니다. 예를 들어 첫 번째 카드 뭉치에 순서대로 ["i", "drink", "water"], 두 번째 카드 뭉치에 순서대로 ["want", "to"]가 적혀있을 때 ["i", "want", "to", "drink", "water"] 순서의 단어 배열을 만들려고 한다면 첫 번째..
문제 출처 Lv.1 대충 만든 자판 문제 설명 휴대폰의 자판은 컴퓨터 키보드 자판과는 다르게 하나의 키에 여러 개의 문자가 할당될 수 있습니다. 키 하나에 여러 문자가 할당된 경우, 동일한 키를 연속해서 빠르게 누르면 할당된 순서대로 문자가 바뀝니다. 예를 들어, 1번 키에 "A", "B", "C" 순서대로 문자가 할당되어 있다면 1번 키를 한 번 누르면 "A", 두 번 누르면 "B", 세 번 누르면 "C"가 되는 식입니다. 같은 규칙을 적용해 아무렇게나 만든 휴대폰 자판이 있습니다. 이 휴대폰 자판은 키의 개수가 1개부터 최대 100개까지 있을 수 있으며, 특정 키를 눌렀을 때 입력되는 문자들도 무작위로 배열되어 있습니다. 또, 같은 문자가 자판 전체에 여러 번 할당된 경우도 있고, 키 하나에 같은 문..
문제 출처 Lv.1 달리기 경주 문제 설명 얀에서는 매년 달리기 경주가 열립니다. 해설진들은 선수들이 자기 바로 앞의 선수를 추월할 때 추월한 선수의 이름을 부릅니다. 예를 들어 1등부터 3등까지 "mumu", "soe", "poe" 선수들이 순서대로 달리고 있을 때, 해설진이 "soe"선수를 불렀다면 2등인 "soe" 선수가 1등인 "mumu" 선수를 추월했다는 것입니다. 즉 "soe" 선수가 1등, "mumu" 선수가 2등으로 바뀝니다. 선수들의 이름이 1등부터 현재 등수 순서대로 담긴 문자열 배열 players와 해설진이 부른 이름을 담은 문자열 배열 callings가 매개변수로 주어질 때, 경주가 끝났을 때 선수들의 이름을 1등부터 등수 순서대로 배열에 담아 return 하는 solut..
문제 출처 Lv.1 평균 구하기 문제 설명 정수를 담고 있는 배열 arr의 평균값을 return하는 함수, solution을 완성해보세요. 제한 사항 arr은 길이 1 이상, 100 이하인 배열입니다. arr의 원소는 -10,000 이상 10,000 이하인 정수입니다. 예시 arr return [1, 2, 3, 4] 2.5 [5, 5] 5 풀이 숫자들의 평균을 구하는 문제이다. 1. 배열 안에 있는 요소들의 합을 구한다. 2. 요소들의 합을 요소의 개수(배열의 길이)로 나눈다. function solution(arr){ // 배열 안에 있는 숫자들의 합 let totalSum = arr.reduce((acc, cur) => acc + cur, 0); // 배열의 길이(전체 수의 개수) let arrLen..
이진탐색은 정렬된 배열 리스트에서 원하는 요소를 찾을 때 사용하는 탐색 알고리즘이다. 배열에서 탐색범위를 절반씩 좁혀가면서 특정한 값을 찾는 방법인데, 속도가 빠르고 효율적이여서 알아두면 좋은 알고리즘이다. ❗️ indexOf 메서드를 사용하면 원하는 값을 찾을 수 있는데, 이진탐색이 필요할까? indexOf 메서드의 시간 복잡도는 O(n)이고, 이진탐색의 시간 복잡도는 O(log n)이다. 그렇기 때문에 정렬된 배열이 주어진다면 indexOf 메서드보다 이진탐색을 사용하는게 더 빠르고 효율적이다. 위에서 설명했듯이 이진탐색은 탐색범위를 절반씩 좁혀가며 값을 찾는 방법이다. 이진탐색의 원리에 대해 생각해보자. 1. 배열에서 중간 값을 찾는다. 2. 찾는 값이 중간 값보다 크면 탐색 범위를 중간부터 끝까지..
투 포인터(Two Pointers) 1차원 배열에서 각자 다른 원소를 가리키는 2개의 포인터를 조작하여 목표한 값을 구한다. 완전 탐색 O(n^2)솔루션을 O(n)으로 성능을 향상 시킬 수 있다. 연속된 구간의 원소 또는 정렬된 배열에서 무언가를 구할 때도 사용할 수 있다. 정렬된 배열 정렬된 배열에서 두개의 원소의 합이 x와 같은지를 확인하고, x와 같다면 각각의 원소의 인덱스를 담은 배열을 반환하여라. (만약 두 원소의 합이 x와 같은 것이 없다면 [-,1 -1]을 반환) 출력 예시) solution([2, 4, 5, 7, 11, 15], 15); // [4, 11] solution([-3, -2, -1, 0, 1, 2, 3]);// [-3, 3] solution([-2, 0, 1, 3]);// [-..
let numbers = [1, 2, 3, 4, 2, 6, 6, 5]; numbers이라는 배열 안에는 중복되는 숫자가 있다. 중복되는 숫자(2, 6)를 제거하는 방법은 무엇이 있을까? 1. indexOf() function getUniqueNumbers(numbers){ return numbers.filter((num, index) => index === numbers.indexOf(num)); } console.log(getUniqueNumbers([1, 2, 3, 4, 2, 6, 6, 5])); // [1, 2, 3, 4, 6, 5] indexOf() 메서드는 배열에서 지정된 요소가 존재한다면 해당 요소의 인덱스를 반환하고, 존재하지 않으면 -1을 반환한다. 이때 찾고자 하는 요소가 배열 안에 여러..