배열의 마지막 요소를 반환하는 문제이다.다만 배열에 null, {} 등의 일정하지 않은 타입 형식이 있다는게 문제
함수는 n으로 정의되며 이후 호출될 때마다 1이 증가한 값이 반환되도록 설정하였음
Promise 객체를 생성하여, 일정 시간 후 resolve할 수 있는지 여부를 물어보는 문제였다
항상 javascript 내장 메서드인 reduce를 사용했는데, 직접 구현해보니 나쁘지 않았던 것 같다.
함수 배열을 역방향으로 누적하며 더하는 연산이기에 reduce 메서드를 활용하였음
javascript의 filter 메서드를 구현하는 함수였다.개인적으로 지난번 reduce 메서드 구현 때 보다는 확실히 쉬운듯
처음으로 코딩 테스트에서 generator를 사용해보았다generator에 대한 개념을 많이 익히게 되는 계기가 되었는데, while(true)로 yield할 경우 문제가 생기지 않고 제한없이 호출이 가능하다는 점이 놀라웠다.
중앙 노드를 구할 땐 가장 많은 간선이 연결된 노드가 중앙 노드라고는 당연히 생각했는데..성형 그래프에선 두개 이상의 간선이 연결된 그래프는 중앙 그래프라는 것을 망각했다..내 풀이뛰어난 풀이
간단한 함수 생성자를 선언해보는 문제이다.
지문이 굉장히 복잡하고 별로다.매우 간략하게 설명하자면 최종적으로 반환해야 하는 값은 그저 fn 함수에 매개변수 args를 모두 할당하면 끝이다.다만 여기에 한번만 호출하고 그 이후는 반환하지 않는 상태로 만들어야함
그저 Hello World를 반환하면 되는 문제구현해보았다.
lodash 라이브러리의 \_.chunk 함수를 사용하지 않고 배열을 청크 단위로 잘라 붙이는 문제이다.무엇보다 난 lodash와 같이 무거운 라이브러리 자체를 선호하지 않기에 평소에 구현해보아서 어렵지 않았음
js의 class를 원하는대로 다룰 수 있는가?가 관건인 문제이다.
그저 인자의 수만 반환하면 끝나는 문제이다.
처음 주어진 ToBeOrNotToBe 타입의 각 함수 반환 타입을 수정한다.의도하지 않은 결과는 throw new Error를 통해 {"error":"Not Equal"} 과 같은 메시지를 받을 수 있도록 한다.
그지같은 설명을 가진 문제였다.t만큼의 시간 후 args를 인자로 실행되는 함수 t를 정의함cancelFn의 이름의 취소 함수를 반환함
Promise를 await한 후 계산해야 한다는 지식이 있느냐를 물어보는 문제이다.연산속도가 빠르신 분 풀이를 보니 Promise.all을 사용하셨던데 그게 더 빠른 것 같았다.
sort에 주어진 함수를 적용시켜 우선순위를 적용시키는 문제이다. 정렬을 할 줄 아는지를 묻는 문제이다.
주요 포인트는, setInterval 이전 한 번 직접 호출하는 것이다.문제의 예를 보면 시작과 동시에 한번 호출하고 그 이후 t초 이후마다 호출하라고 되어있기 때문임.삽질했다 ㅜ
class 형에 아직도 약하다는 점을 깨달았다.메서드 체이닝을 구현하는 부분에서 new 연산자로 새 class를 만들 필요가 전혀 없이return this로 해결이 된다는 것을 뒤늦게 깨닳음..
주요 지식은, javascript에서 Array와 Object는 모두 Object이다.즉 Object 메서드를 모두 사용할 수 있음
class와 Map 자료형을 활용하여 풀이했음만료기간을 계산하는 로직 때문에 Object 자료형에 setTimeout을 했으나 왜인지 정상동작 하지 않아서 탐구해볼 예정
Map 객체에 Array.join 메서드를 통해 정의한 key값을 저장해두어 불필요 작업이 실행되지 않도록 한다.
달팽이 탐색의 문제이다. 주요 포인트는 풀이가 용이하도록 실제 보드와 같은 배열을 우선 만든 후에\+1, -1이 될 수 있도록 신호를 조절하며 모든 보드를 채우면 된다.
DFS를 구현하여 모든 요소를 순회하며 배열인 요소 중 n차원 까지의 요소들을 flat 하는 것을 요구하는 문제이다.
lodash의 \_.debounce()를 사용하지 않고 디바운싱을 구현해보았음주로 React 프로젝트의 아이디 자동 중복검사, 검색어 입력 등을 구현할 때 사용해봤는데해당 기능도 React.useTransition을 사용해서 이런 구조를 직접 만들어 보는 경험이 새로웠
주어진 키 값에 따른 group 메서드를 Array 형식에 지정하는 문제이다.
Promise.race를 써보기 좋은 예제이다.물론 Promise를 하나 등록해서, 해당 Promise 내부에 setTimeout을 통한 reject도 가능하겠지만 코드가 복잡해진다.
flat을 사용할지 dfs를 사용할지 고민하다 문제의 본 의도가 궁금해 힌트를 보았음yield\*을 통해 본인을 재귀적으로 호출할 수 있다는 정보를 알게되어 본 문제의 의도대로 풀이하였음
Please solve this without using the built-in Function.call method.call쓰지 말라했지 bind랑 apply 쓰지 말라곤 안 했으니까...라는 댓글이 베댓이다.
obj의 타입이 배열인지 객체인지만 구분하면 굉장히 간단한 문제이다.재귀함수 형식으로 호출해서 falsy한 값인지 판별하고 그대로 반환
Map 자료형을 활용하여 이벤트를 등록, 구독한다. 구독 취소의 경우 Set 자료형으로 더욱 유연하게 하시는 분들도 있던데 참고해보면 좋을듯
Promise.all을 사용하게 되면, 전체 함수를 실행하고 나온 결괏값 Promise만 할당해주면 해결될 문제이지만 구현해보는것이 목적
Map을 선언해 최종적인 정렬까지 진행하였음효율이 잘 나오는 코드들을 살펴보니 대체적으로 Object.assign등을 활용해 병합하는 것을 확인
instanceof 만으로 해결하려 했으나, 해당 코드는 원시타입primitive에는 의도한대로 동작하지 않는다는 점을 알게되었음, 추가로 객체가 해당 클래스의 메서드에 접근할 수 있다면 그 클래스의 인스턴스로 간주된다라는 지문을 발견하여 예외 처리를 모두 해주기로 함
Generator와 Promise의 형태를 잘 이해하고 있어야 풀이가 가능한 문제이다.주요 포인트는 모든 Generator 절차를 수행하기 이전에 취소 요청이 들어온다면 비동기 작업이 취소될 수 있도록 할 수 있는가 이다.
코드는 15자로 이루어져있으며, 인덱스가 반드시 채워져 있으므로 10의 자리를 의미하는 11번째 인덱스와 1의 자리를 의미하는 12번째 인덱스의 합이 60을 초과하는지 판별하면 된다.
인덱스를 정의해야하므로, 투 포인터의 합 계산 방법은 불가하며해시맵을 사용하면 O(n)의 시간 복잡도로 해결 가능하다.
노드간의 연결을 확인할 수 있는 실력을 가졌는지 판별할 수 있는 문제
해쉬맵을 사용하여 해당 알파벳이 등장한적이 있는지를 판별하고, 이미 등장한 알파벳이 나왔다면 시작점을 해당 알파벳의 인덱스로 부여한 후 재개한다시간복잡도는 O(n) 선형 그래프이다.
두 배열을 병합한 후 재정렬하고, 중앙값을 구해주면 된다.유의해야할 점은 병합된 배열의 길이가 1일 경우 짝수와 홀수를 떠나 해당 요소를 바로 반환하면 된다.
중앙 확장법을 이용한 풀이이다.주어진 인덱스로부터 확장하는 left와 right 값을 기준으로 펠린드롬을 비교하며 점차 확장해나가며 최대 길이의 펠린드롬을 찾게되는 구조이다,
지그 제그를 따라가며, 해당하는 Row에 문자열을 더한 후 최종적으로 해당 배열을 join해 반환하면 되는 문제이다.
가장 큰 문제는, 아마 변환 작업이 아닌 문제에 제시된 \-2의 31승, 2의 31승 - 1 의 범위에 부합하지 않으면 0이 반환되어야 한다는 조건인데내가 놓쳤던 포인트는 변환 이전이 아닌 변환 이후 해당 범위 존재 여부를 체크해야한다는 것이다.
문제 지문대로 각 번호 별 변환 과정을 진행해주면 된다.parseInt를 사용하지 않으면 꽤 골치아파지나 코테에서 해당 메서드를 막을건 아니니 사용해주면 되겠음
팰린드롬 문자열을 구하는 문제이다.길이를 2로 나누어 문자열의 절반을 기준으로 검사하거나 방식은 다양하게 많을 수 있으나 현재 문자열을 뒤집어 비교하는 방식으로 해결하였음\[...splitedX].reverse() 부분은 현재 브라우저에서 최신 메서드인 toRevers
처음엔 정말 정규 표현식으로 사용해서 매칭된 길이와 비교하려했으나 실패하였음그 이유는 테스트 케이스를 확인해보니, 정규 표현식과 비슷한 구조일 뿐 실제 정규 표현식이 p에 할당되는것이 아니라 오류가 발생하여 재귀적으로 패턴이 올바른지 검색하는 풀이를 사용하였음
투 포인터를 활용하기 좋은 문제이다.각 막대 간격을 통해 물의 양을 구한 후포인터를 이동해가며 최적의 해를 찾을 수 있다.
아래와 같이 풀이하여 문제를 해결할 수 있다.문제에서 상냥하게 4와 9가 포함된 1000 미만의 예시를 모두 잡아주기 때문에 복잡한 로직으로 접근할 필요가 없음
이전 문제와 비슷하게 로마 문자를 선언하고 해당 문자에 해당하는 인덱스에 수를 집어넣는다.해당 문제는 3999 까지의 로마 숫자가 입력으로 주어지기에 복잡한 풀이과정을 사용할 필요가 없음
너무나도 생각 없이 당연하게 풀었던 문제인데, 시간복잡도를 빠르게 줄이신 분들의 풀이를 보니 가장 짧은 문자열을 골라내어 풀이하는 것을 보고 충격을 많이 받았다.배울점이 많다는걸 느꼈음
정렬한 후 투 포인터를 활용하여 풀이하였음중요 포인트는 중복된 값이 답안으로 제출되면 안 되므로, 중복된 값을 포인터가 생략할 수 있도록 처리하였음
현재 값과 이전 등장했던 유사 값들의 합을 비교하여 가장 근접한 3가지 수를 찾도록 하였음투 포인터를 이용하는 점은 15번 문제 풀이와 대부분 유사함
백트레킹을 활용하여 어렵지 않게 구현할 수 있는 문제이다.현재 문자를 기준으로 가능한 조합을 모두 구하여 정답을 반환하면 해결된다.
3Sum 문제의 코드와 크게 다르지 않게 해결이 가능하다.투포인터를 사용하되, 확인해야하는 값이 4개이므로 1번째와 2번째 요소는 반복을 통해 찾도록 한다.이후 3번째와 4번째 인자를 투포인터를 활용하여 빠르게 탐색한다.
ListNode 클래스 구조를 이해하고 투 포인터의 개념을 활용하여 풀어야 하는 문제이다.클래스 구조에 길이를 구하는 메서드가 선언되어 있지 않으므로 첫번째 포인터로 진행하고 두번째 포인터는 n 만큼의 딜레이를 갖고 따라가며 특정 노드를 제거해야한다.
괄호의 올바름을 판단할 때는 모든 과로가 후입선출 될 수 있냐로 결정되기 때문에 stack 자료 구조를 사용하였음올바른 순서에 괄호가 위치해있는지 1차적으로 점검한 후 모든 괄호가 닫혔는지 최종적으로 판단하여 결과를 반환하였음
우선 노드의 다음 요소를 비교하며 하나의 노드로 이어질 수 있도록 정렬한다.두 노드 중 하나의 노드라도 끝까지 도달했다면, 남은 노드를 정렬된 노드에 그대로 붙인다.
백트레킹을 통해 해결하기 좋은 문제이다.특정 길이가 될 때까지 괄호를 열거나 닫는 가능한 모든 경우의 수를 탐색하여 결과 배열에 담아 반환한다.
ListNode를 병합하는 문제이다.모든 노드를 한번에 병합하려 생각하면 어려우니두 노드씩 묶어 병합하여 해결이 가능하다.
1번째 노드와 2번째 노드의 순서를 교환하면 되는 문제이다.복잡한 구현이 필요없이 재귀적으로 호출되게 풀이하였음즉 뒤에서부터 두 요소 씩 순서를 변경하여 초기 head를 마지막 교환하여 완료하는 방식
Node를 원하는 만큼 뒤집을 수 있는지 검증하는 문제이다.탐색은 기존과 동일하게 진행되며 중요 부분은 k 만큼의 배열을 뒤집는 과정이다.
고유한 요소의 수를 출력하면 되는 문제이다.Discussion을 확인하면 알 수 있지만 지문 자체가 굉장히 수준 낮을 뿐더러ex) 오름차 순을 non-decreasing order로 표현하는 등의 모호함정말 고유한 항목의 수를 반환하더라도 거지같은 테스트 케이스로 반려
해당 문제도 지문이 굉장히 명확하지 않은 편이여서 문제 해결이 생각보다 늦어졌다.문제에서 요하는 바는val로 주어진 수를 포함하지 않도록 배열을 재정렬 하고 그 수를 반환해야하는 것이다.
haystack의 문자열에서 needle이 등장하는 인덱스를 반환하는 문제이다.없으면 -1을 반환한다는 전제에서 indexOf를 사용하면 쉬운 풀이가 가능하다는 것을 파악하였음
문제에선 나누기(/)를 쓰지 말라했으나, 코드가 지저분해 지는것이 싫고 납득하지 못한다면 무조건 쓰는 고집이 있는 날 꺾진 못했다.구현한다면 dividend, divisor의 음수 양수 여부를 판단하여 가능할 때까지 가감하는 방식으로 구할 수 있겠으나 귀찮음.
Map을 생성하여 단어들의 빈도를 미리 확인한다.슬라이딩 윈도우 기법을 활용하여 특정 길이만큼의 문자열을 탐색해 어떤 인덱스에서 모든 단어가 동일하게 출현되는지 확인한다.
순열의 사전식 다음 순열을 알아내는 절차와 알고리즘이 있다는 것을 알게되었음순열 요소의 우측 끝부터 왼쪽 방향으로 이동하며 첫 번째로 감소하는 원소 찾기1-1. 예: 1,3,5,4,2에서 3이 그 지점 (5 > 3). i로 지칭nums\[i] 보다 큰 가장 작은 요소
괄호의 상호작용이 일어날 때, 스텍에 현재 인덱스의 길이를 넣었다가잘못된 등호를 만났을 때, 현재 인덱스 - 기록된 마지막 인덱스 = 현재 문자열 길이를 통해 최대 등호 길이를 구하는 로직이다.
원하는 target의 index를 알아야 하는 문제이다.주어진 배열에 존재하지 않을 경우 -1을 반환해야하는 시점에 indexOf를 써도 통과가 될지 반신반의하며 제출했으나 통과됨
정렬된 nums 배열에서 target원소의 시작과 끝 인덱스를 추출하는 문제이다.너무 간단하게도 js엔 해당 메서드가 지원되고있다.
최악의 경우 시간 복잡도가 O(n)이 나오는 방식으로 해결하였다.기존 인덱스를 찾아 반환하는 요소와 달리 해당 target이 입력되어야 할 인덱스를 찾기 위해 요소를 순회하여 찾았음
스도쿠는 대각선 검사를 하지 않는다는 것을 알게되었음..서브 박스를 검사하는 로직이 굉장히 중요하다.
백트레킹을 활용해야 하는 문제이다.이전 문제 풀이와 같이 3x3 서브 박스 검증이 가능하다면 어렵지 않은 풀이가 가능하다.
해당 문제의 설명이 매우 조악하다고 생각하기에 재설명하고자 한다.n이 1일 경우 반환값은 "1"이라는 전제를 두고실제로 사람이 읽는 것처럼 n에 대한 정보가 입력되는데 예시는 아래와 같다.
DFS를 활용하여 가능한 경우의 수를 구하면 된다.다만 다른 조합 문제와는 다르게 중복 선택이 가능하므로해당 인덱스의 요소를 선택할 경우 다음 요소로 넘어가지 않고 다시 체크하는것이 중요하다.
백트레킹을 활용해야 하는 문제이다.용이한 탐색을 위해 오름차 순으로 배열을 정렬한 후 target에서 현재 인덱스의 요소를 빼며 정확히 맞아 떨어지는 순간에 조합을 정답 배열에 추가한다.중복 요소를 피하는 로직이 필요하며, 다음 백트레킹을 실행한 후 현재 조합을 빼 모
해당 배열의 값을 활용하여 인덱스 비교를 통해 없는 값을 찾아내는 방법이다.찾고자 하는 범위는 1~n까지만 조회하면 되므로 범위를 아래와 같이 잡았음
투 포인터를 활용해 쉽게 풀이가 가능한 문제이다.총 강수량을 축적해가며 물이 얼마나 고일 수 있는지 판단한다.해당 방향의 가장 높은 벽 - 현재 벽의 높이 = 쌓일 강수량위 공식을 그림을 통해 알기쉽게 표현되어있다.
문제에서 분명히 수로 변환하지 말라했는데 대부분의 풀이는 BigInt형으로 변환하여 곱셈한 후 문자열로 변환하여 제출했음..해당 풀이는 두 수의 일의자리부터 곱셈 및 올림 처리를 계산하여 정답 문자열을 구성하고 반환하는 풀이임
질문 자체가 엉망이기 때문에 이해하는데 시간이 좀 걸린 문제이다.정리해서 요약한 내용은 다음과 같다.각 배열 요소는 해당 요소에서 얼마나 먼 거리까지 점프할 수 있는지를 수로 나타내는 값이다.요소의 마지막까지 도달하는데 필요한 최소 점프 수를 반환해라※ 인덱스는 0부터
백 트레킹을 이용해 쉽게 풀이할 수 있는 문제이다.순열을 구해 결괏값으로 반환하면 됨
이전 문제와는 다르게 고유한 순열을 반환해야한다.즉 Map을 사용하여 숫자들의 출현 빈도를 파악하고 출연한 빈도 내에서만 가능한 순열을 모두 구해준 후 결과를 반환한다.해당 문제또한 백트레킹을 활용하여 모든 가능한 경우의 수를 조회한다.
이미지 회전 문제는 굉장히 간단한 문제이다.다음과 같은 공식의 적용이 필요하다대각선을 기준으로 요소를 반대편으로 옮기는 Transpose 작업 실행변경된 배열을 역순으로 재정렬하는 Reverse 작업 실행90도 회전 완료
Map 객체를 활용하여 풀이하였음문자열의 Anagram 여부를 판단하기 위해 정렬하여 키 값으로 확인했음Map 객체를 Array로 변환하기 위해 Iterator를 사용하여 변환
자바스크립트는 이미 Math.pow로 제곱 함수가 구현되어있어 복잡한 로직을 생각할 필요가 없다.문제 의도는 알겠으나, 가장 싫어하는 것은 이미 구현된 메서드를 따로 구현하는 것단, 제곱의 원리나 프로그래밍으로 구현하기 힘들 것 같다는 생각이 드는 분들은 한번 구현해봐
백트레킹의 대표적인 문제인 N-Queens 이다.행을 기준으로 각 열에 퀸을 배치하여 가능한 모든 경우의 수를 파악하고 정답 배열에 추가하였음
해당 문제는 이전 문제와 동일하게 백트레킹을 활용하여 풀이하면 된다.다만, 이 전 문제는 가능한 경우의 수를 2차원 배열로 반환해야 했던 것과 다르게현재 문제는 경우의 수를 반환해야한다.
최대 값인 Subarray의 합을 찾아내는 문제이다.구현은 매우 간단하게 가능한데, O(n)의 시간복잡도 내에서 전체 배열을 순회하며어느 타이밍에서 최대 합이 나오는지 매 요소마다 판별하면 됨
나선형 메트릭스는 대부분의 알고리즘 풀이 사이트에서도 많이 등장하는 문제이다.해결 방법은 직접 요소를 순회하며 방문했던 축을 축소하는 방식으로 풀이됨
점프 가능한 최대 거리를 갱신하며 nums 배열을 순회하면 된다.만일 특정 인덱스의 요소를 순회할 때, 현재 기록된 최대 점프 가능 거리를 초과하였다면 도착 불가능하므로 false를 반환하는 구조이다.
시작 시점을 기준으로 오름차 순 정렬한 후 순회하며현재 조회중인 지점의 종료 시간과 다음 지점의 시작 시간을 비교하여 병합 여부를 판단하면 된다.
주요 포인트는 겹치지 않는 구간에 대해 추가하고 구간이 겹치는 부분에 대한 병합 구간을 추가할 수 있느냐 이다.
마지막 단어의 길이를 알기 위해 필요한 과정은 다음과 같다.문자열의 좌우 공백 제거단어별로 분리마지막 단어의 길이 반환하여 아래와 같은 로직이 작성되었음
2차원 매트릭스에서 순차적으로 배열에 번호를 채워 출력하는 문제이다.이전에 해결했던 바와 같이 각 축의 포인터를 생성하여 직접 순회하며 번호를 채우는 방식으로 해결하였음
숫자를 생성하고 팩토리얼을 미리 계산한 후 k번째 순열이 어떤 수로 구성되어있는지 확인하는 문제이다.아마 많은 의심이 들 부분은 마지막 결괏값을 구하는 부분일텐데 간략히 설명하자면 다음과 같다.n개의 숫자로 만들 수 잇는 순열 수는 n! ex) n이 4라면, 순열은 2
미리 전체 ListNode를 순회하여 길이를 파악한 후, 꼬리가 될 지점의 이전 지점을 기점으로 k만큼 잘라 이어붙여 해결한다.
이동에 필요한 경우의 수를 계산하기 위해 첫 번째 열과 행을 1로 초기화하고, 초기화 된 셀을 기준으로 위, 왼쪽 방향의 경우의 수를 합산해 현재 셀의 경우의 수를 계산할 수 있음최종적으로 우측 하단의 셀 값을 통해 가능한 경우의 수를 알 수 있다.
이전 풀이와 대부분 동일한 방식으로 진행되며, 첫번째 행과 열을 1로 초기화 하는 것이 아닌 이전 셀들의 값으로 채워넣으므로 써 장애물이 있을 경우에 발생하는 예외를 방지할 수 있다.장애물이 없이 초기화 된 셀의 경우는 이전과 같이 좌측 셀의 경우의 수 + 상단 셀의
이전 문제들과 같이 풀이하되, 차이점은 각 셀마다의 가중치가 있다.해당 가중치를 판단하여 셀에 값을 부여할 때 어떤 경로로 지나가는 것이 최소 값인지 판단할 수 있음
정수인지를 판별하는 문제이다. 다만 테스트 케이스가 굉장히 조악하고 악명이 높기 때문에 가장 쉬운 방법으로 javascript Number 형변환을 통해 문제를 해결하였음 Infinity의 경우 javascript 내에선 number형으로 사용 가능하지만, 문제의
지문에서도 나와있듯 큰 정수에 1을 더해야 하기 때문에 BigInt 자료형을 사용해야한다.숫자배열 -> 문자열 -> BigInt -> 문자열 -> 숫자배열순으로 변환하며 계산하였음
단순히 파라미터로 입력받은 두 값을 더한 후 이진 문자열로 반환하면 되는 문제이다.다만 값이 매우 크기 때문에 parseInt를 통해서는 정상적인 변환이 불가하다javascript에선 0b문자를 이진 문자열 앞에 붙임으로써 정수가 아닌 2진수 임을 명시할 수 있다.실제
단어 사이에 공백을 균일하게 두는 것을 목표로 하는 문제이다.유의해야할 포인트는 다음과 같다.maxWidth보다 짧은 문자열을 만들되, 최대한 많은 단어가 들어갈 것공백의 수를 동일하게 만들 수 없다면, 문자열에 좌측 공백부터 우선적으로 보충할 것하나의 단어 혹은 마지
제공된 파라미터 x의 제곱근을 구하는 문제이다.내장된 함수를 사용하지 말라는 경고 때문에 Math.sqrt를 사용하지 않고 진행했음투 포인터 방식을 사용하면 최적화 하기 용이하겠지만 널널한 시간복잡도로 그냥 1부터 차근차근 확인하는 방식으로 진행하였음
DP 방식을 활용하여 풀이하면 좋은 피보나치 수열 관련 문제이다.계단을 오르는 경우의 수를 계산할 때, 계단을 오르는 보폭을 1칸 혹은 2칸으로 정의한다면 n번째 계단까지 오를 수 있는 경우의 수는 피보나치 수열의 n번째와 같다.
스택의 개념을 이해하면 쉽게 풀이가 가능한 문제이다./를 기준으로 split하게되면, 중복된 /를 효과적으로 제거할 수 있고 배열 요소를 순회하며 상위 이동과 디렉터리 이동만 판단하면 완료된다.
이 문제는 편집 거리, Levenshetein 거리로 불리는 알고리즘을 알면 매우 쉬운 풀이가 가능하다.word1의 길이를 m, word2의 길이를 n이라고 가정했을 때 (m+1) \* (n+1)크기의 2차원 배열을 생성한다.배열의 첫번째 행과 열은 0부터 m, n까지
행렬을 순회하며 0 요소가 있는 행과 열을 감지하여 저장한 후 재순회하며 해당 열이나 행의 요소가 발견되었을 때 0으로 변환하는 로직을 구성했음시간복잡도가 높기에 문제가 될거라 판단하였으나 생각과는 달리 풀어져서 놀라움
target요소가 2차원 행렬 내에 존재하는지를 확인하는 문제이다.다만 배열의 모든 요소를 순회하며 검사한다면 문제 풀이 조건에 어긋난다.따라서 이미 오름차 순으로 정렬되어있는 배열의 마지막 요소를 저장하여 target요소가 포함될 행을 파악하고 해당 행 내에서 tar
내장된 정렬 알고리즘을 사용하지 않고 색상을 빨간색 > 하얀색 > 파란색 순으로 정렬하는 문제이다.복잡한 생각할 필요 없이 요소의 수를 확인한 후 해당 요소의 수 만큼 새로 할당하는 방식을 진행하였음
슬라이딩 윈도우를 구현하여 쉽게 풀이할 수 있는 문제이다.중요 포인트는 각 윈도우 별 스펠링의 수를 대조하여 최소 길이의 윈도우를 찾아내는 것이 중요하다.처음에는 고정된 윈도우 길이를 한칸씩 이동하며 검증하는 방식을 사용했으나, 시간 초과가 발생하여 우측 포인터를 미리
조합을 구하는 로직을 작성해야하는 문제이다.백트레킹을 사용하여 조합을 구하면 된다.
백트레킹을 사용하여 풀이하는 문제이다.고정된 길이가 있지 않기 때문에 가능한 모든 경우의 수를 입력하면 된다.
현재 나온 숫자를 Map 자료구조에 담아 빈도를 정의하고 2회 이상 출연했다면 이후 부터는 원본 배열에서 제거하도록 구현하였음
배열 내에 target이 있는지 검사하는 문제이다.간단히 내장된 메서드를 통해 풀이가 가능하기에 복잡한 로직은 구현하지 않겠음
연결된 ListNode에서 중복된 요소를 모두 제거하고 이어붙이는 문제이다.포인트는 중복된 요소를 반복하여 모두 생략하고 이전 요소와 이어붙이는 로직이다.
해당 문제는, 이전 문제와 거의 동일하게 풀이하되, 중복된 요소를 삭제하는 것이 아닌 유일한 요소로 변환하여 리스트를 연결하는 문제이다.
다음과 같은 풀이 공식이 있는 문제이다.모든 막대를 순회한다.각 막대는 stack자료 형태로 보관된다.만일 i번째의 막대 높이가 stack에 저장된 마지막 높이의 막대보다 낮을 경우 다음 로직을 수행한다.3-1. 마지막 막대의 높이를 저장한다.3-2. 막대의 너비를 계
해당 문제는 이전 문제와 풀이과정이 많이 비슷한것을 알 수 있는것이, 행렬 데이터를 순회하며 히스토그램 문제로 변환하여 풀이가 가능하다.높이 데이터를 행을 순회하며 쌓아가고 그렇게 축적된 높잇값을 활용하여 히스토그램 알고리즘을 활용하여 풀이해야한다.
주석을 남겨 문제를 풀이하였음Class의 성질을 정확히 파악하느냐 못하냐를 구분할 수 있는 문제임lessTail의 next 값으로 greaterDummy.next를 주는 부분이 핵심
두 배열을 병합하는 일련의 과정을 담아낸 문제이다.쉬운 풀이가 가능하기에 추가적인 설명은 생략해도 좋을 것 같다.
grayCode를 구하는 방법을 알면 풀이가 간단한 문제이다.각 step(n)에서 이전 시퀀스에 2^(n-1)을 더해 추가하는 것이 현재 시퀀스가 되는 구조이다.
기초적인 백 트레킹 문제이다.생각할 것은 많지 않고 주어진 nums를 활용하여 중복을 허용하지 않는 Subsets를 만들면 된다.백 트레킹의 개념을 이해하고 있다면 어렵지 않게 풀 수 있음
dp의 개념을 파악하고 있다면 풀이가 어렵지 않다.문제에서 요구하는 경우의 수가 딱 두개이기 때문한자리 수가 이룰 수 있는 경우의 수두자리 수를 붙여 이룰 수 있는 경우의 수
ListNode를 제 자리에서 회전시킬 수 있냐가 관건인 문제이다.포인터 세개를 두고 다음과 같은 형식으로 Swap을 진행한다.
백트레킹 문제이다.IP 주소의 기본 구성을 잘 모른다 하더라도 친절히 적합한 IP 주소의 요건을 문제에서 제시하기에 큰 어려움 없이 풀이가 가능하다
해당 문제는 원래 재귀적으로 풀면 굉장히 간단한 문제이다.중위탐색이라는 개념을 이해하고 있다면 재귀적인 생각을 안 할 수가 없는데그렇게 되면 시간 복잡도는 문제될 것이 없지만 공간 복잡도가 굉장히 커지게 된다.따라서 문제에 제시된 대로 stack을 구현해 재귀의 개념을
주석으로 설명해두었지만, 가장 중요한 핵심은 Binary Search Tree의 특성을 잘 파악하고 있냐 이다.현재 노드를 기준으로 왼 편에는 더 작은 수가, 오른 편에는 더 큰 수가 와야 한다는 기본 개념을 안다면 동적 프로그래밍으로 쉽게 풀이가 가능하다.
해당 문제는 문제 그대로 s1과 s2를 조합하여 s3를 만들 수 있는지를 판별하는 문제이다.다만, 해당 문제를 백트레킹으로 풀이하려다 보니 Time limit이 발생하였다.따라서, dp를 통해 메모이제이션 하며 풀이하였음
BST의 기본 형식(좌측 노드는 현재 노드보다 작아야 하며 우측 노드는 현재 노드보다 커야함)을 이해하고 있으면 쉽게 풀이가 가능한 문제이다.올바른 BST인지 판별하면 끝
지문에서 언급되어 있듯 정확히 두 노드가 잘못 되었다는 표기가 있기에 풀이가 한층 더 수월하다.중위 순회로 변경 위치의 첫 노드를 잡고 부모를 기준으로 올라오며 문제가 되는 최상위 노드와 변경해주면 해결된다.
트리의 구조를 알고 있다면 풀이가 어렵지 않은 문제이다.각 트리엔 좌측, 우측 자식 노드가 있을 수도 있고 없을 수도 있다.즉 동일한 트리인지 확인하려면 자식 요소를 모두 순회하며 각각의 구조와 값을 비교하면 된다.
tree구조를 이해하고 있다면 어렵지 않게 풀이가 가능하다.좌측, 우측 노드가 있고 각 노드가 대칭인지 재귀를 통해 확인하여 풀이가 가능하다.
노드를 탐색하면 되는 문제이다.별 다른 어려움 없이 해당 노드가 있는 깊이를 파악한 후 해당 인덱스의 배열에 담아 반환하면 됨깊이 우선 탐색의 개념을 이해하면 충분히 풀이가 가능할 것 같다.
너비 우선 탐색의 개념을 활용하여 풀면 좋은 문제이다.dfs로도 풀 수 있지만 개념은 bfs에 가깝기에 해당 방법으로 풀이해보았음부모 요소를 우선적으로 살펴보며 isReverse flag를 toggle 하는 방식으로 역행 여부를 결정하였음
최대 깊이를 탐색하는 dfs를 활용하면 쉬운 풀이가 가능하다.깊이를 한 층씩 추가하며 현재까지의 깊이와 최대 깊이를 비교하는 방식으로 수행하였음
inorder와 preoder의 특성에 대해 알아야 풀이할 수 있는 문제이다.preorder는 i번째 노드가 root 노드가 될 수 있는 순서이며inorder는 i번째를 기준으로 좌측 인덱스의 노드는 좌측 노드, 우측 인덱스의 노드는 우측 노드이다.
postorder는 마지막 인덱스가 루트 인덱스임을 알면 이전 문제와 동일한 방식으로 재귀호출하여 풀이가 가능하다.
bfs를 통해 queue를 활용하여 노드를 탐색하다 자식을 unshift 메서드를 통해 배열의 앞쪽부터 채워넣어 목표하는 배열 순서를 반환하면 된다.
재귀적으로 함수를 호출하며 풀이가 가능하다. 문제에서 언급되었듯이 오름차 순으로 정렬된 배열이기 때문에 배열 중앙 요소를 루트 노드로 설정하여 재귀적으로 호출하면 된다.
linked list를 tree node로 변환하며 중요점은 가운데 값을 찾기 위해 세개의 포인터를 두고 이동해가며 중간에 존재할 루트 노드를 찾는 과정이다.
해당 문제에서 언급된 height-balanced된 tree는 높이의 차이가 2이상 나지 않는 것을 의미한다.즉 1 까지의 차이는 검증하지 않음자식 노드에서 문제된 -1은 부모 노드로 전이되며 추가 탐색하지 않게끔 구현하면 시간복잡도 줄이기에 용이하다.
해당 문제는 정말 지문 그대로 가장 가까운 leaf 노드의 depth를 반환하면 되는 문제인데, 문제 제목을 보고 무지성 dfs로 풀이하고 보니 bfs 풀이법이 훨씬 효율적이라는 점을 알게되었음..
해당 문제는, dfs를 잘 이해하고 있으면 문제 없이 풀이가 가능하다. 주요 포인트는 메인 함수를 재귀적으로 호출하여 remain 값과 leaf 노드의 값을 비교하여 풀이한다는 점
leaf node의 특성과 dfs를 알고 있다면 쉽게 풀이가 가능한 문제이다.자식 노드를 재귀적으로 탐색하며 목표치와 현재까지의 합을 비교하며 정답을 추려내면 해결됨
Binary Tree를 Linked List로 변환하는 문제이다.Linked List는 left를 갖지 않는다는 명시가 있는점을 참고해야함전위 순회를 기준으로 연결해야 하기에 leftSubTree가 우선적으로 오며 이후 leftSubTree의 끝에서 rightSubTr
백트레킹을 활용해 풀이하려 했으나 시간 초과가 발생하여 dp 풀이로 변경하였음초기화를 위해 문자열보다 1만큼 큰 배열을 만들고 첫 열은 반드시 1로 설정되게 함
BFS를 활용해 풀이해야 하는 문제이다.같은 depth의 node를 연결하면 되는 문제임
같은 depth간의 노드들을 이어줘야 하는 문제이다.같은 depth를 탐색한다는 것은 너비를 우선적으로 탐색한다는 의미이므로 bfs 풀이를 적용하였음순차적으로 다음 노드를 순회하며 탐색한다.
파스칼의 삼각형은 매우 유명한 문제이다.이전 행의 두 숫자의 합이 현재 열의 값이 되는 문제임각 열의 첫 번째와 마지막은 항상 1의 값을 갖고 있다는 점을 감안하여 열의 중앙에 위치한 값들을 순회하며 이전 행의 값을 통해 구해주면 됨
이전과 마찬가지로 파스칼 삼각형을 구축한 뒤 입력받은 row의 index를 반환하면 풀이가 가능한 문제이다.
dp를 사용하여 메모이제이션 하며 최소한의 공간으로 풀이가 가능한 문제이다.top down 방식으로 풀이하였지만, 위에서 아래로 내려가는 경우는 dfs를 사용하여 복잡하고 공간 복잡도가 늘어날 수 밖에 없는 구조라는 점을 확인했음최종적으로 bottom up 방식으로 풀
해당 문제는 배열을 순회하며 최저 금액을 갱신하고 최대 이익을 반환하면 되는 문제이다.루프를 돌며, 최저 금액을 갱신할 때는 매도할 수 없기에 건너뛰고, 아닌 경우는 현재의 이익을 갱신하며 최대 이익인지 확인한다.
이전 문제와 다르게 다양한 구간에서 매수, 매도가 가능하다.당연히 복잡하게 고민할 필요 없이조금이라도 수익이 나는 구간에서 즉시 판매하고 다시 매수하는것이 가장 효율적인 방법이다.
dp를 통해 다양한 상탯값을 설정하고, 초기화를 진행하여 문제를 풀이하였음
DFS를 통해 루트부터 서브트리를 따라가며, 계산한 합으로 나올 수 있는 최대치를 반환하는 문제이다.
펠린드롬의 비교 문제는 투 포인터를 활용하여 각 인덱스의 문자열이 같은지 비교하면 되는 문제이다.불필요한 문자를 정제하는 과정이 가장 중요하다.
가장 중요한 순서는 다음과 같다.한 글자마다 다른 알파벳으로 교체해가며 endWord까지 변경되는 과정 기록최단 경로를 찾아 반환
BFS를 활용하여 간단한 풀이가 가능하다.주요 로직은 다음과 같다.endWord가 wordList에 있는지 우선 검증 (없다면 당연히 생성 불가)단어의 각 자리를 a-z 까지 변경해보며 wordList 내에 있는 단어이며 아직 생성해보지 않았다면 queue에 추가end
Set 자료형을 활용하여 중복되는 숫자를 제거하고 순회하며 O(n)의 시간 복잡도로 처리 가능한 문제이다.풀이 프로세스는 다음과 같다.숫자의 시작점인지 확인한다. (Set내에 현재 숫자 -1 의 숫자가 있는지 확인)다음 숫자가 있을 때까지 연속되는 횟수를 카운트 하며
해당 문제는 깊이우선탐색을 진행하며 leaf node에 도달했을 때 문자열로 계산된 합계를 누적하여 풀이하는 방법으로 풀이가 가능하다.
해당 문제는 상, 하, 좌, 우가 X로 둘러쌓인 O가 X로 변환된다는 전제로 어떤 변화가 일어나야 하는지 묻는 문제이다.풀이 절차는 다음 3가지 이다.모서리의 O는 X가 될 수 없다. (모서리 이므로 4 방면이 모두 둘러쌓일 수 없음)모서리의 O와 연결된 O는 X가 될
해당 문제는 팰린드롬을 탐색해야 하는 문제이다.다만 부분 문자열의 경우 백 트레킹 방식을 사용하여 재귀적으로 탐색해야 하므로 해당 방식을 채택하였음
해당 문제는 모든 노드를 복사된 노드로 replace 해야하는 문제이다.dfs를 통해 재귀적으로 함수를 호출하며 이웃 노드들을 clone하는 방식으로 풀이하였음
해당 문제의 주요 포인트는 아래와 같다.획득 가능한 전체 가스량이 이동에 필요한 전체 비용보다 작으면 불가능 (-1 반환)N번째 주유소를 시작점으로 순회 중 가스 잔량이 충전량에 비해 부족한다면 불가능 (다음 시작점을 포인트로 변경)주유소는 재순회 할 필요가 없음. 이
해당 문제는 다음과 같은 절차로 2번 전체 순회하여 풀이가 가능하다.모든 아이에게 최소 1개씩의 사탕을 할당한다.좌측에서 우측으로 순회하며 i번째 아이가 i - 1번째 아이보다 높은 점수를 갖는 경우 i - 1번째 아이의 사탕보다 1개를 더 부여한다.우측에서 좌측으로
해시 맵 자료구조를 사용해 풀이하기 좋은 문제이다.풀이 과정의 중요 절차는 다음과 같다.key를 현재 노드로 갖고, value를 복사된 노드로 갖는 해시 맵 생성현재 노드와 복사된 노드를 추적하며 next와 random에 해당하는 클론 노드를 연결해시 맵에 저장된 클론
해당 문제를 풀이하는 과정은 다음과 같다.dp를 통해 해당 인덱스의 문자열 까지 분할이 가능한 단어인지를 판별한다.2중 반복을 통해 순회하며 이전까지의 분할 가능 여부와 현재까지의 분할 가능여부를 판단한다.최종적으로 문자열의 끝까지 분할이 가능한지 확인한다.
해당 문제를 풀고 보니 가장 효율성 있는 코드를 작성하신 분이 대단함을 느꼈음풀이 절차는 다음과 같다.backTracking 함수에서 전달받은 인자를 통해 시작점을 파악함시작점에서 1씩 증가하는 반복문을 통해 문자열을 잘라내어 해당 단어가 사전에 있는지 파악한다.bac
해당 문제는 노드를 순회하며 노드끼리 연결되어 있는지를 판별하는 문제이다.난 직관적인 풀이를 선호하기에 다음과 같은 방식으로 풀었지만 시간을 효율적으로 단축할 수 있는 좋은 풀이를 내 풀이 아래에 설명하겠음slow(head), fast(head) 노드를 생성함slow.
해당 문제는 자료형 중 Set을 사용하여 풀이하면 쉬운 문제이다.ListNode를 Set에 저장해두고, 입력 받았던 적이 있는 ListNode라면, 순회하는 Cycle이 존재한다는 의미이므로 해당 ListNode를 반환하고 없다면 null을 반환한다.
해당 문제는 다음과 같은 절차로 풀이해야 한다.slow와 fast 포인터를 두어 각각 다르게 전진하며 중간 지점을 탐색한다.이후 두 번째 절반 노드 목록을 뒤집는다(reverse)두 노드 목록을 연결한다.
별도의 풀이가 필요하지 않은 문제이다.전위 순회를 위해 깊이 우선탐색을 진행한다.탐색된 노드를 순서대로 반환하면 끝
후위 순회를 위해 재귀적인 호출을 먼저 하고 현재 노드의 값을 입력하는 방식으로 풀이가 가능한 문제이다.간단한 문제이기에 복잡한 설명이나 주석은 생략하겠음
해당 문제는 Node class를 선언하여 풀이해야 하는 문제이다.처음엔 그저 Map을 사용해서 풀이하려 했으나, 간과한 점은 조회 및 업데이트 시점에 가장 최근 캐시로 유지되는 LRU에 대한 개념이 부족했음해서 연결형 Node를 생성하여 가장 오래 조회되지 않은 노드
해당 문제는 삽입 정렬을 연결형 노드를 통해 구현하는 문제이다.풀이 과정은 다음과 같음가장 왼쪽에 위치할 노드 생성매 반복마다 1의 노드를 통해 좌측부터 현재 노드와 값을 비교해가며 이전 노드 탐색이전 노드와 현재 노드를 연결기존 현재 노드의 다음 노드를 탐색
해당 풀이는 병합 정렬을 활용한 풀이이다.풀이 절차는 다음과 같다.입력받은 연결 노드의 중간 노드를 기준으로 분리(slow, fast)재귀적으로 분리된 연결 노드를 분리merge 함수를 통해 전달된 두 노드를 정렬하며 병합
해당 문제는 점의 기울기를 구하는 공식을 알면 풀이가 간단한 문제이다.두 점의 기울기를 구하는 방법은 다음과 같다.기울기 = y2 − y1 / x2 − x1해당 공식을 바탕으로 2중 반복하며 각 좌표별 최대 위치할 수 있는 같은 기울기의 점 수를 구하면 된다.
해당 문제는 보자마자 스택형 문제임을 직감했다.해당 자료구조를 떠올렸다면 구현에 큰 어려움이 없는 문제임tokens를 순회하며 각 기호에 맞는 처리를 하면 된다.단, 주의해야 할 점은 두 번째 pop()된 선입된 요소가 나누기 작업 시 분자에 위치해야함
해당 문제는 js의 내장 메서드를 활용하여 충분한 풀이가 가능한 문제이다.풀이 절차는 다음과 같다.좌우 공백 제거공백 단위 단어 분리다중 공백 제거단어 역순 정렬공백을 통한 단어 조합
처음에 해당 문제를 슬라이딩 윈도우로 풀이하려다 시간 초과로 실패했음O(n)의 시간복잡도로 풀이하는 방식을 찾아보니 다음 풀이절차가 있음중요 포인트는 최솟값을 갱신하는 것인데, 곱하기 연산은 음수와 음수를 곱했을 때 최댓값이 나올 수 있으므로 가장 낮은 수를 알고있어야
해당 문제는 원래 투 포인터 문제이다.다음과 같은 절차로 풀이하는 것이 정석0번째 요소를 left로 정의마지막 요소를 right로 정의left가 right보다 작은 동안만 while 반복하며 중간 값을 통해 포인터를 움직여줌O(n log n)의 시간 복잡도로 풀이 가능
중복 요소가 추가되었다고 하나, 문제에서 요구하는 점은 이점과 마찬가지로 최솟값을 찾는 것이다.
이 문제에서 구현하고자 하는 MinStack은 필요할 때 요소 내 최솟값을 조회하고자 하는 커스텀 클래스이다.stack을 구현하며 min 배열을 통해 현재 최솟값을 기록할 배열을 추가함배열 요소가 push 될 때 현재 최솟값을 같이 계속 누적함. 즉 현재 요소의 인덱스
해당 문제의 풀이 과정은 다음과 같다.전제로 headA와 headB의 요소 중 최소 하나의 노드는 반드시 교차함각 root를 근원지로 한 노드들이 교차할 때까지 반복하며 요소의 끝에 도달했을 때 root로 이동함교차된 요소를 반환함
해당 문제는 간단히, 내 앞 뒤에 있는 요소가 모두 나보다 작다면 그 인덱스를 반환하면 되는 문제이다.풀이 과정은 다음과 같다.nums 배열 1회 순회 O(n)현재 요소의 앞 뒤 요소를 비교하며 하나라도 작거나 같다면 무시모두 현재 요소보다 작은 수라면 현재의 인덱스
해당 문제는 현재 요소와 다음 요소의 최대 간격을 알아내는 문제이다.풀이 과정은 다음과 같다.요소가 하나 뿐인 경우 0 반환요소 정렬순회하며 최대간격 기록 O(n)최대 간격 반환
해당 문제는 버전을 비교하여 1, -1, 0으로 반환하는 문제이다.sort()메서드에 콜백으로 주기 좋은 함수인 셈풀이 과정은 다음과 같다..을 기준으로 각 버전 분리분리된 배열 중 최대길이 만큼 반복 순회각 버전을 비교한다. 이 때 버전이 생략된 배열의 경우 0으로
해당 문제는 순환 소수를 괄호로 묶어 풀어야 하는 문제이다.소수점을 구하는 원리를 이해하고 풀면 훨씬 좋게 풀이할 수 있다.예시: 4 ÷ 333)초기 나머지: 4 % 333 = 4 → 정수 부분은 0, 나머지는 4.소수 첫째 자리:나머지 4 × 10 = 4040 ÷ 3
투 포인터를 정의하며, 왼쪽 포인터는 배열의 시작점, 오른쪽 포인터는 배열의 종료점에 위치한다.각 포인터 위치에서의 합계를 계산하여 포인터를 이동시키거나 반복문을 종료한다.각 포인터의 인덱스 위치가 아닌 실제 정수형 위치를 반환하기 위해 +1을 하여 반환한다.
나머지 값이 있는 동안 순회인덱스 계산을 위해 0-25 범위로 맞춤나머지 값을 통해 알파벳 계산몫을 계산하여 다음 계산에 활용
Map 자료형을 사용한다.숫자의 빈도를 기록한다.Iterator를 사용해 Map을 순회하며 최빈값을 조회한다.
각 자릿수의 문자는 현재 문자의 번호 \* 26(A-Z의 길이)임을 의미함순회하며 현재 문자의 번호에서 64(A 이전의 문자열 코드)를 뺌현재 자리의 누적 수 \* 26 + 현재 문자코드 번호를 누적누적된 값 반환
0으로 끝나는 것은 10의 배수임을 의미10은 2와 5의 곱0으로 끝나는 수는 2와 5의 쌍의 수로 결정(단 10!을 예로 보았을 때도 2의 수가 5보다 훨씬 많이 등장하기에 5로 계산하는것이 효율적, 어차피 5의 빈도 수가 낮으므로 쌍의 수로 계산하는 결과와 5의 수
TreeNode를 연결형으로 조회할 수 있도록 LinkNode클래스 생성생성된 LinkNode클래스에 TreeNode를 전위순회 하며 알맞게 입력입력된 LinkNode클래스의 특성을 활용하여 다음 요소 확인 및 반환 메서드에 적절히 연결
최소한의 체력 요구량을 미리 알아야 하므로 공주 위치에서 용사 위치로 이동각 이동의 계산 시 최소 1의 체력은 유지되어야 함용사 위치에 해당하는 값 반환
필요한 컬럼을 Person 테이블에서 조회한다.LEFT JOIN을 통해 Address 테이블과 personId 컬럼 값으로 조인한다.
2중 SELECT를 사용한다.DISTINCT를 통해 같은 봉급의 중복값을 제거한다.salary를 내림차 순으로 정렬한다.상위 1개의 요소를 건너뛰고(OFFSET) 다음 요소 1개만(LIMIT) 반환한다.
N의 값을 인덱스에 맞게 N - 1로 재설정한다.salary를 기준으로 내림차 순 정렬한다.정렬된 결과 중 N번째의 결과 하나만을 가져온다.가져온 결과에서 salary 컬럼을 중복 제거하고 반환한다.
DENSE_RANK()를 사용하여 순위를 score 내림차 순 기준으로 구한다.점수를 내림차 순으로 정렬한다.구해진 순위와 내림차 순 정렬된 점수를 행으로 묶어 반환한다.
배열의 모든 수를 문자로 변환문자의 앞에 위치할 경우의 수 생성생성된 문자를 localCompare를 통해 비교정렬된 배열의 첫 번째 요소가 0이라면 요소는 모두 0이므로 0반환아니라면 배열을 문자열로 합쳐 반환
LAG로 직전 행의 정보를 조회한다.LEAD로 직후 행의 정보를 조회한다.직전과 직후가 현재 숫자와 같은 행을 조회한다.DISTINCT로 중복을 제거하여 조회된 행을 반환한다.
Self Join을 통해 자신의 테이블을 참조한다.managerId가 id와 같은 행을 찾는다.급여가 자신의 매니저 급여보다 큰 직원들을 찾는다.해당 직원들을 반환한다.
email을 기준으로 그룹화 한다.그룹화 된 메일의 행 수가 1을 초과(중복)할 경우를 찾는다.중복된 메일을 반환한다.
LEFT JOIN을 통해 Orders.customerId와 Customers.id를 활용하여 테이블 병합병합된 테이블에서 Orders.customerId컬럼이 존재하지 않는 행 탐색해당 행 반환
Employee 테이블과 Department 테이블 JOIN조인 결과 중 departmentId별 최고 급여를 할당부서, 이름, 급여를 반환
RankdedSalaries라는 임시 테이블 생성1-1. PARTITION BY를 사용하여 각 부서별로 연봉 순위(SalaryRank)를 매기고, 모든 행을 유지RankedSalaries 테이블에서 SalaryRank에 따라 부서 별 상위 3개의 행만을 반환
Map자료형을 선언한다.문자열을 10개씩 잘라 순회하며 2회 이상 등장한 문자열을 result 배열에 담는다.담긴 문자열을 반환한다.
DP를 2중 배열로 초기화한다. (n은 각 일자, k는 거래 횟수 단, 0회 거래는 존재하지 않으므로 + 1 하여 초기화)첫째 날 고정 매수각 일자에 매수 및 매도 시 최댓값을 계산하여 dp를 채워나간다.
k만큼 순회한다.우측 끝 요소를 좌측 끝으로 입력한다.nums 배열을 직접 수정하고 아무것도 반환하지 않는다.
32비트 연산이므로 32번 반복하며 순회한다.1-1.n의 각 비트를 거꾸로 뒤집어 result에 할당한다.결과값을 32비트 부호 없는 정수로 변환한다.
n을 비트로 변환한다.비트로 변환된 n을 순회하며 set bit(1)이 존재할 경우 반환 값을 증가시킨다.set bit의 수를 반환한다.
Person 테이블을 INNER JOIN하여 같은 값을 비교한다.비교 대상중 email의 값이 같으면서 id의 값이 더 큰 값을 제거한다.남은 행이 조회되며 문제가 해결된다.
Weather테이블을 JOIN 참조하여 해당 행의 전 날과 맵핑한다.현재 날짜의 temperature가 전 날짜의 temperature보다 높은 날을 찾는다.조회된 행의 id를 반환한다.
dp 배열을 nums.length의 길이로 생성한다.첫 집과 두번 째 집 중 도둑질 할 양이 큰 것으로 0번째와 1번째 배열을 채운다.세번째 집 부터 전 집 혹은 전전 집과 현재 집을 털이한 금액을 비교하여 최댓값으로 채운다.dp배열의 마지막 요소를 통해 최대 금액을
grid를 2중 반복으로 순회한다.순회 중 island를 만난다면 깊이우선탐색(dfs)을 진행한다.2-1. 탐색 도중 이미 탐색한 island(T)를 만날 경우 중지2-2. 탐색 도중 바다를 만날 경우 중지2-3. 동 서 남 북 4방향 중 가능한 모든 방향을 순회하며
공통 접두사가 될 때까지 shift(이동)1-1. 7 = 0000...1111-2. 5 = 0000...1011-3. 공통된 부분은 0000...1이동된 만큼 좌측으로 shift된 결과를 반환0000...100 // 4
Set자료구조를 사용하여 숫자가 반복중인지 검사할 수 있도록 준비한다.n이 1이 될때까지 순회하며 확인한다.2-1. n이 이미 검사되었던 수인지 확인하여 그렇다면 행복 숫자가 아님을 반환한다.2-2. n을 문자로 각 자리마다 분리하여 제곱한 후 재정의한다.n이 반복되지
더미 노드 생성head와 연결순회 노드 생성모든 노드 순회O(n)4-1. val에 해당하는 값을 가진 노드 생략새로운 head 반환
n의 길이를 갖는 배열 생성n의 제곱근까지 순회2-1. i가 소수라면, i의 배수는 모두 소수가 아님남은 소수 카운트카운트 결과 반환
2개의 Map을 정의한다. (문자열의 중복 빈도가 다르기에 교차 비교해야함)각 Map(s To t, t To s)에 교차 등록한다.등록된 문자와 비교하는 문자가 일치하지 않을 경우 동형 문자열이 아님을 반환한다.모든 순회를 거쳤을 경우 두 문자열은 동행 문자열임을 반환
빈 노드일 경우 null 반환prev, current, next 선언ListNode를 순회하며 역순 정렬역순 정렬된 head 반환(prev)
schedules를 인정 시간인 기초 설정 시간 + 10분으로 재정의 한다.1-1. 이 때, 그냥 + 10을 하게되면 65분과 같은 시간 설정 오류가 있을 수 있기에 60분을 초과하지 않도록 설정해야한다.각 인원별로 순회하며 설정된 출근 시간에 늦지 않았는지 검사한다.
a부터 e까지 오름차 순으로 정렬된 5개의 조합을 찾기 위해 5중 반복한다.각 조합에서 q의 모든 조건과 그에 맞는 ans의 수가 같은지 비교한다.2-1. 모든 조건이 일치할 경우 정답을 카운트한다.2-2. 하나라도 조건이 불일치 할 경우 다음 조합을 확인한다.확인된
TrieNode 클래스를 선언한다.1-1. 해당 클래스는 자식 노드를 저장하며 재귀적인 구조로 검색 가능한지 확인할 수 있다.1-2. 문자의 마지막은 isEnd 속성을 통해 확인이 가능하며 이는 search 명령에 활용한다.생성자의 호출 시에는 TrieNode를 roo
nums 순회1-1. sum에 nums\[right]를 축적1-2. sum이 target 이상이 될 경우 nums\[left]만큼 뺀 후 left포인터 증가1-3. 조건이 충족되는 단계에서 subarray의 길이를 비교가장 짧은 subarray의 길이 반환
해당 문제는 진입 차수가 결정되는 위상정렬 문제이다.그래프를 생성하여 key: 코스, value: 필요 코스로 Map을 구성한다.초기 진입을 위해 진입 차수가 0인(필요 코스가 존재하지 않는) 노드를 queue에 추가한다.위상 정렬을 수행하여 현재 코스에서 필요 코스를
TrieNode 클래스를 생성해 문자열의 끝과 자식 문자열을 나타낼 수 있도록 정의한다.addWord 메서드가 호출될 경우, root의 children에 각 문자를 정의하며 종료되는 시점의 TrieNode에 isEnd를 true로 설정한다.search 메서드가 호출될
단어를 찾는 문제이며 각 문자를 기준으로 단어가 생성될 수 있으므로 Trie 자료구조를 생성한다.입력(insert)이 주어질 경우 각 자식 노드로 이동해가며 문자가 완성되는 시점의 노드에는 해당 문자가 무엇이였는지 기록한다. (중복이 없기에 문제되지 않음)board를
한 집만 존재하면 반드시 털어야 함원형이므로 첫 집과 마지막 집을 털 경우 두가지를 생각도둑질은 두 경우의 수를 갖음3-1. 전 집을 털자3-2. 현재 집을 털자첫 집을 털은 최댓값과 마지막 집을 털은 최댓값 비교최댓값 출력
접두 & 접미사 체크모두 접두사이자 접미사라면 그대로 반환펠린드롬이 아닌 부분 확인조합 후 반환
정렬한다.k번째로 큰 수를 반환한다.문제에서 정렬하지 말랬지만 자바스크립트에는 힙 자료구조가 없어 직접 선언해야 하는데 귀찮기 때문에 그냥 제출한다.
backTracking함수를 정의 한다.1-1. 현재 수집된 nums의 길이가 k개 되었을 때 합계가 n과 같다면, 정답 배열에 추가1-2. 이전 추가된 수(start) + 1 부터 9 이하의 수를 탐색하며 백트레킹 진행초깃값을 입력하여 backTracking 실행결괏
Set 자료형을 정의한다.nums를 순회한다.Set에 num을 입력하며 중복되었는지 확인한다.3-1. 중복되었으면 true를 반환한다.순회가 완료되었다면 false를 반환한다.
이벤트 배열을 생성하여 건물의 시작점, 높이, 진입점 여부를 기록한다.기록된 이벤트 배열을 정렬한다.2-1. X 좌표를 최우선적으로 비교하여 오름차 순으로 정렬한다.2-2. X 좌표가 같다면 높이를 기준으로 정렬한다.2-3. 이 때, 건물의 진입점이라면 높이를 내림차
Map 자료구조 사용nums를 순회2-1. 등장했던 수일 경우 문제 조건에 부합한다면 true 반환2-2. 현재 숫자와 인덱스를 key와 value 형태로 갱신조건에 맞는 수가 없었다면 false 반환
버킷 저장용 해시맵을 정의한다.버킷의 크기를 설정한다. (valueDiff를 기준으로 + 1 하여 동일한 버킷의 요소는 자동으로 valueDiff 조건이 만족됨)nums를 순회한다.3-1. bucketKey를 현재 수 / bucketSize로 정의한다.3-2. 같은 b
dp 배열 초기화2중 반복을 통해 matrix 순회2-1. matrix\[i]\[j]가 1인 경우 탐색2-2. 첫 행 혹은 첫 열이라면 matrix\[i]\[j] 에서 끝나는 변의 길이는 항상 12-3. 왼쪽, 윗쪽, 대각선 왼쪽 위 모두 채워져 있어야 하므로 최솟값
좌측 서브트리 높이를 구한다.우측 서브트리 높이를 구한다.좌 우 서브트리 높이가 같은지 비교한다.3-1. 같다면, 2의 h제곱 - 1을 통해 전체 노드의 수를 바로 구한다.3-2. 다르다면, 재귀적으로 현재 노드 + 좌측 노드(재귀) + 우측 노드(재귀)를 통해 총 노
a의 넓이 계산b의 넓이 계산중복 영역의 넓이 계산a넓이 + b넓이 - 중복넓이 반환
stack을 정의한다.stack의 주요 메서드를 풀이하여 정의한다.해당 문제는 queue를 사용하여 풀이해야 하지만, 문제 해결과 상관 없이 불필요 자료구조를 활용하여 풀이하는것은 내 스타일이 아니다.스택이 필요한 상황에는 스택을 사용할 것
root 존재 여부 확인root.left와 root.right 교환재귀적으로 root.left와 root.right의 자식 요소 탐색root 노드 반환
스택 정의숫자 정의이전 연산자 정의s 순회4-1. 숫자라면 자릿수에 맞게 누적4-2. 문자면서 공백이 아니라면 연산자이므로 각 기호에 맞게 처리 후 스택에 입력 후 숫자만 연산자 및 숫자 업데이트스택에 입력된 숫자 누산 및 반환
start에 시작 범위 정의nums를 순회2-1. 시작 범위가 이전 순회한 요소의 값과 같을 경우 정답 배열에 단일 범위 입력2-2. 시작 범위가 이전 숫자와 다르면서 연속적이지 않을 경우 시작 범위와 종료 범위 입력
최소 빈도 수 정의Map 정의nums 순회하며 빈도 수 입력최소 빈도수를 초과하는 수 탐색 및 반환
깊이 우선 탐색1-2. 좌측 우선 탐색 (가장 좌측의 요소의 값이 가장 낮은 BST의 구조 활용) 최저점 접근1-3. 순차적으로 카운트하며 k번째 요소 탐색1-4. 우측 노드 탐색k번째 노드 값 반환
n & (n - 1) === 0 판별1-1. n = 4(100) 일 때1-2. n - 1 = 3(011)1-3. n & (n - 1) = 0(000)n > 0 판별조합 반환
stack과 queue정의push가 입력될 경우 stack에 입력pop이 입력될 경우 queue에 요소가 있다면 그대로 pop 하되, 그렇지 않다면 stack의 요소를 그대로 pop하여 queue로 옮김. 해당 과정에서 요소는 후입 선출에서 선입 선출되는 방식으로 변경
중간 지점과 끝 지점에 노드를 위치시키기 위해 fast와 cur을 통해 각 2칸 및 1칸 전진시켜준다.중간 지점이 된 cur부터 ListNode를 뒤집어준다.시작 지점이 될 head를 start변수로 정의하고 뒤집힌 cur을 통해 각 노드의 값을 비교하여 펠린드롬 여부
이진 트리 특성 상 해당 노드보다 좌측노드들은 항상 더 낮은 수, 우측 노드들은 항상 더 큰 수임root의 값이 p와 q보다 크다면, 우측 노드들은 탐색할 필요 없음root의 값이 p와 q보다 작다면, 좌측 노드들은 탐색할 필요 없음해당 조건들에 부합하지 않는다면 ro
좌측과 우측 재귀함수를 실행하여 q와 p에 해당하는 노드를 탐색둘 다 탐색되었다면 현재의 노드가 LCA가 됨한 쪽만 탐색되었다면 q와 p 모두 해당 쪽에 있는 것이므로 해당 노드가 LCA가 됨
현재 노드의 값을 다음 노드의 값으로 대체한다.다음 노드를 건너뛰고 그 다음 노드를 바라보게 변경한다.
핵심은 O(2n)의 반복으로 모든 요소의 본인을 제외한 요소의 곱을 알아내는 것1-2. 해당 방법은 나를 제외한 왼쪽 요소의 곱의 합계 \* 나를 제외한 오른쪽 요소의 곱의 합계왼쪽부터 값을 누적하며 본인 요소를 포함하기 이전까지의 합계를 할당오른쪽부터 값을 누적하며
deque 정의(숫자의 인덱스가 정의됨)nums 순회2-1. 윈도우를 벗어난 요소 제거2-2. 추가된 값 중 현재값보다 작은 수는 최댓값이 될 수 없으므로 제거2-3. 현재 요소 추가2-4. 현 최댓값(deque0 인덱스를 갖는 수) 결괏값에 추가결괏값 반환
row, col 정의하며 위치는 오른쪽 최상단에서 시작함(탐색 용이성)row를 1 증가시키거나, col을 1 감소시킬 수 있는 범위 내에서만 순회2-1. 현재 값이 target과 같다면 true 반환2-2. 현재 값이 target 보다 작다면, 다음 열로 이동 row+
expression순회1-1. 연산자 인 경우 연산자를 기준으로 좌측과 우측을 나누어 재귀실행1-2. 숫자가 된 결괏값을 2중 순회하며 연산자에 맞는 결과를 result에 입력함1-3. 만약 연산자 없이 표현식에 숫자만 있을 경우 형변환 하여 result에 입력입력된
s와 t의 스펠링 빈도 체크를 위한 배열을 각각 생성한다.문자열을 순회하며 각 스펠링의 빈도를 확인한다(이 때 97은 a에 대한 char code임)count수를 비교하며 한 번이라도 다르다면 anagram이 아니므로 false 반환모든 스펠링의 빈도가 같다면 true
깊이 우선 탐색 함수를 정의한다.1-1. leaf 노드가 없을 경우 현재까지의 경로를 result에 추가한다.1-2. leaf 노드가 있을 경우 현재 경로에 이정표를 추가한다.(->)1-3. 자식 노드가 있을 경우 현재 노드에 값을 더해 재귀적으로 탐색한다.result
num이 한 자릿 수 일 경우 반환num을 문자열로 변환하여 각 자릿수의 합계를 구함합계를 addDigits의 매개변수로 재귀호출
Set 자료구조를 활용하여 중복 검증nums를 순회하며 각 요소가 중복되었다면 제거, 아니라면 추가 하는 방식으로 단일 수만 입력Set 자료구조를 Array로 변환하여 반환
n이 0 혹은 음수라면, 2와 3과 5로 나누어 떨어질 수 없음2, 3, 5로 n을 최대한 나눔2-1. 낮은 수부터 약분 가능할 때까지 최대한 나눔최종적으로 n이 1이 될 경우 나누어 떨어진다는 뜻으로 ugly number가 됨
dp 생성 및 초기화n 순회2-1. 2와 3과 5의 배수 중 최솟값이 i번째 ugly number2-2. dp\[i]는 현재의 최솟값이 됨2-3. 현재의 최솟값이 준비해둔 2와 3과 5의 배수와 일치한다면 다음 배수를 준비준비된 ugly number의 n번째 반환
nums의 길이를 n 변수에 저장1부터 n까지의 총 합 targetSum에 저장입력받은 nums의 총 합 numSum에 저장1부터 n까지의 총 합 - nums의 총 합 = 빠진 수 반환
1부터 19까지 정의20부터 90까지 정의천, 백만, 십억 정의num이 0 이상으로 표현할 수 있는 수 일 동안 반복4-1. num을 천으로 나누었을 때 나머지가 있어 정의해야 할 경우 정의4-2. num을 1000으로 나눈 몫을 num에 할당4-3. i를 증가시켜 천
citations를 내림차 순으로 정렬하여 H-Index를 구하기 용이한 순서로 정의citations 순회2-1. 현재 요소가 H-Index보다 작은 인용 수를 갖는다면 반복문 종료2-2. 아니라면 h 증가h 반환
left와 right 두개의 포인터를 정의하여 이진탐색 진행left가 right보다 작을 경우 순회2-1. 중앙값 계산2-2. 중앙값이 잘못된 버전 이라면, 해당 버전이 잘못된 버전의 시발점인 경우를 염두하여 right에 대입2-3. 중앙값이 잘못된 버전이 아니라면,
dp 생성i는 n까지 순회j제곱이 i이하일 때까지 순회3-1. 해당 구문으로 가장 가까운 제곱수로 나눌 수 있는 최소의 수가 dp 배열에 적용됨
iterator 복제peekVal을 통해 다음 값 미리 저장peek 메서드 호출 시 peekVal 반환next 메서드 호출 시 curVal에 현재 peekVal을 저장해두고 다음 값으로 갱신 후 curVal 반환hasNext 메서드 호출 시 peekVal의 존재 여부
set 자료구조 사용nums 순회이미 탐색된 수라면 즉시 반환아니라면 set에 추가
이웃의 수를 계산하는 countLivedNeighbor 함수를 작성한다.board를 순회한다.2-1. 만약, 살아있는 세포를 가진 셀의 살아있는 주변 세포 수가 2 미만이거나, 3을 초과할 경우 해당 세포는 죽는다. (동시 처리되야 하므로 임시 -1)2-2. 만약, 죽
s와 pattern을 각각 공백과 글자별로 분리패턴과 단어 수 자체가 일치하지 않는다면 false 반환패턴과 단어를 각각 key 값으로 갖는 map 생성패턴 순회4-1. 각 map에 서로를 key로 갖는 값이 없을 경우 정의4-2. 각 map에 값들이 일치하지 않을 경
n을 4로 나눈 나머지가 0이 아닐 경우 게임에서 승리가 가능하다.내가 우선 돌을 빼내므로 4 미만의 수는 항상 내가 이긴다.상대방은 항상 최적의 플레이를 하므로 5개가 남아 내 차례가 되는 순간 나는 몇개의 돌을 빼내더라도 반드시 진다1~3개의 돌을 빼낼 수 있으므로
초기화 시 this.arr에 빈 배열 생성addNum 메서드 호출 시 이진 탐색을 통해 적절한 위치에 입력findMedian 메서드 호출 시 중앙값 반환
직렬화는 bfs를 활용하여 root로 전달받은 트리를 하나의 배열로 변경한다.역직렬화는 전달받은 문자열을 배열로 변환하여 bfs를 활용해 다시 이진 트리로 변환한다.
dp 선언maxLen 최대길이 선언nums를 순회하며 이중반복3-1. 매 요소 이전의 요소와 이어질 수 있다면 dp 배열 증가최대 길이 반환
괄호가 올바른지 판별하는 isValid함수 선언방문 기록을 기록할 visited Set 변수 선언결괏값을 기록할 result Set 변수 선언queue의 요소가 있는동안 순회4-1. 현재 등록된 요소의 모든 자릿수를 제외해보며 순회4-2. 단, 최소한의 변환을 해야하므
this.matrix로 생성 인자를 할당한다.row1 <= row2, col1 <= col2가 보장되어 있으므로 사잇값을 순회하며 모든 인자를 더한다.더한 결과를 반환한다.
backTracking 함수를 정의한다. 1-1. index는 검사할 항목(num1 + num2)의 시작 인덱스를 정의1-2. count는 현재까지 조합된 수의 수를 의미 (최소 세 가지의 수가 있어야 Additive Number)1-3. num1과 num2의 합을 문
매도(sold), 유지(hold), 쿨다운(cooldown) 선언prices 순회2-1. 이전 매도 금액 저장2-2. 매도 금액은 유지 + 현재가 (매도의 경우)2-3. 유지 금액은 유지 혹은 매수 중 최댓값으로 선택2-4. 쿨다운은 이전 매도가 혹은 쿨다운 금액 중
edges 배열에 담긴 정보를 통해 이웃한 노드끼리 간선을 연결한다.리프 노드를 탐색한다. 이 때 리프 노드란 연결된 간선이 하나뿐인 노드로 가장자리에 존재하는 노드를 의미한다. (해당 노드를 통해 중앙 노드를 순차적으로 탐색)가장자리부터 순차적으로 제거하여 노드가 2
1은 항상 포함되는 uglyNumber 이다.지수를 선언한다. (추 후 primes\[i]에 몇을 곱할지 기록하는 용도)primes를 복사하여 values를 선언한다. (다음 uglyNumbers의 후보들을 기록)n만큼 순회한다.4-1. 현재 uglyNumbers의 후
병합 정렬을 수행한다.1-1. 수행 시 우측 요소와 비교하여 현재 수 보다 작은 수를 카운트 한다.1-2. 병합 정렬된 결과를 반영한다.결과를 반환한다.
s 순회중복이 제거되어야 하므로 이미 있는 문자는 추가하지 않음스택 제거 조건 명시3-1. 스택에 요소가 존재하는가3-2. 스택의 마지막 요소가 현재 문자열보다 사전순으로 큰가? (사전순 낮게 생성하고 싶으므로 검사)3-3. 해당 문자를 제거해도 뒤에 해당 문자가 등장
words의 각 단어를 순회하며 해당 문자를 비트마스크 화words를 2중 순회하며 아무 문자도 겹치지 않은 쌍이 발견될 경우 해당 문자열의 길이를 곱해 최댓값과 비교탐색된 최대 길이 반환
해당 문제는 다음과 같은 규칙이 있음1-1. N개의 전구를 N개의 라운드가 지난 후 몇 개가 켜져있는지 확인해야함1-2. 1단계에선 모든 전구를 켬1-3. 2단계에선 2의 배수에 해당하는 전구를 끔1-4. N단계에선 N의 배수에 해당하는 전구를 토글함(ON -> OFF
nums1에서 몇 개의 숫자를 뽑을지 정하는 i를 통해 순회한다. 최솟값은 0이며, 최댓값은 nums1을 모두 뽑거나, k개를 뽑을 경우가 됨nums1에서 i를 뽑았을 때 존재할 수 있는 maxSequence와 nums2에서 k - i개를 뽑았을 때 존재할 수 있는 M
dp선언amount 까지의 금액 순회2-1. 금액i가 coin보다 크다면, dp 배열에 최소 개수 반영최종 값이 초깃값 Infinity라면 -1반환, 아니라면 해당 코인 수 반환
nums 오름차 순 정렬smallHalf로 절반의 인덱스 기준 작은 수들의 집합 정의largeHalf로 절반의 인덱스 기준 큰 수들의 집합 정의pointer를 정의하여 각 인덱스에 각 포인터에 작고 큰 배열 요소를 교차하며 선언
로그를 통해 3의 거듭제곱인지 판별프로그래밍 언어 특성상 딱 맞아떨어지지 않을 수 있음2-1. 로그 값의 소수점을 제거한 값과 그렇지 않은 값의 차이가 10의 -10거듭제곱 보다 작다면 맞아 떨어지는 수로 판별결과 반환
홀수 선언짝수 선언짝수 도입부 선언홀수턴 여부 선언홀수 짝수 노드 존재할 경우 반복하며 이어나감홀수 노드 끝에 짝수 노드 도입부 연결노드 반환
해당 좌표 및 값이 이동할 수 있는 셀인지 판별하는 isValid 선언깊이 우선 탐색을 실행하며 최대 길이를 반환하는 dfs 선언O(n \* m)을 반복하며 각 셀에서 발생할 수 있는 최대 길이를 확인최대 길이 반환
현재 만들 수 없는 수 miss 선언miss가 n 이하일 경우 반복2-1. 현재 순회의 수가 miss 이하라면, 이미 만들 수 있는 수 이므로, miss에 해당 수를 더 해 조합할 수 있는 수의 범위 증가2-2. 현재 순회의 수가 miss 초과라면, miss를 patc
,를 기준으로 preorder 분리leaf노드를 확인할 slot 선언nodes를 순회3-1. leaf노드가 중간에 끊겼다면 false 반환3-2. \`3-3. 숫자가 발견될 경우 leaf가 감소하지만 자식 leaf가 2개 늘어남이진 트리가 잘 구성되었는지 여부 반환
간선 생성간선 연결도착지를 사전 기준 오름차 순 정렬깊이 우선탐색4-1. 도착지 중 사전 순 빠른 공항을 우선 적으로 탐색4-2. 탐색 종료 후 result에 추가추가된 result를 역순으로 반환(JKF 공항부터 시작되도록)
first 선언second 선언nums 순회3-1. first 초과 수 탐색3-2. second 초과 수 탐색3-3. 증가하는 세개의 서브시퀀스 확인 시 true 반환미확인 시 false 반환
교차는 다음의 상황에서만 이루어진다.1-1. 축이 네 개 이상일 경우 (i >= 3)1-2. i번째 축과 i-3번째 축이 만날 경우 (첫번째와 네번째 축)1-3. i번째 축과 i-4번째 축이 만날 경우 (첫 번째와 다섯 번째)1-4. i번째 축과 i-5번째 축이 만날
단어의 역순을 미리 저장단어를 순회하며 다음 케이스를 탐색2-1. 공백과 현재 단어를 조합하여 팰린드롬을 만들 수 있는 경우2-2. 현재 단어가 단어 사전에 있는 경우 (단어 사전은 역순으로 저장되어 있으므로 알맞는 짝이 있음)2-3. 현재 단어의 일부가 팰린드롬이며,
깊이 우선 탐색 실행1-1. 노드가 존재하지 않을 경우 훔치거나 훔치지 않거나 돈을 벌지 못함 0, 01-2. 좌측 깊이 우선 탐색으로 훔치거나 훔치지 않았을 때의 최댓값 산정1-3. 우측 깊이 우선 탐색으로 훔치거나 훔치지 않았을 때의 최댓값 산정1-4. 현재 노드를
dp 배열을 생성한다.i를 n까지 반복한다.2-1. 현재 숫자 i를 쉬프트 연산을 통해 마지막 비트를 제거했을 경우 1의 숫자와 마지막 비트가 1인지 판별하여 현재 인덱스에 추가한다.정답 배열을 반환한다.
arr, index를 초기화전달받은 nestedList를 flatten 하여 저장2-1. 각 요소를 순회하며 숫자인 경우 arr에 추가2-2. 숫자가 아닌 경우 배열 이므로 getList를 통해 수를 불러와서 재귀적 flattenhasNext가 호출될 경우 현재 포인터
n을 얻기 위해 4의 몇 제곱이 필요할지 알기 위해 제곱 계산프로그래밍 언어 특성상 log값과 현재 값의 차가 완전히 일치하지 않을 수 있으므로 1e-10과 차 계산
n이 2인 경우 1+1가 최적 분할이며 1\*1 이므로 1n이 3인 경우 1+2가 최적 분할이며 1\*2 이므로 2 3을 최대한 많이 곱하는 것이 분할에 유리함n이 4일 경우는 2\*2로 분할하는 것이 최선4 초과일 경우 3으로 계속 분할하며 최종적으로 잔여 n을 분할
left 포인터right 포인터교차하며 단어 뒤집기
모음 여부를 반환하는 isVowel 선언문자열의 처음과 마지막 부분에 포인터 위치모음을 발견할 때까지 포인터 이동두 포인터가 모두 모음을 가르킨다면 위치 교환문자열 반환
빈도수 확인빈도수를 기반으로 역순 정렬 (key: 수, value: 빈도)정렬된 결괏값으로 가장 빈도가 높은 수(key) 반환
Set 자료형을 통한 중복 제거result 배열 선언num1Set을 순회하며 교집합이 된 수가 있다면 정답 배열에 추가정답 배열 반환
빈도를 저장하는 frequentMap 선언반드시 배열은 nums1이 nums2보다 짧게 변경nums2를 순회하며 빈도 저장nums1을 순회하며 교집합에 대해 저장저장된 교집합 result 반환
자잘한 것은 필요 없고 addNum에 집중한다.연결 범위 자체가 없다면 시작 범위와 끝 범위를 모두 value로 설정한다(value, value)현재 설정된 모든 범위를 순회하며 현재 value가 속하거나 설정된 범위를 갱신할 수 있는지 확인한다.3-1. 만약, val
트윗을 담당할 posts 선언팔로우 상태를 연결할 followStatus 선언postTweet할 경우 게시물 배열에 추가하고 내가 조회할 수 있게 내 팔로잉 목록에 자신 추가getNewsFeed할 경우 게시물을 역순으로 조회하며 내가 팔로우 하는 회원의 글 인 경우 뉴
n이 0인 경우 0 하나만 유니크n이 1 이상일 경우2-1. 각 자리의 맨 앞 자리는 1~9까지 9개 가능2-2. 각 자리의 두번째 자리는 0~9까지 중 맨 앞 자리를 제외한 9개 가능2-3. 그 이후 N번째 자리는 9 - (n - 2)개가 가능하며 그 이유는 범위가
i를 1부터 i의 제곱이 num보다 작은 경우 i를 1씩 증가하며 반복i의 제곱이 num과 같아지면 true 반환아니라면 false 반환환
lower, high로 최소 최대 범위 산정lower가 high보다 낮다면 반복2-1. 중간 값 계산2-2. 현재 중간 값으로 예측2-3. 조건에 맞게 최소 범위, 최대 범위 갱신예측 값 반환
ransomNote의 문자 빈도 저장magazine의 문자 빈도 저장문자 빈도를 비교하며, 맞지 않을 경우 false 반환모든 문자가 포함될 수 있다면 true 반환
이미 나온 단어 체크할 charSet 선언s 순회2-1. 현재 단어가 이미 나왔는지 체크2-2. 현재 단어가 문자에서 더는 나오지 않는지 체크2-3. 맞다면 현재 인덱스 반환2-4. 아니라면 나온 단어로 추가순회시 모든 단어가 중복 되었으므로 -1 반환
s 정렬t 정렬t가 항상 한 자리 더 많으므로 t만큼 순회하며 각 자리 비교 3-1. 자리 알파벳이 다르다면 반환
sIdx선언t를 순회하며 같은 문자일 경우 sIdx 증가sIdx가 s의 길이가 되었다는 것은 모든 문자가 확인되었다는 의미이므로 true 반환탐색이 끝난 경우 s를 충분히 탐색하지 못했단 의미이므로 false 반환
이론상 켜져있는 LED가 8개 이상이라면 어떠한 시간도 구성할 수 없음 (11시, 59분 등 무조건 초과)0시 부터 11시까지 가능한 모든 시간 순회0분 부터 59분까지 가능한 모든 분 순회시간과 분을 2진수로 변경하여 1의 수를 세면 그 값이 켜진 LED의 수가 됨4
dfs 함수는 node와 왼쪽 여부를 나타내는 isLeft를 입력 받도록 정의leaf 노드이며, 왼쪽 노드일 경우 현재 값 반환왼쪽 깊이 우선 탐색오른쪽 깊이 우선 탐색탐색 결과 합계 반환
num이 음수인 경우 2^32 - num의 구조를 통해 부호 없는 32비트 수로 변환16진수의 형태로 반환
단어 빈도 저장모든 빈도 순회2-1. 빈도가 짝수라면 팰린드롬을 만들 수 있으므로 길이에 추가2-2. 빈도가 홀수라면, 하나의 문자를 덜 쓰고 짝수개로 맞출 수 있으므로 -1만큼 추가하고 홀수 단어가 있음을 표시길이를 반환하되, 홀수개의 단어가 있었다면, 한 문자까지는
1부터 n까지 순회1-2. 3의 배수라면 현재 문자에 Fizz 추가1-3. 5의 배수라면 현재 문자에 Buzz 추가1-4. 현재 문자가 비어있다면(3의 배수도 5의 배수도 아니라면) 현재 숫자 추가1-5. 현재 문자 정답 배열에 추가정답 배열 반환
배열의 중복 제거배열 길이가 3 미만이라면 최댓값 반환내림차 순 정렬3번째로 큰 값 출력
num1이 항상 num2의 길이보다 짧게 설정num1의 부족한 자릿수를 0으로 채움num1 + num2합계를 문자열로 변환하여 반환환
s가 비어있다면 0 반환s를 순회하며 공백이 아닌 문자가 있을 경우 Segment를 하나 발견2-1. 공백을 만날 때까지 해당 Segment를 건너뜀발견된 Segment의 수 반환
sum: 계단을 한 층 내려갈 때마다 필요한 코인의 수의 총합result: 도달 가능한 층needs: 필요한 코인 수순회하며 도달 가능한 층 반환
n: nums의 길이list: 0 ~ n 까지의 수 nums 순회3-1. 현재 숫자 list에서 제거제거되지 않은 숫자 중 0을 제외하고 반환
children: 아이의 배고픔 정도에 따라 오름차 순 정렬cookie: 쿠키의 포화량 기준 내림차 순 정렬result: 배부른 아이의 수children 순회4-1. cookie를 순회하며 현재 쿠키로 아이를 배불리 먹일 수 있을 때까지 탐색4-2. 먹일 수 있다면 정
n: s의 길이1부터 n보다 작을 때까지 순회2-1. cur: 현재 문자열2-2. repeatCount: cur을 이어붙일 횟수2-3. curRepeated: cur을 preatCount만큼 이어붙인 문자열2-4. curRepeated가 n과 작거나 같은동안 이어붙이기
x와 y를 XOR 한다.countOne: XOR의 결괏값 중 1의 비트 수xor이 0이 아닌동안 반복3-1. 현재 xor의 첫 비트가 1이라면 1추가 (1의 비트 수 ++)3-2. 현재 xor을 shift하여 다음 비트 검사확인된 1의 비트 수 반환환
perimeter: 섬의 둘레rowMax: 행 경곗값colMax: 열 경곗값전체 행렬 순회4-1. 바다가 발견되었다면(0) 다음 탐색4-2. 첫 행이거나(위가 반드시 뚫려있음), 현재 셀 윗칸에 육지가 없을 경우 둘레 1 증가4-3. 마지막 열이거나(오른쪽이 반드시 뚫
binaryNum: num을 2진수로 변환result: binaryNum의 각 자리를 배열에 입력result 전체 순회3-1. 각 비트를 반전반전된 2진수를 10진수로 변환
removeDash: s에서 -제거result: 정답 문자열removeDash를 역순으로 순회3-1. start: 현재 구간의 탐색 시작점3-2. cur: 현재 구간result를 역순으로 뒤집은 후 -로 연결하여 반환
consecutive: 현재 연속된 1의 횟수maxConsecutive: 연속된 1의 횟수 중 최댓값nums 순회3-1. 현재 값이 1이라면, consecutive 1증가 후 최댓값 반영3-2. 현재 값이 0이라면, consecutive 값 초기화최장 연속값 반환
w: 요소의 너비, 면적과 절댓값의 차이가 적어야 하므로 제곱근부터 계산area / w가 0일 때까지 반복하며 적절한 w 탐색면적 및 너비 반환
poisoned: 중독된 시간timeSeries 순회2-1. time: 현재 시간2-2. interval: 중독 종료 시간2-3. 다음 공격 시간과 중독 종료 시간이 겹친다면 그 차이 만큼만 poisoned에 누산2-4. 아니라면, 지속시간 만큼 poisoned에 누산
stack 선언map 선언nums2 순회3-1. stack에 있는 이전 값이 현재 값보다 작다면 이전 값들의 next greater element는 현재 요소가 됨3-2. 현재 요소를 stack에 pushnums1을 순회4-1. map에 현재 요소가 없다면 -1, 있다
각 행의 알파벳을 입력한 Set 생성words 순회2-1. targetWord: 각 word의 소문자 구성 정의2-2. isValid: 현재 문자가 올바른지2-3. 현재 문자가 하나의 행으로 모두 이루어질 수 있다면 result에 추가result 반환
result: 최빈값이 담길 배열curMaxFrequent: 현재 최대 빈도 수frequent: 현재 노드 값의 빈도 수가 저장될 Map깊이 우선 탐색(dfs)을 진행하며 모든 노드의 빈도 확인최대 빈도의 노드들을 result에 추가result 반환
num이 음수라면, - 기호 추가 후 반환num이 7보다 작다면 그대로 문자열 화 후 반환몫을 추가로 재귀적 변환 후 뒤에 나머지를 문자열 화 하여 반환
map 자료구조 사용score 내림차 순 정렬정렬된 순서대로 map에 등수 혹은 메달 정의3-1. 1등은 Gold Medal3-2. 2등은 Silver Medal3-3. 3등은 Bronze Medal3-4. 그 외에는 본인의 등수로 정의score를 순회하며 각 선수에게
1부터 num의 절반보다 작거나 같은 동안 i를 증가시키며 num이 i로 나누어 떨어질 경우 합산합산한 결과가 num과 같은지 비교하여 결과 반환
n이 0일 경우에 0 반환n이 1일 경우에 1 반환재귀적으로 n - 1과 n - 2의 피보나치 값 반환
player_id와 event_date의 최솟값 조회
firstLowerChar: 첫 번째 문자를 소문자로 변환secondLowerChar: 두 번째 문자를 소문자로 변환단어의 첫 부분이 소문자라면3-1. 모든 문자가 소문자인지 검사단어의 두번째 부분이 소문자라면4-2. 이후 모든 문자가 소문자인지 검사단어가 모두 대문자
a와 b가 일치한다면 LUS가 존재하지 않으므로 -1 반환아니라면, LUS는 더 긴 문자열 전체의 길이가 됨a가 b보다 길다면 a반환아니라면 b 반환
minDif: 최소 차잇값prevNode: 이전 탐색한 노드inOrder: 중위 순회3-1. 트리를 중위순회 하며, 두 노드간의 차잇값 중 최소를 기록한다.3-2. prevNode에 현재 node를 입력한다.최소 차잇값을 반환한다.
arr: s를 배열로 변환i += 2 k: k만큼은 뒤집고, k만큼은 그대로 두어야 하므로 2 k만큼 증가하며 순회뒤집혀 적용된 배열을 문자열 형태로 변환하여 반환
깊이 우선 탐색1-1. 좌측 트리의 높이 계산1-2. 우측 트리의 높이 계산1-3. 좌측에서 우측까지 가는 거리가 가장 먼 거리가 됨1-4. 현재의 높이 반환탐색된 최대 지름 반환
결석(A)이 2회 이상인 경우 false 반환지각이 연달아 세번 이상일 경우 false 반환위 조건에 해당하지 않을 경우 true 반환
splitted: 공백을 기준으로 단어 분리reversed: 단어를 역순으로 변환변환된 reversed를 공백을 기준으로 연결하여 반환
depth: 최대 깊이dfs: 깊이 우선탐색, 인자로 현재 조회중인 노드(node)와 해당 노드의 깊이(curDepth)를 갖음dfs를 root로 부터 1의 깊이로 수행3-1. 현재 노드가 null이라면, 탐색 종료3-2. depth에 현재 깊이와 탐색된 최대 깊이 비
sortedNums: nums를 오름차 순 정렬pairSum: sortedNums 그룹 요소 중 최솟값을 누적한 값sortedNums의 요소를 2개씩 그룹화 하여 순회3-1. min: 그룹화 된 두 요소 중 최솟값3-2. pairSum에 최솟값 누적누적된 그룹 내 최솟
tiltSum: 기울기의 총합dfs: 깊이 우선 탐색2-1. 좌측 기울기를 재귀적으로 탐색2-2. 우측 기울기를 재귀적으로 탐색2-3. 현재 기울기를 좌측 기울기와 우측 기울기를 통해 정의2-4. tiltSum에 현재 기울기 누적2-5. 탐색을 위해 현재 값과 좌, 우
flatten: mat를 평탄화 함요소와 재구성 하고자 하는 행(row), 열(col)이 맞지 않다면 원래 행열(mat) 반환reshape: 재구성 된 행열pointer: flatten 요소 중 현재 행열을 구성할 요소r과 c 만큼 행열 순회하며 각 요소 입력r과 c에
isSubtree: 서브 트리가 같은지 검사1-1. 현재 요소(root)가 null이라면, 탐색 범위 내에서 subRoot를 찾을 수 없었다는 의미 이므로 false 반환1-2. 현재 요소(root)와 비교 요소(subRoot)를 비교하여 구조가 같다면 true 반환1
canEat: Alice가 먹을 수 있는 캔디의 최대 수typeOfCandies: candyType의 모든 캔디 종류 (중복 제거)typeSize: 캔디 종류의 수먹을 수 있는 캔디(canEat)보다 캔디 종류(typeSize)가 많다면, 먹을 수 있는 캔디 내에서 각
e.name(Employee name), b.bonus(Bonus bonus) 조회Bonus 테이블을 LEFT JOIN보너스가 1,000 미만이거나, 존재하지 않는 회원의 목록 출력
Orders 테이블 조회해당 테이블을 customer_number로 그룹화 함그룹화 된 내용에서 order_number의 빈도수를 내림차 순 정렬함해당 결괏값 중 첫 번째 행의 customer_number 출력
result: 전위 순회 된 노드들이 탐색된 순서대로 모일 배열preOrder: 전위 순회 함수2-1. 현재 탐색된 값을 기록2-2. 현재 노드의 leaf 노드들 순회2-3. leaf 노드를 재귀적으로 순회root를 시작점으로 전위 순회탐색된 순서(result)대로 반
root가 없을 경우 빈 배열 반환result: 후위 순회를 진행하며 순서대로 요소의 값이 담길 배열postOrder: 후위 순회 함수3-1. node.children을 순회하며 leaf 노드를 재귀적으로 후위 순회함3-2. 후위 순회의 순서대로 result에 할당후위
LHS: Longest Harmonious Subsequencefrequent: nums 내부 요소의 빈도 수frequent를 순회하며 현재 요소보다 1 큰 수가 존재할 경우 현재 요소의 빈도와 해당 요소의 빈도를 합산하여 LHS와 비교최대 LHS 값 반환
면적이 3천만 제곱킬로미터 이상이거나, 인구가 2천5백만명 이상이라면, Big Country임해당하는 국가의 name, population, area를 조회함함
class를 기준으로 그룹화student의 수가 5명 이상인 경우를 조회
minRow: 현재까지 발견된 최소 행minCol: 현재까지 발견된 최소 열ops 순회3-1. minRow와 현재 y값 비교하여 최저 값 할당3-2. minCol과 현재 x값 비교하여 최저 값 할당현재까지 나온 모든 연산 중 최소의 y, x 값은 최대의 영향을 받았기에
result: 탐색된 최소 Index의 문자가 담길 배열leastIdx: 현재 탐색된 최소 Index의 합list1이 항상 list2보다 짧은 길이를 갖도록 설정list 순회4-1. 현재 문자가 list2에 없다면 다음 탐색4-2. 현재 Index가 탐색된 최소 Ind
뒤, 현재, 앞 화단에 꽃이 심어져 있다면, 현재 위치에 꽃을 심을 수 없으므로 다음 탐색그렇지 않다면, 현재 위치에 꽃 심기최종적으로 모든 꽃을 심을 수 있는지 여부 반환환
Orderse와 Company를 com_id 컬럼을 통해 JOINCompany.name이 RED인 행의 sales_id를 조회SalesPerson 테이블에서 sales_id가 RED인 회사와 관련이 없을 경우 name 출력력
Triangle 테이블에서 x, y, z를 조회한다.두 변의 합이 항상 다른 변보다 크다면, 삼각형을 만들 수 있으므로 Yes를 반환한다.그렇지 않다면 No를 반환한다.
root1과 root2 둘 다 없는 경우에만 null을 반환하며 둘 중 하나라도 존재할 경우 존재하는 노드 반환merged: root1과 root2의 합재귀적으로 leaf 노드를 순회하며 두 tree를 병합함병합된 결과 반환
UniqueNumbers: MyNumbers 테이블에서 단일 존재하는 수만 조회UniqueNumbers에 조회된 수 중 가장 큰 값을 반환, 없다면 'null' 반환
Cinema 테이블에서 id가 홀수인 테이블 조회Cinema 테이블에서 description이 boring이 아닌 셀 조회모든 컬럼을 rating 기준 내림차 순으로 정렬하여 조회
Salary 테이블에서 성별이 m이라면, f 아니라면, m으로 업데이트
nums를 내림차 순 정렬가장 큰 세 요소와, 가장 큰 요소 및 가장 작은 두 요소를 각각의 배열로 준비2-1. slicedPos: 가장 큰 세 요소2-2. slicedNeg: 가장 작은 두 요소 + 가장 큰 요소각각의 배열 요소를 모두 곱함더 큰 결괏값을 반환함
nums 순회1-1. 만약, k길이의 요소가 모였다면 현재 합과 최대 합을 비교하여 갱신하고, 가장 먼저 누산되었던 요소를 합에서 제거1-2. 현재 요소를 합에 누산최종적인 합과 최대 합을 비교하여 더 큰 값을 maxSum에 할당최대합에 평균을 구하여 반환
a와 b를 더한 값을 반환한다.
업로드중..frequent: 각 숫자의 빈도nums를 순회하며 숫자의 빈도 확인dup: 2번 탐색된 중복 수miss: 1번도 탐색되지 않은 수dup, miss의 형태로 반환
history: 현재까지 발견된 노드 값dfs: 깊이 우선 탐색하며, 현재 노드 값과 이전 값들을 더해 k를 만들 수 있는지 확인dfs 함수에 root를 전달하여 가능여부 확인
rows: 행의 높이cols: 열의 길이smoother: 부드럽게 변형된 img2중 반복하며 주변 셀의 값을 더한다.4-1. activeCellSum: 주변 활성화 된 셀의 합4-2. activeCellCount: 주변 활성화 된 셀의 수4-3. 주변 합 / 주변 수를
nodeVals: 노드 값들이 담길 Setdfs: 깊이 우선 탐색하며, 모든 노드들의 값을 nodeVals에 추가sortedNodeVals: nodeVals에 담긴 값을 오름차 순 정렬2번째로 작은 노드를 반환하고, 만일 값이 존재하지 않을 경우 -1 반환
maxLength: 증가하는 subArray 요소의 최대 길이curLength: 증가하는 subArray 현재 길이curGap: 현재 요소와 이전 요소의 차증가하지 않는다면 길이를 초기화하고, 증가한다면 curLength를 증가시키며 최대 길이와 비교탐색된 subArr
isPalindrome: 투 포인터를 설정하여 팰린드롬 여부 확인validPalindrome: 최대 한 개 까지의 단어를 제거하고 팰린드롬 여부 확인2-1. 투 포인터로 순회하며 현재 비교 문자가 다르다면, 왼쪽 글자와 오른쪽 글자를 각각 제거하여 팰린드롬 여부 확인하
record: 이전 숫자 기록operations 순회연산자에 맞는 연산 수행3-1. D라면, 이전 숫자의 2배를 record에 추가3-2. C라면, 이전 숫자 제거3-3. +라면, 이전 두 숫자 합 record에 추가3-4. 숫자라면, record에 추가record의
n을 2진수 문자열로 변환한다.strN을 순회하며 이전 문자와 동일 여부를 확인한다.2-1. 동일하다면 false 반환모든 문자가 교차적으로 달랐다면 true 반환
group: 0과 1의 연속된 수가 모여 있는 배열count: 0 또는 1의 수를 카운트 하는 변수s 순회하며 연속된 0 또는 1의 수 카운트인접한 두 group 중 최소 수 만큼이 결합 가능한 최소의 수 이므로 카운트4-1. 예를 들어, 0 과 111이 인접한 두 그
frequent: 등장한 숫자의 빈도nums 순회하며 각 숫자의 빈도를 구함maxFreq: 최빈값을 구함shortestLen: 최소 서브 어레이의 길이nums를 순회5-1. curLen: 현재 값이 최빈값이라면, 시작 지점과 끝 지점을 통해 길이를 구함5-2. 현재 최
현재 노드(root)가 없다면 null 반환현재 노드(root.val)가 목표 값(val)과 같다면 현재 노드(root) 반환left: 현재 노드(root)의 왼쪽 leafright: 현재 노드(root)의 오른쪽 leafleft 혹은 right 중 한 곳이라도 목표
nums: 입력받은 숫자 배열을 오름차 순 정렬k: k번째 수 저장add: 호출3-1. 이진 탐색을 통해 적절한 val의 위치 탐색3-2. nums에 val을 반영한 후 k번째 요소 반환
이진 탐색을 위한 left, right를 정의한다.left와 right를 통해 mid값을 도출한다.2-1. 현재 값과 mid 값이 같다면 배열 내에 존재하므로 해당 인덱스를 반환한다.2-2. 그렇지 않다면, mid 값과 target을 비교하며 포인터를 조정해 탐색한다.
set: Set 자료구조 선언add: Set 자료구조에 key 추가remove: Set 자료구조에서 key 제거contains: Set 자료구조에 key 여부 확인
map: key, value로 이루어질 Map 객체 생성put: key를 key 값으로 갖고, value를 해당 value로 설정get: 해당하는 key 정보를 Map에서 출력, 없다면 -1 반환remove: 해당 Map에서 key 정보를 제거
s를 소문자로 변환하여 반환환
마지막 문자가 1비트 문자인지 여부 반환, 여기서 1비트 문자란 0만을 의미함binary: 가능한 decode bit 목록백트레킹 수행2-1. 남은 비트가 한 자리 수 이고, 그 비트가 0이라면 문제에서 원하는 조건을 충족하므로 true 반환2-2. isDecodabl
total: nums 요소의 총합leftSum: 왼쪽에서부터 누적하는 요소의 합nums 순회3-1. 현재 요소의 좌측과 우측 요소의 합이 같다면 인덱스 반환3-2. 그렇지 않다면, 현재 값을 왼쪽 값에 누적하며 탐색피벗 인덱스가 없었으므로 -1 반환
selfDividingNums: 자기분해 수들의 집합left에서 right를 포함한 범위 수 순회2-1. current: i 요소를 문자열 화 하여 각 자릿수를 분해2-2. current의 모든 요소가 i 요소를 나누어 떨어지게 할 수 있다면, 자기분해 수로 인정탐색된
rowMax: 최대 행colMax: 최대 열visited: 방문했던 셀 기억origin: 목표 타겟의 원래 값spread(sr, sc)를 통해 재귀 탐색5-1. 이미 방문했던 셀이거나 목표 색과 현재 셀 색이 다르다면 탐색 종료5-2. 현재 셀을 방문 기록에 추가하고
charCodeLetters: letters를 모두 문자 코드로 변환targetToCharCode: target을 문자 코드로 변환만약, letters의 마지막 글자가 target보다 문자 사전순으로 더 작다면, 문제 조건대로 letters의 첫 문자 반환이진탐색이진
n: cost의 길이dp: dp 배열 생성첫째, 혹은 둘째 칸부터 시작이 가능하므로 사전 설정세번째 칸부터 n 만큼 순회4-1. 전전 칸에서 점프, 혹은 이전 칸에서 점프 두 경우의 수 중 최솟값으로 현재 cost와 합하여 저장마지막 계단, 혹은 마지막 바로 이전계단
empty: 값과 인덱스가 최하 값인 객체first: 가장 큰 값과 인덱스를 갖는 객체second: 두 번째로 큰 값과 인덱스를 갖는 객체nums 순회4-1. first보다 큰 수가 있는 경우, 기존 값을 second로 위임하고 해당 값을 first에 입력4-2. fi
countPrime: left와 right를 포함한 범위 내 소수의 수left와 right를 포함한 범위 탐색2-1. 각 수의 1의 비트 수 탐색2-2. 2-1의 수가 소수인지 판별2-3. 소수라면 countPrime 증가countPrime 반환
shortestCompletingWord: 가장 짧은 완성 문자열licenseFreq: onlyStrLicensePlate의 문자 빈도onlyStrLicensePlate: licensePlate에서 문자만 조회 후 소문자 변환하여 배열로 정의onlyStrLicenseP
matrix 순회1-1. 좌측 상단 대각선 요소가 현재 요소와 다르다면, false 반환1-2. 우측 하단 대각선 요소가 현재 요소와 다르다면, false 반환모든 요소가 좌측 상단, 우측 하단 대각선 요소와 같으므로 Toeplitz Matrix 행렬임 true 반환
jewels를 문자 단위로 분리하여 Set 자료구조에 저장stones를 순회하며 보석이라면 jewelCount를 증가시킴카운트 된 jewelCount 반환
Binary Search Tree 특성 상, 부모 노드의 왼쪽 노드는 더 작고 오른쪽 노드는 더 크기 때문에 중위 순회를 통해 노드들의 값을 오름차 순으로 정렬한다정렬된 배열을 탐색하며 노드 간 최소 거리의 차를 확인한다최소 거리의 차를 반환한다.
회전 가능 횟수를 s의 길이로 설정한다.각 자리를 goal과 비교한다.2-1. 자리가 갖을 경우 다음 문자를 검사한다.2-2. 자리가 다를 경우 s의 맨 앞 문자를 맨 뒤로 보낸다.이동 가능 횟수가 종료되었거나, 모든 문자를 비교했을 때 goal과 최종적으로 비교하여
words의 각 문자를 모스 부호로 변경모스 부호 내의 중복을 제거중복이 제거된 모스 부호의 크기 반환
widths의 가중치가 적용된 배열을 생성한다.100의 너비를 갖는 lineOfS를 갱신하며 몇 줄이 나올 수 있는지 확인한다.최종적으로 줄 수와, 사용된 너비를 계산하여 반환한다.
brute force 형식으로 모든 세 점의 면적을 비교한다. (가우스 삼각형 공식 사용)그 중 최대 넓이의 삼각형을 찾는다.최대 넓이를 반환한다.
banned된 단어를 미리 Set에 추가한다.paragraph를 소문자로 변경한 후 영문 대소문자가 아닌 경우를 기준으로 나눈다..,';등 다양한 기호를 제거한 정제 단어가 banned인 상태인지 확인한다.빈도를 저장하여 가장 많은 빈도를 갖는 단어를 반환한다.
s내에서 처음 c가 나오는 위치와 그 다음 c가 나오는 위치를 찾는다.1-1. 이 때, 만약 c가 한 번 밖에 나오지 않는다면, nextCIdx를 Infinity로 설정하여 항상 첫 c 위치와 거리를 비교할 수 있도록 한다.s를 순회하며, 이전 c 위치와 다음 c 위치
모음 저장sentence를 단어 별로 분리순회하며 다음 규칙 적용3-1. 자음으로 시작한다면 첫 문자를 마지막 문자 뒤에 붙임3-2. ma를 문자 뒤에 붙임3-3. a를 순회한 수 만큼 추가로 붙임규칙이 적용된 단어들을 공백으로 이어붙임결과 문자열 반환
s를 순회1-1. 같은 문자가 반복 된다면 끝 인덱스를 갱신하며 탐색1-2. 다른 문자가 나왔다면, 이전까지의 문자 길이가 3 이상인 large group인지 판별 후 갱신탐색된 large group 반환
image를 순회1-1. 각 pixel을 역순으로 정렬1-2. 정렬된 결과를 bit 반전변환된 집합을 반환
각 도형의 x, y값을 구조분해교차 될 수 없는 사각형일 경우 false 반환교차 될 수 있는 사각형일 경우 true 반환
s를 순회한다.1-1. 1-2. 이전 문자가 없을 경우 2. t를 같은 방식으로 처리한다.s와 t가 같은지 비교한다.
문자열 길이가 다르면 같아질 수 없음동일 문자라면 다음 규칙을 따름2-1. 중복 되는 문자가 있는 경우, 그 문자를 swap 하면 되므로 가능2-2. 없는 경우 어딜 바꿔도 달라지므로 불가능다른 문자라면 다음 규칙을 따름3-1. 문자열에서 다른 부분을 찾아냄3-2. 다
5원을 받은 경우는 그냥 합산10원을 받은 경우 거스름 돈 5원이 없다면 false20원을 받은 경우 다음 규칙을 따름3-1. 5원 짜리 거스름 돈이 없다면, false3-2. 10원 짜리 거스름 돈이 없다면, 5원 3개가 있는지 확인 없다면 false3-3. 10원
전치행렬의 특성에 맞게 행을 열로, 열을 행으로 변환하는 문제기존 행의 길이를 열로, 열의 길이를 행의 길이로 갖는 배열을 생성한다.matrix를 순회하며 기존 행의 값을 생성한 배열의 열에 입력하고, 열의 값을 생성한 배열의 행 정보로 입력한다.생성된 배열을 반환한다
dfs 수행하며, 양쪽 자식 노드가 없는 경우 leaf 노드로 간주leaf 노드의 모음을 JSON.stringify로 문자열화 하여 문자비교비교값 반환
앞선 노드와, 뒤따른 노드를 선언한다.앞선 노드는 2칸 전진, 뒤따른 노드는 1칸씩 전진한다.앞선 노드가 더이상 갈 곳이 없다면 뒤따른 노드의 위치가 중간 위치이다.뒤따른 노드 반환
상단 뷰는, 블록이 하나 이상 존재할 경우 무조건 하나의 면적씩만 차지한다.전면 뷰는, 열의 최댓값만큼 면적을 차지한다.측면 뷰는, 행의 최댓값만큼 면적을 차지한다.상단, 전면, 측면 면적의 합계를 반환한다.
공백으로 구분된 s1, s2에 등장하는 모든 단어의 빈도를 확인한다.딱 한 번 등장한 단어의 집합을 만든다.해당 집합을 반환한다.
엘리스와 밥의 캔디 수 합계를 구함엘리스가 건네는 캔디를 x, 밥이 건네는 캔디를 y로 가정2-1. 엘리스 총합 - x + y = 밥의 총합 - y + x2-2. 엘리스 총합 - 밥의 총합 = 2(x - y)2-3. x - y = (엘리스 총합 - 밥 총합) / 22-
현재 셀의 블록 높이를 구함현재 블록의 윗면과 아랫면은 겹칠 수 없으므로 미리 더함 += 2양옆과 앞뒤를 확인하며, 인접한 블록이 있는 경우 해당 높이만큼 뺀 면적을 총 면적에 더함총 면적을 반환함
nums를 순회한다.1-1. 현재 값에서 이전 값을 빼 양수라면 증가, 음수라면 감소 플래그를 정의한다.1-2. 이전 플래그와 현재 플래그가 불일치 한다면 false순회하며 모든 플래그가 일치한다면 true
더미 노드 생성중위 순회순서에 따라 더미 노드 메모리에 연결더미 노드 시작지점 반환
nums를 순회1-1. 홀수는 홀수 배열에 할당1-2. 짝수는 짝수 배열에 할당짝수를 우선 나열하며, 그 이후 홀수를 붙여 나열나열된 배열 반환