정수 배열 nums와 정수 target이 주어질때, nums의 두 요소의 합이 target이 되는 두 인덱스를 배열에 담아 리턴하라. 순서는 상관없다.각 입력은 정확히 하나의 해답만 있고 같은 요소를 두 번 사용하지 않는다.오직 하나의 유효한 답만 존재한다.nums 배
정수 x가 주어졌을때, x가 palindrome이면 true를 아니면 false를 리턴하라.여기서 palindrome이란 앞으로 읽었을때랑 뒤로 읽었을때랑 값이 같은 정수이다.number타입인 x를 string타입으로 전환한 후 배열로 전환한다.그리고 reverse메소
로마 숫자는 아래와 같이 7종류의 기호로 나타낸다.예를 들어 2는 II, 12는 XII, 27은 XXVII로 나타낸다.로마 숫자는 보통 왼쪽에서 오른쪽으로 갈수록 작아지도록 적는다. 하지만 4는 IIII가 아니다. IV로 적는다. V앞에 I은 뺄셈이다. 같은 원칙이 9
문자열로 이루어진 배열에서 가장 긴 공통의 접두어를 찾아내라.공통의 접두어가 없을 경우 빈 문자열을 리턴하라.공통의 접두어는 strs의 요소 중 하나라도 해당되지 않을 경우 공통의 접두어가 아니다.따라서 strs의 요소 중 하나를 선택해서 그것을 기준으로 비교하면 된다
정수 배열 nums와 정수 k가 주어질때, k번째로 큰 요소를 리턴하라.k번째로 큰 요소이다. k번째 요소가 아니다.일단 nums배열을 sort메소드를 사용해서 내림차순으로 정렬하였다.그리고 k번째로 큰 수 이기 때문에 인덱스는 k-1이다. k-1로 접근해야한다.sor
정수 배열 arr과 필터링 함수 fn가 주어질때, 필터링된 배열 filteredArr를 리턴하라.fn은 아래와 같은 전달인자를 받는다.arr\[i] : arr의 숫자i : arr\[i]의 인덱스filteredArr은 반드시 fn(arr\[i], i)에 의해 truthy
항상 Hello World를 리턴하는 함수를 리턴하는 함수를 작성하라.createHelloWorld 함수는 함수를 리턴하는 함수이다.그리고 그 함수는 항상 Hello World를 리턴하는 함수이다.
(, ), \[, ], {, }로만 이루어진 문자열 s가 주어질 때, s가 유효한지 아닌지 결정하라. 문자열은 아래의 조건에 맞을때 유효하다.열린 괄호는 반드시 같은 종류의 괄호에 의해 닫혀야한다.열린 괄호는 반드시 올바른 순서로 닫혀야한다.닫힌 괄호는 같은 종류의 열
전달인자의 수를 리턴하는 함수를 작성하라.ES6의 rest 파라미터를 사용하였다.그러면 가변적인 전달인자의 수를 배열로 받아서 처리할 수 있다.
길이가 n인 정수 배열 nums가 주어질 때, 길이가 2n인 배열 ans를 리턴하라.여기서 배열 ans는 ans\[i] == nums\[i]와 ans\[i + n] == nums\[i]를 만족하는 배열이다.ans는 2개의 nums 배열을 연결한 것이다.문제의 두 조건을
Problem 정수 배열 nums와 정수 val가 주어질 때, 제자리에서 nums 배열의 val를 제거하라. 그리고 val와 일치하지 않는 nums배열의 요소의 수를 리턴하라. val와 일치하지 않는 nums배열의 요소의 수가 k라고 할때, 통과하기 위해서는 아래의 항
내림차순이 아닌 정수 배열 nums가 주어질때, 제자리에서 동일한 요소를 제거하라. 각각의 유니크한 요소들은 한 번만 등장해야 한다. 요소들의 상대적인 순서는 똑같이 유지되어야 한다. 그리고 nums의 유니크한 요소들의 수를 리턴하라.nums의 유니크한 요소들의 수가
두 문자열 needle과 haystack이 주어질때, haystack에서 needle이 처음으로 등장하는 인덱스를 리턴하라. 등장하지 않으면 -1를 리턴하라.Input: haystack = "sadbutsad", needle = "sad"Output: 0Explanat
단어와 공백으로 이루어진 문자열 s가 주어질때, 마지막 단어의 길이를 리턴하라.여기서 단어란 공백이 아닌 글자로만 이루어진 가장 긴 부분 문자열이다.처음에는 단순히 s 자체에 lastIndexOf 메소드를 사용해서 마지막 공백의 인덱스를 추출했는데 그럴 경우 예시2와
처음 접했을때는 쉽고 간단한 문제인 줄 알았는데 복병이 숨어있었다.위와 같이 단순하게 작성했는데 한 테스트케이스가 통과되지 않았다.input이 \[6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3]일때output이 \[6,1,4,5,3,9,0,1,9,
간단한 문제였다.input 배열과 output 배열은 1:1로 매핑되기에 map 메소드를 이용해서 각 요소를 ans\[i] = nums\[nums\[i]]로 변환시켜주면 된다.
문자열이 주어졌을때, 모든 .를 \[.]로 대체하는 문제이다.replace()가 아닌 replaceAll()를 사용하여 일치하는 모든 문자열을 대체해주면 된다.
흠... 딱히 설명이 필요없는 문제이다.Kelvin과 Fahrenheit의 정의에 따라 celsius를 계산하고 배열로 리턴하면 된다.
배열을 수로 변환하는 것이어서 reduce 메소드를 이용했다.초기값을 0으로 설정하고 if문을 이용해서 조건에 따라 더하거나 빼면된다.
간단한 문제였다.x와 num은 동시에 1씩 증가하거나 감소하기때문에 결과적으로 2씩 증가하거나 감소하는 것이다. 따라서 t번의 연산 결과는 2t이다.
길이가 2n인 배열이기때문에 for문을 n까지만 수행하면된다. 그리고 nums\[i]와 nums\[i+n]를 push 메소드를 이용해서 순서대로 추가해주면된다.
쉬운 문제였다. 두 가지 방법으로 풀 수 있었다.for문으로 stones의 글자 하나하나를 순회하면서 판별하는데 jewels에 포함될 경우 count를 하나씩 증가시켜주면된다.또는 reduce 메소드를 사용할 수 있다.
이중 for문을 이용해서 해결했다.1\. nums배열의 요소 하나(nums\[i])를 선택한다.2\. 선택한 요소의 다음 인덱스의 요소(nums\[j])부터 탐색하여 nums\[i] === nums\[j]를 만족할 경우 count를 1 증가시킨다.최종적으로 count를
간단하게 filter 메소드를 사용해서 target 이상인 요소들만 추려내면 해결됐다.
JS의 Closure에 관한 문제인 것 같다. 이 개념을 활용해서 풀 수 있었다.MDN 정의에 따르면클로저는 함수와 함수가 선언된 어휘적 환경의 조합이다.once함수는 함수를 리턴하는 함수이다. 즉, once함수가 실행되면 내부 함수가 선언되고 내부 함수를 리턴한다.여
Math.max()를 이용해서 최대 캔디 개수를 얻는다.그리고 map 메소드를 이용해서 기존 캔디 개수와 extraCandies를 더했을때 max보다 같거나 큰 지를 판별하면된다.
간단한 문제였다. 2차원 배열을 평탄화해서 해결했다.1\. map 메소드를 이용해서 한 고객의 은행별 잔액 리스트(Array)를 총잔액(Number)으로 변환한다.2\. 변환하는 과정에서 reduce 메소드를 사용해서 은행별 잔액을 모두 더해서 총잔액을 구한다.3\.
그냥 더하면 된다...
생각보다 간단한 문제였다.n이 2로 나누어 떨어지면 n를 리턴하면되고 아니면 2를 곱한 수를 리턴하면된다.
이중 for문을 이용해서 해결했다.0 <= i < j < nnums\[i] + nums\[j] < target위의 두 조건을 만족해야한다.첫 번째 for문을 이용해 요소에 접근한다.그리고 두 번째 for문의 초기식(let j=i+1)를 통해 첫 번
빌트인 배열 메소드를 사용하지 않고 풀어보았다.1\. 결과를 담을 새로운 배열(output)을 선언한다.2\. nums의 첫 번째 요소를 output에 첫 번째 요소로 집어넣는다.3\. output의 현재 인덱스의 값 = output의 이전 인덱스의 값 + nums의
특정 문자열을 다른 문자열로 대체하는 문제이다.간단하게 replaceAll 메소드를 사용해서 특정 문자열('()', 'o')을 다른 문자열로 대체할 수 있다.
쉬운 문제였다.일단 map 메소드를 사용해서 각 문장들을 단어의 개수로 변환했다.변환할때 split 메소드를 활용해서 공백을 제거했다. 그리고 그 길이를 구하면 단어의 개수를 알 수 있다.마지막으로 Math.max()를 이용해서 최댓값을 리턴하면된다.
이 문제는 nums\[i]보다 작은 요소들의 개수를 카운팅하는 문제이다.필자의 접근법은1\. nums를 오름차순으로 정렬한 새로운 배열을 생성한다.이 경우 정렬된 배열의 인덱스는 해당 인덱스의 요소보다 작은 요소들의 개수가 된다.예를 들어위의 예제에서 sorted\[3
문제의 요지는 빌트인 map 메소드를 사용하지않고 배열의 모든 요소를 특정 함수의 실행결과값으로 변환하라는 점이다.그래서 forEach 메소드를 사용했다. 여기서 주의할 점은 forEach 메소드는 reduce나 map 메소드와는 다르게 실행시 undefined를 리턴
Number 타입인 n를 String 타입으로 변환한 후 spread 연산자를 이용해서 배열로 만들었다.그리고 reduce 메소드를 사용해서 각 자릿수들의 곱과 합을 구한 후 차를 리턴하면된다.
일단 문제의 요구사항을 살펴보면 아래와 같다.함수 fn, 전달인자 배열 args, 인터벌시간 t가 주어질때, 취소함수 cancelfn를 리턴하라함수 fn은 즉시 실행되야한다. 그리고 매 t밀리초마다 실행되어야한다.간추려보면 함수 fn을 t밀리초마다 실행하라는 것이다.
일단 문제의 요구사항을 살펴보면 아래와 같다.함수 fn, 전달인자 배열 args, 타임아웃시간 t가 주어질때, 취소함수 cancelfn를 리턴하라함수 fn은 t밀리초 후 실행되어야한다.간추려보면 함수 fn을 t밀리초 후 실행하라는 것이다. 따라서 setTimeout()
Solution Explanation > 일단 Number 타입인 num의 각 자릿수를 분리하기 위해서 String으로 변환하였다. 그리고 각 자릿수를 요소로 갖는 배열로 전환한 후 map를 이용해 다시 Number 타입으로 변환 후 오름차순으로 정렬하였다. 이 상황
문제의 요구사항에 맞춰 단순하게 접근해서 for문이나 map 메소드를 이용해서 leftSum 배열과 rightSum 배열을 하나하나 구한 후 두 배열의 차를 얻는 방법으로 해결할수도있다.하지만 뭔가 수학적인(?) 규칙이 있는 것 같아 그 규칙을 이용해서 풀어보았다.예제
함수 합성에 관한 문제이다. 여러 함수를 요소로 갖고 있는 배열이 주어진다. 그 때 어떤 한 input이 주어지면 뒤에서부터 함수를 실행시켜 실행결과를 앞의 함수에 input으로 집어넣는 방식으로해서 최종적인 output를 출력하는 함수를 리턴하는 문제이다.일단 뒤에서
이 문제에서 특이한 점은 index\[i]의 값이 중복일 경우, nums\[i]의 값이 덮어씌어지는 것이 아니라 추가되면서 뒤의 요소들이 밀려난다는 점이다.그래서 splice 메소드를 사용하였다. splice 메소드는 배열의 중간에 요소를 추가할 수 있기 때문이다. 제
생각보다 간단한 문제였다. 요구사항대로 차근차근 코드를 작성하면 된다. 간단히 요약하면짝수 인덱스의 요소값은 바로 뒤에 홀수 인덱스의 요소값의 반복횟수이다.이 조건을 코드로 작성하면된다.fill 메소드를 사용해서 for문을 대체할 수도 있다. 그리고 push 메소드 대
문제의 조건을 간단히 줄여보면 R의 개수와 L의 개수가 같아야 스플릿이 가능하다는 것이다. 예를 들어 앞의 R의 개수가 5개면 뒤의 L의 개수가 5개가 있어야 스플릿이 가능하다. R과 L의 순서를 거꾸로해도 마찬가지이다.이 규칙을 활용하기 위해서는 R이나 L의 개수를
처음에는 Solution 1 처럼 길이가 n인 배열을 만든 후 map 메소드를 이용해서 조건에 맞게 요소를 채워넣은후 reduce 메소드를 이용해서 결과를 리턴했다.근데 다시 생각해보니 굳이 배열을 만들어서 연산을 할 필요없이 바로 결과를 얻을 수 있었다.for문을 이
크게 어렵지 않은 문제였던 것 같다. 요구하는대로 단순하게 작성해봤다.3, 5, 7로 나누어 떨어질 경우에만 sum에 더해지도록 작성했다.
쉬운 문제였다. 재귀로도 풀 수 있는데 while문으로 해결했다.num이 0이 될 때 까지 while문을 반복하고 그 횟수를 기록하면된다.
일단 s를 배열로 전환한 후 reduce를 이용해서 해결했다.여기서 초기값을 s와 길이가 같은 빈 배열로 설정해서 셔플된 위치에 요소들을 추가해줬다.그리고 join으로 합쳐주면 끝!
문제의 요지는 reduce 메소드를 구현하라는 것이다.reduce 메소드는 배열을 순회하면서 누적된 하나의 값을 리턴하는 메소드이다. 초기값을 부여할수도 아닐수도 있다. 이 문제에서는 초기값 init를 부여하였다.for문을 통해 배열을 처음부터 순회한다.이 때 함수 f
먼저 ruleKey와 인덱스를 매핑한 객체 map를 만들었다. 그래야 한 아이템에서 ruleValue를 뽑아내기 쉬워진다.그 다음 reduce 메소드를 이용해서 ruleValue가 일치할 경우 수를 하나씩 증가시키면된다.
크게 어렵진않았다.num의 자릿수를 분리해서 배열로 바꾼 후 reduce를 이용해서 나누어 떨어지면 카운팅하도록 작성했다.
크게 어렵지 않은 문제였다. 일단 s를 쉽게 뒤집을 수 있도록 배열로 변환했다. 그리고 i일 경우에 reverse 메소드를 적용시키면 간단히 해결됐다.
배열 words에서 조건에 맞는 요소들을 필터링하기로 했다.요소 word의 문자 하나하나를 for문을 이용해서 접근해서 확인한다. 허용된 글자가 아닐 경우 즉시 false를 리턴한다.최종적으로 필터링이 완료된 배열의 길이를 구하면 된다.
처음에 좀 헤매어서 생각보다 오래 걸린 문제였다.문제에서 알파벳 a 부터 z 까지의 모스 부호를 배열로 제공해주었다. 여기서 문제는 모스부호가 알파벳 순서대로 배열에 담겨있다는 것이다. 즉, 인덱스로만 접근이 가능하다는 것이다.이 모스 부호와 알파벳을 1대1로 매핑해서
필자의 접근방법은 포인터 두 개를 이용한 방법이다.1\. 0번째 요소(배열)에서 더할 요소는 인덱스 0 과 요소.length - 1이다.2\. 1번째 요소(배열)에서 더할 요소는 인덱스 1 과 요소.length - 2이다.3\. 2번째 요소(배열)에서 더할 요소는 인덱
크게 고민하지 않고 조건에 맞춰 그냥 간단하게 이중 for문으로 해결했다.
토너먼트에서 총 경기 수를 구하는 문제이다.우리가 알고 있는 일반적인 토너먼트 방식처럼 팀 수가 홀수일 경우 한 팀이 부전승으로 올라가게된다. 짝수일 경우에는 모든 팀이 경기를 치른다.1\. 팀 수가 짝수일 경우 : 경기수는 n/2이고 n/2개의 팀이 올라가게 된다.2
토너먼트에서 총 경기 수를 구하는 문제이다.우리가 알고 있는 일반적인 토너먼트 방식처럼 팀 수가 홀수일 경우 한 팀이 부전승으로 올라가게된다. 짝수일 경우에는 모든 팀이 경기를 치른다.1\. 팀 수가 짝수일 경우 : 경기수는 n/2이고 n/2개의 팀이 올라가게 된다.2
문제의 태그에 Hash Table이 있어 이것을 이용해서 풀어보기로 했다.Pangram은 모든 알파벳이 최소 한 번 이상 등장하는 문장이다.for문을 통해 문장의 글자 하나하나에 접근한 후 그 글자를 Hash Table에 기록한다.그리고 Hash Table 객체의 키의
문제의 요지는 간단하다. 배열을 주어진 size길이만큼 계속해서 끝까지 잘라내는 것이다.for문에서 인덱스 i를 size만큼 증가하도록 작성하면 된다. 그리고 slice 메소드에서 두 번째 매개변수에 i+size를 전달하면 size길이만큼 배열을 잘라낸다.
뒤죽박죽인 단어들을 올바른 순서로 정렬하는 문제이다. 각 단어에는 올바른 순서가 적혀있다.1\. 정렬을 하기위해서 split 메소드를 사용해서 띄어쓰기를 기준으로 분리한다.2\. sort 메소드를 이용해서 올바른 순서로 정렬한다. 숫자 순서대로 정렬을 해야하기때문에 (
뒤죽박죽인 단어들을 올바른 순서로 정렬하는 문제이다. 각 단어에는 올바른 순서가 적혀있다.1\. 정렬을 하기위해서 split 메소드를 사용해서 띄어쓰기를 기준으로 분리한다.2\. sort 메소드를 이용해서 올바른 순서로 정렬한다. 숫자 순서대로 정렬을 해야하기때문에 (
뒤죽박죽인 단어들을 올바른 순서로 정렬하는 문제이다. 각 단어에는 올바른 순서가 적혀있다.1\. 정렬을 하기위해서 split 메소드를 사용해서 띄어쓰기를 기준으로 분리한다.2\. sort 메소드를 이용해서 올바른 순서로 정렬한다. 숫자 순서대로 정렬을 해야하기때문에 (
간단한 문제였다. reduce를 이용해서 각 단어의 첫 글자를 합친 후 s와 비교하면 끝이다.
처음에는 이중 for문으로 접근했는데 단일 for문으로도 해결이 가능했다.엄격한 오름차순 배열이기때문에 특정 요소에 +diff과 +2diff한 요소가 있다면 count를 증가시키면된다.
필자의 접근법은 일단 reduce를 사용해서 각 노드별 엣지의 수를 기록한 hash 객체를 생성하고 for문을 통해 노드 중 가장 많은 엣지를 갖고있는 노드를 리턴하는 방식이다.굉장히 직관적이고 합리적인 해결방법이다.모든 엣지들을 다 비교할 필요 없이 두 엣지만 비교하
간단한 문제였다.요소들의 합은 reduce를 이용해서 간단하게 구할 수 있다.요소들의 모든 자릿수의 합은 join를 통해 문자열로 합친 후 split해서 reduce를 이용해서 구했다.
쉬운 문제였다.루트 노드의 값과 자식 노드들의 값의 총합을 비교하면 끝이다.
어렵지 않은 문제였다.split 메소드로 문장을 단어별로 분리하고 slice 메소드로 앞에 k개의 단어만 추려낸 후 join으로 다시 합치면 된다.
순서대로 조합하기 때문에 join 메소드를 이용하면 간단하게 해결된다.문자열은 원시 타입이기때문에 비교가 가능하다.
gain배열은 지점별 고도의 변화값을 나타내는 배열이다. 필자가 원하는 것은 지점별 고도를 갖고있는 배열이다.그래서 reduce를 이용해서 전 지점에 고도의 변화값을 적용해서 지점별 고도 리스트를 만들었다.그리고 Math.max 메소드를 사용해서 가장 높은 고도값을 리
이 문제의 유형은 엄밀히 말하면 Greedy Algorithm에 관한 문제이다.왜냐하면 단 하나의 숫자만 바꿀때 최댓값을 얻어야 하는데 그러기 위해서는 가장 높은 자리의 숫자를 바꿔야한다. 즉, 가장 높은 자리의 숫자를 바꾸는 것(6을 9로)이 최적의 해답이 되는 것이
코드는 간단하다.fn은 항상 숫자만 리턴하고 그 숫자로 순서를 결정한다.output 배열은 반드시 fn의 리턴값에 의해 오름차순으로 정렬되어야한다.즉, fn의 리턴값이 클 수록 배열의 뒤로 간다는 것이다.위 사실을 이용해서 sort 메소도를 사용하면 정렬이 가능하다.s
문제의 요구사항을 간추려보면 nums배열에서 가장 큰 요소에 1를 0번부터 k-1번까지 더한 수들의 총합을 구하는 것이다.즉, max + (max + 1) + (max + 2) + ... + (max + k-1)을 뜻한다.위 식을 for문을 이용해 구현하면 해결가능하다
문제의 요구사항 중에서 가장 중요한 점은 |은 항상 짝(짝수개)으로 존재한다는 것이다. 그래서 괄호의 개념을 이용해서 접근했다.|가 열리게되면 fasle가 되고 닫히게되면 true가 된다는 설정을 적용하였다.즉, |을 만나게되면 상태가 바뀌게된다.|가 열린 상태인 fa
문제의 요구사항이 처음에는 다소 헷갈리고 복잡할 수 있는데 조금 고민해보면 생각보다 간단하단 걸 알 수 있다.간략하게 표현하면 한 배열(seats나 students)을 다른 한 배열과 일치하도록 만드는 데 최소한 몇 번의 움직임이 필요하냐이다. 즉, 두 배열을 비교하는
Solution Explanation > stack과 최대 깊이를 기록하는 변수 depth를 이용해서 해결했다. (일 경우, 스택에 추가한 후 스택의 길이와 depth를 비교한다. 현재 스택에 쌓여있는 (의 개수가 depth보다 클 경우 depth의 값을 재할당한다. 반대로 )일 경우, 괄호가 닫힌 것이기 때문에 스택에서 (를 제거한다.
Solution Explanation > stack을 이용하면 크게 어렵지 않게 해결할 수 있다. 문제의 설명 중에 primitive란 빈 문자열이 아니면서, 분열시킬 수 없는 괄호를 뜻한다. 예를 들어, (())()()은 (()) + () + ()로 나눌 수 있기 때문에 primitive하지 않다. 여기서 나누어진 (()), (), ()은 더 이상 분열...
상당히 간단한 문제였다.2차원 배열에서 각각의 내부 배열을 뒤집고 내부 배열의 요소들을 반전시키면 되는 문제였다.map 메소드를 이용해서 각각의 내부 배열을 reverse 메소드로 뒤집은 후 다시 map 메소드를 이용해서 요소들을 반전시키면 된다.
Two Pointers를 이용하여 쉽게 해결하였다.먼저 변경이 가능하다록 하기 위하여 문자열 s를 배열로 변환하였다.그리고 두 포인터 i와 j를 설정하였다. i는 첫 번째 인덱스부터 접근하는 포인터이고 j는 마지막 인덱스부터 거꾸로 접근하는 포인터이다.charCodeA
굉장히 간단한 문제였다.sort 메소드를 이용해서 오름차순으로 정렬한 후 마지막 두 요소의 곱에서 처음 두 요소의 곱을 빼면 끝이다. (음수가 포함되지 않는 배열이라서 쉬웠다.)
3중 for문을 이용해서 해결하였다.i < j < k이기때문에 3중 for문을 이용해서 모든 경우의 수에 대해 판별한다.
문제의 태그로 적혀있는 Hash Table을 이용해서 풀었다.문자열 rings를 for문을 이용해서 순회하면서 0부터 9까지의 rod별 링을 객체 hash에 기록하였다.그리고 hash에 for...in문을 이용해서 'R', 'G', 'B' 세 가지 색상을 모두 갖고 있
JS의 클로저에 관한 문제인 것 같다.여기서 init의 값을 다른 변수에 담아두는 이유는 초기 init의 값을 보존하기위해서다. 담아두지 않게되면 increment, decrement 실행시 init이 계속 변하게된다. 그러면 reset실행시 초기 init을 리턴하지
JS의 클로저에 관한 문제이다.여기서 전위 연산자와 후위 연산자의 차이에 대해 알 수 있었다.
nums배열에서 가장 큰 수 두 개를 추출하면 끝나는 문제이다.추출을 쉽게 하기 위해서 배열을 먼저 정렬해준다.
문제의 태그로 나와있는 Hash Table을 이용하여 해결하였다.words배열의 문자열 요소들을 기록할 hash객체를 선언한 후 for문을 이용해서 모든 문자열 요소를 기록한다. 그 과정에서 거꾸로한 문자열과 일치한 문자열이 있을 경우 count를 증가시킨다.
문제의 요구사항대로 차근차근 풀어나가면 해결가능하다.일단 primitive 타입인 s를 변화가 가능하도록 배열로 전환한다.그리고 for문을 이용해서 숫자에만 접근한다.알파벳인 이전 요소의 유니코드 포인트를 추출한 후 숫자를 더한 후 다시 알파벳으로 변환해주면 된다.
빌트인 배열 메소드를 잘 활용하면 크게 어렵지 않게 해결할 수 있다.1\. names배열과 heights배열을 합친다. (각 이름에 대한 키 정보를 갖고 있는 객체로 변환한다.)2\. sort 메소드를 이용해서 내림차순으로 정렬한다.3\. map 메소도를 이용해서 모든
금방 후딱 푼 문제였다.includes 메소드를 이용하면 쉽게 해결가능하다.
Solution Explanation > 문제에서 요구하는 pivot 정수란? 1부터 pivot 정수까지의 합 = pivot정수부터 n까지의 합이 성립하는 정수를 말한다.
먼저 indexOf 메소드를 이용해서 문자열 word에서 ch의 인덱스를 구한다.그리고 0부터 ch까지의 문자열을 배열로 변환하고 reverse 메소드를 사용해서 뒤집는다.ch이후의 문자열은 그대로 유지한다.두 문자열을 합쳐서 리턴한다.
Solution Explanation > 이 문제를 해결하기 위한 가장 중요한 포인트는 1~9와 10#~26#을 구분하는 것이다. 한 자리 수인지 아니면 세 자리 수인지를 구별할 수 있어야한다. 구별하기 위해서 현재 인덱스 + 2의 값이 #인지 아닌지 확인해야한다. #일 경우, 세 자리 수이므로 현재 인덱스와 다음 인덱스의 값의 합에 96를 더하고 fro...
Solution Explanation > 이 문제는 이중 for문을 이용하여 크게 어렵지 않게 해결할 수 있었다. 현재 요소 이후의 요소들을 for문을 통해서 두 가지 조건을 만족하는지 확인하면 간단하다.
쉽게 풀 수 있는 문제였다...지연된 도착 시각!!을 구하면 되는 문제이다. 주의할 점은 그 시각이 24시간제라는 것이다.따라서 예정된 도착 시각에 지연시간을 더한 후 24를 나눈 나머지를 구해주면 된다.
Two Pointers로 접근해서 풀 수도 있겠지만 그렇게 풀지 않았다.필자가 해결한 방법은 먼저 두 단어 중 길이가 긴 단어의 길이를 구한다.그리고 for문을 그 길이만큼 실행시키는데 번갈아가면서 두 단어의 글자 하나하나를 각각 추출해서 결과물에 합친다.길이가 짧은
문자열을 요소로 갖고있는 배열에서 palindromic한 첫 번째 요소를 찾아서 리턴하는 문제이다.여기서 palindromic은 똑바로 읽어도 거꾸로 읽어도 같은 단어이다.1\. for문을 이용해서 각각의 문자열에 접근한다.2\. 해당 문자열이 palindromic인지
이 문제는 두 수의 공약수를 찾는 문제이다.필자는 while문을 통해서 풀었다.공약수가 아무리 커도 두 수보단 클 수 없으므로 조건식으로 x <= Math.min(a, b)를 작성하였다.그리고 x(확인할 수)를 1부터 1씩 증가시키면서 두 수가 나누어 떨어지는 확
이 문제의 요지는 수열을 오름차순으로 만들기 위한 최소한의 연산 횟수를 구하는 것이다.여기서 말하는 1회 연산이란 수열의 한 수를 정하고 그 수를 1증가시키는 것이다.그러면 수열이 오름차순이 되기 위해서는 더도 말고 덜도 말고 어떤 요소의 다음 요소가 1!!!만큼만 커
크게 어렵지 않고 쉽게 해결할 수 있는 문제였다.for문을 통해서 배열을 순회하고 조건에 부합하는지만 확인하면 된다.여기서 신경써야할건 1-indexed 배열이라는 것이다.배열의 길이가 인덱스로 나누어 떨어지는만 확인하면 끝이다.
문제 설명글의 길이에 비해 생각보다 간단한 문제였다.어떤 직사각형을 잘라서 최대 크기의 정사각형을 만들려면 두 변 중 작은 길이의 변을 갖는 정사각형으로 만들면된다. (Math.min 메소드 이용)그리고 여러 정사각형들 중 가장 큰 정사각형과 크기가 같은 것들을 걸러내
문자열로 표현된 양의 정수가 주어질 때, trailing zeros를 제거하는 문제이다.trailing zeros를 제거하는 것이기 때문에 for문을 작성할때 맨 뒤의 숫자에서부터 접근하였다.이때 숫자가 0이 아닐 경우 처음부터 그 숫자까지 slice를 사용해서 잘라서
문제가 요구하는 것은 다음과 같다.어떤 한 정수를 한 번 뒤집은 것을 reversed1이라고 하고 이것을 다시 한 번 더 뒤집은 것을 reversed2라고 한다.위 두 개가 동일한 값일시 true 아닐시 false를 리턴하라.여기서 주의할 점은 뒤집을때 leading
이 문제는 쉽게 해결할 수 있었다.nums배열을 join 메소드를 이용해서 문자열로 만든 후 이것을 스프레드 문법을 이용해서 펼쳐주면 간단하게 끝난다.
필자가 접근한 방법은1\. grid의 각 row를 내림차순으로 정렬한다.2\. column을 순회하면서 각 column의 최댓값을 찾고 이 값을 ans에 더한다.먼저 grid의 각 row를 내림차순으로 정렬해서 각 row의 최댓값을 쉽게 찾을 수 있도록 한다.그리고 f
문제에서 말하는 self-dividing number는 모든 자릿수로 나누어지는 수를 의미한다.문제가 원하는 것은 특정 수 범위가 주어질 때 해당 범위 안에 모든 self-dividing number를 구하는 것이다.self-divding number인지 아닌지를 확인
문자와 숫자로 이루어진 좌표가 주어질때 체스판에서 해당 좌표의 사각형이 흰색이면 true, 검은색이면 false를 리턴하라.좌표는 a1, h3와 같은 형식으로 표현된다.체스판의 좌표 패턴을 알아내면 쉽게 해결할 수 있다.문자와 숫자의 짝홀 종류가 서로 같으면 검은색이다
이 문제는 어떻게보면 어려울 수 있는데 간단하게 생각하면 쉽게 풀리는 문제이다.굳이 pair를 짤 필요없이 정렬한 후 홀수 인덱스의 수들만 더하면 답을 구할 수 있다.즉, 최대한 큰 수끼리 pair를 이루도록해서 큰 수가 남겨지도록 하면된다.
문제가 요구하는 것은 간단하다.수를 요소로 갖는 배열이 주어질때, 정확히 한 번 등장하는 모든 수들의 합을 구하는 것이다.수가 한 번 등장하는지 여러 번 등장하는지 판별하기위해서는 Hash Table를 이용하면 간단하다.nums배열을 for문을 통해 순회하면서 각 수들
수로만 이루어진 배열에서 최솟값도 아니고 최댓값도 아닌 수를 리턴하는 문제이다. 조건을 만족하는 수가 여러 개일 경우 하나만 리턴하면 된다.일단 최솟값과 최댓값을 알기 위해서 배열을 오름차순으로 정렬한다. 그러면 첫 번째 요소는 최솟값이 되고 마지막 요소는 최댓값이 되
문자열이 주어질때 해당 문자열이 good인 문자열인지 판별하는 문제이다.여기서 good인 문자열이란 모든 글자(알파벳)이 동일한 횟수로 등장하는 문자열을 의미한다.특정 글자(알파벳)이 몇 번 등장하는지를 기록하기 위한 Hash Table을 만든다.그리고 이 Hash T
크게 어렵지 않은 문제였다.임의의 수의 자릿수가 짝수인지 아닌지만 확인하면 된다.자릿수를 확인하기 위해서 숫자를 문자열로 변환하고 짝수인지 아닌지 확인하면 된다.
최종 목적지를 구하는 문제이다.문제에서 가장 중요한 포인트는 도시간 연결 경로를 그래프로 표현하면 선형적이라는 것이다. 즉, 최종 목적지는 반드시 하나라는 것이다.그러면 도시는 세 종류로 나뉠 수 있다.1\. 나가는 경로만 있는 도시2\. 들어오고 나가는 경로 둘 다
간단한 문제이다.십진수 n을 k진수로 변환한 후 모든 자릿수들의 합을 구하는 문제이다.진법 변환을 위해서 toString 메소드를 사용했고 스프레드 문법을 사용해서 모든 자릿수들을 분리해서 배열로 만들었다. 그리고 총합 구하면 끝!
배열을 뒤집는 문제이다. 다만 한 가지 조건이 있는데 In-place 알고리즘 (제자리 알고리즘) 방식으로 풀어야한다는 것이다.제자리 알고리즘은 다른 문제를 풀 때 학습한 적이 있는데 배열, 스택 등 추가적인 자료구조를 사용하지 않고 입력값을 변환시키는 방식을 말한다.
한 줄로 해결이 가능한 문제였다.startsWith 메소드를 이용하면 문자열이 특정 문자열로 시작하는지 쉽게 확인이 가능하다.이 메소드를 사용해서 words배열을 필터링해주면 된다.
배열이나 객체가 주어질때 그것이 비어있는지 확인하는 문제이다.배열일 경우배열의 길이가 0일 경우 비었다고 판단할 수 있다.객체일 경우객체의 key값들로 이루어진 배열의 길이가 0일 경우 비었다고 판단할 수 있다.Object.keys 메소드를 이용하면 확인할 수 있다.
구하고자 하는 것은 수열에서 최댓값과 최솟값의 최대공약수이다.1\. 수열에서 최댓값과 최솟값을 얻어낸다.2\. 최대공약수는 아무리 커도 최솟값보다 클 수 없다.그렇기 때문에 최솟값에서 1씩 빼면서 최대공약수인지 확인해본다.3\. 최솟값과 최댓값이 둘 다 나누어 떨어질때
문자열을 절반으로 나눴을때 두 문자열이 동일한 개수의 모음을 갖고있다면 true 아니면 false를 리턴해야하는 문제이다.Two Pointers 방식을 이용해서 모음인지를 확인하고 개수를 저장한다.두 개수를 비교해서 같은 true 다르면 false를 리턴한다.
두 양의 정수 n과 m이 주어질때num1은 1 부터 n까지의 수 중 m으로 나누어 떨어지지 않는 수들의 합num2는 1 부터 n까지의 수 중 m으로 나누어 떨어지는 수들의 합num1 - num2를 구하라.while문을 이용해서 1 부터 n까지의 모든 수들을 확인해서 n
정수 배열 nums와 정수 k가 주어질때배열의 인덱스를 2진수로 변환했을때 set bits가 k와 같은 수들의 합을 구하는 문제이다.예를 들어 4는 이진수로 100이고 set bits는 1이다.3은 이진수로 11이고 set bits는 2이다.인덱스를 2진수로 변환하고
millis밀리초동안 잔 후 아무 값이나 리턴하는 비동기 함수를 작성하는 문제이다.setTimeout을 사용해서 millis 후 resolve하는 프로미스를 리턴하면 간단하게 해결된다.
문제가 요구하는 것은 간단하다.짝수는 앞으로, 홀수는 뒤로 정렬하는 것이다.위 조건만 만족하면 순서는 상관없다.Two Pointers 방식으로 접근해서 해결했다.1\. i포인터는 앞에서부터, j포인터는 뒤에서부터 접근한다.2\. nums\[i]가 짝수일 경우, 옮길 필
Solution Explanation >
문제가 원하는 것은 다음과 같다.수로 이루어진 배열이 주어질때 이 배열을 오름차순으로 정렬했을때 위치(인덱스)가 변하는 요소의 개수를 구하는 것이다.1\. sort 메소드를 사용해서 원본 배열을 오름차순으로 정렬한다. 이때 원본 배열을 보존해야하므로 복사 후 정렬한다.
주어진 nums배열을 정렬한 후 target과 값이 같은 요소의 인덱스를 구하는 문제이다.1\. nums배열을 sort 메소드를 이용해서 정렬한다.2\. reduce 메소드를 이용해서 target과 값이 같은 요소일 경우 배열에 추가한다.문제의 태그들 중에 Binary
queryTime에 숙제를 하고 있는 학생들의 수를 구하는 것이다. 숙제를 다 했거나 숙제를 시작안한 학생이 아니라 그 시간에 숙제를 진행중인 학생들의 수를 구하는 것이다.따라서, queryTime이 startTime이후이고 endTime이전이면 그 시간에 숙제를 진행
필자가 접근한 방법은2차원 배열의 각 row의 요소들의 합을 구한 후 비교해서 답을 구하는 것이다.1\. row의 요소들의 합을 reduce를 이용해서 구한다.2\. 위 합이 기존의 합보다 클 경우 대체한다.
문제는 생각보다 쉽게 풀렸다.좌표계로 생각해서 L, R움직임은 x좌표로 생각하고 U, D움직은 y좌표로 생각했다.모든 움직임을 수행한 후 최종 x, y좌표로 원점으로 돌아왔는지를 판별했다.
Hash Table을 이용하여 해결하였다.Hash Table에 items1과 items2가 가지고 있는 프로퍼티들을 기록하는데 중복된 value의 weight는 합쳐주었다.1\. items1을 순회해서 Hash Table에 기록한다.2\. items2를 순회해서 Has
Hash Table을 사용해서 해결하였다.1\. nums배열을 순회하는데 이 때 Hash Table에 동일한 정수가 존재할 경우 해당 프로퍼티를 삭제하고 count를 1증가시킨다.왜냐하면 동일한 정수가 2개일 경우 제거할 수 있고 이 행위가 연산 1회이기 때문이다.2\
스택을 이용하면 쉽게 해결할 수 있다. 문제의 조건에 맞춰 하나하나 if문으로 분기해주면 크게 어렵지 않다.모든 연산을 수행한 후 reduce를 사용해서 합을 구해주면 끝이다.
해밍 거리는 비트 연산자를 이용하면 쉽게 구할 수 있었다. 이번 기회에 비트 연산자에 대해 자세하게 알 수 있었다.해밍 거리는 같은 자리의 비트에서 서로 다른 값이 몇 개인지를 센 것이다.따라서 XOR 비트 연산자를 이용하면 어렵지 않게 구할 수 있다.XOR 비트 연산
문제를 간단하게 설명하면정수 배열이 주어질때 정수가 출현하는 빈도수순(오름차순)으로 정렬하는데 빈도수가 같을 경우 내림차순으로 정렬하라!!Hash Table과 sort메소드를 사용해서 해결할 수 있었다.1\. 정수별 출현 빈도수를 Hash Table에 기록한다.2\.
Hash Table을 이용하면 크게 어렵지 않게 해결할 수 있다.1\. Hash Table에 for문을 사용하여 숫자별 등장 횟수를 기록한다.2\. 인덱스를 키로 사용하여 Hash Table에서 검색하여 결과값과 특정 인덱스의 수가 다를 경우 즉시 false를 리턴한다
일단 문제를 간단하게 설명하면정수 배열이 주어진다. 그리고 정수를 2진수로 변환했을때 값이 1인 비트의 개수가 많은 순서(오름차순)으로 정렬하는데 이 때 개수가 같을 경우 큰 순서대로 정렬하라풀이 방법은 간단하다.정렬을 위해 sort 메소드를 사용한다. 값이 1인 비트
Solution Explanation > 조건에 맞춰 정답 배열 ans에 문자열을 추가해주면 된다. 여기서 주의할 점은 i가 1부터 시작된다. i를 문자열 타입으로 변환해서 추가해줘야한다.
한 줄로 간단하게 해결할 수 있었다.문제의 조건이 b가 나타난 이후에 a가 나타나면 안되는 것이다.즉, 문자열에 ba가 존재하지않아야 한다는 것이다.따라서 includes 메소드를 사용해서 ba가 존재하는지 확인하고 그 결과를 반전시켜주면된다.
처음에 볼땐 문제가 꽤 복잡할 줄 알았는데 조금 생각을 해보니 크게 어렵지 않은 문제였다.문제를 간추려보면 중복된 알파벳을 제거하는 것이다!!Hash Table을 사용해서 알파벳의 종류를 기록한 다음 그 종류의 개수를 리턴해주면된다.
이중 for문을 이용해서 문제를 해결했다.1\. 첫 번째 for문을 이용해서 column에 접근한다.2\. 이전 알파벳을 저장할 변수 prev를 설정한다.3\. 내부 for문을 이용해서 strs의 모든 문자열에 접근한다.4\. prev와 현재 알파벳을 비교한 후 조건에
문제는 크게 어렵지 않았다.문제에서 정의하는 연산을 코드로 작성하면 된다.while문을 사용해서 연산 결과값이 조건에 맞을때까지 연산을 수행하면 된다.
while문을 사용하여 간단하게 해결할 수 있었다.문제의 요구대로 코드를 작성하면 된다.nums배열의 요소들 중 original이 존재할 경우 original을 2배 시키고 존재하지 않을 경우 그 즉시 리턴해주면된다.
Solution Explanation > 문제는 크게 어렵지 않게 해결할 수 있다. 카운팅한 결과를 기록할 count변수를 선언하고 for문을 이용해서 문자열 s를 순회한다. letter와 일치할 경우 count를 1 증가시킨다. 최종적으로 퍼센트를 구한 후 소수점 이하를 버린 값을 리턴한다.
Solution Explanation > 이 문제는 큰 어려움 없이 요구 사항대로 코드를 작성해서 해결할 수 있었다. 카운팅한 결과를 기록할 count변수를 선언한다. low부터 high까지 for문을 이용해서 순회한다. 숫자 타입은 분리할 수 없기 때문에 문자열로 변환 후 배열로 변환한다. reduce 메소드를 이용해서 전반과 후반의 자릿수의 합을 각각...
Solution Explanation > 이 문제는 탐욕 알고리즘을 이용해서 풀어보았다. >> 특정 알파벳으로 가는 방법은 시계방향으로 가는것과 반시계방향으로 가는것 두 가지만 존재한다. 위 두 방법 중 시간이 짧은, 즉 거리가 짧은 방법이 최적의 해답이된다. 이러한
큰 어려움 없이 해결한 문제였다.먼저 알파벳 모음을 담은 vowels배열을 선언한다.그리고 for문을 이용해서 words의 left부터 right까지의 범위를 탐색한다.첫 번째와 마지막 알파벳이 vowels에 포함되는지 확인하는 작업만 해주면 된다.
Solution Explanation > 이 문제는 수로만 이루어진 배열이 주어질 때, 각 수의 출현 빈도가 유니크할 경우 true, 아닐 경우 false를 리턴하는 함수를 작성하는 문제이다. 먼저 각 수의 출현 빈도를 기록하기 위해서 Hash Table을 작성한다. 그리고 이 Hash Table에서 수(key)별 출현 빈도(value)를 비교해서 같은 ...
Solution Explanation > 크게 어렵지 않게 해결한 문제이다. reduce 메소드를 이용해서 해결했다. 문자열을 seperator를 기준으로 split 메소드를 사용해서 찢어낸 후 찢어진 문자열들을 배열에 추가해준다. 이 때 빈 문자열이 생길 수 있는데 이것은 제외해야하므로 조건문으로 걸러준다.
Solution Explanation > 굉장히 쉽게 풀 수 있었다. 문제가 제시한 조건대로 반복문과 조건문만 작성해주면 된다.
Solution Explanation > 이 문제는 수로 이루어진 배열에서 peak를 찾아내는 문제이다. 문제에서 말하는 peak란? 첫 번째와 마지막 요소는 피크가 될 수 없다. 이웃하는 요소보다 큰 요소가 피크이다. > > 첫 번째와 마지막 요소는 피크가 될 수 없기에 두 요소를 제외하고 탐색한다. 조건문을 이용해서 전 요소와 후 요소보다 클 경우 추...
Solution Explanation > 이 문제는 처음엔 어려워 보일 수 있는데 생각보다 간단하게 해결할 수 있다. 문제가 요구하는 바는 arr의 요소들을 뒤집어서 target이 될 수 있냐 마냐다. 중요한 것은 뒤집는 횟수는 무제한이라는 것이다. 두 배열의 길이는 항상 같기 때문에 모든 요소가 동일하면 동일해질 수 있다. 그렇기 때문에 두 배열을 각각...
Solution Explanation > 2차원 배열을 다루는 문제라 좀 복잡해 보일 수 있는데 생각보다 간단하다. i개의 팀이 리그를 펼치는데 가장 많이 이긴 팀이 우승팀이 되는 것이다. j는 상대팀이 되는 것이고 i는 승패 결과가 되는것이다. 0이면 진 것이고 1이면 이긴 것이다. 예를 들어, grid가 [[0, 1], [0, 0]]일 경우 grid0...
Solution Explanation > 오름차순으로 정렬된 수열이 주어질 때, 각 수들을 제곱한 후 오름차순으로 정렬하라는 문제이다. 여기서 주의할 점은 음수도 포함될 수 있기 때문에 절댓값을 이용해야 한다는 것이다. 음수가 있을 수 있기 때문에 Two Pointers를 이용해서 해결했다. 양 끝의 두 수의 절댓값을 비교한 후 양수든 음수든 절댓값이 더...
Solution Explanation > 어떤 문자열이 주어질때, 처음으로 두 번 출현하는 알파벳을 구하는 문제이다. Hash Table을 이용하면 풀 수 있다. 처음 출현할 경우 Hash Table에 기록하고 두 번째 출현할 경우 즉시 리턴해주면 된다.
Solution Explanation > 문제 설명이 길지만 크게 어렵지 않은 문제이다. 먼저 문자열을 숫자로 변환해주는 함수 convert를 작성한다. charCodeAt 메소드를 이용해서 알파벳을 숫자로 변환한다. 그리고 firstWord와 secondWord의 변환값의 합이 targetWord와 같은지 비교만하면 끝!
Solution Explanation > 이 문제는 여러 번 출현하는 수를 추출하는 문제이다. Hash Table을 이용하면 쉽게 해결할 수 있다.
Solution Explanation >
Solution Explanation >
Solution Explanation >
Solution Explanation >
Solution Explanation >
Solution Explanation >
Solution Explanation >
Solution 1 Explanation > Solution 2 Explanation >
Solution Explanation >
Solution Explanation >
Solution Explanation >
Solution Explanation >
Solution Explanation >
Solution Explanation >