연결리스트의 역을 구하는 문제이다. ListNode를 매개변수로 받는 reverseList메서드의 틀이 주어진다. Problem : class Solution { public ListNode reverseList(ListNode head) { } } 이 때, ListNode의 정의가 다음과 같이 주어진다. public class ListNode { int val; ListNode next; ListNode() {} ListNode(int val) { this.val = val; } ListNode(int val, ListNode next) { this.val = val; this.next = next; } } 풀이는 reverseList메서드에 작성하면 된다. Solution : 재귀함수를 이용해 연결리..
각 자릿수가 하나의 노드로 이루어진 두 리스트노드의 합을 리스트노드로 반환하는 문제이다. 두 ListNode를 매개변수로 받는 addTwoNumbers메서드의 틀이 주어진다. Problem : class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { } } 이 때, ListNode의 정의가 다음과 같이 주어진다. public class ListNode { int val; ListNode next; ListNode() {} ListNode(int val) { this.val = val; } ListNode(int val, ListNode next) { this.val = val; this.next = next; } } 풀이는 ad..
주어진 두 문자열 s와 t가 애너그램 관계인지 여부를 반환하는 문제이다. String s와 t를 매개변수로 받는 isAnagram메서드의 틀이 주어진다. Problem : class Solution { public boolean isAnagram(String s, String t) { } } 풀이는 isAnagram 메서드에 작성하면 된다. Solution : 1. 두 문자열의 길이가 다르면 애너그램 관계일 수 없으므로, false를 사전 반환한다. 2. 알파벳 길이(26)의 숫자 배열을 선언하고, 첫번째 문자열 s의 각 알파벳을 Ascii 코드표를 활용하여 배열에 카운팅한다. ('a'는 Ascii코드 상 97에 해당하지만, 메모리 사용 감소를 위해 - 'a'를 하게 되면 0번 인덱스에 위치시킬 수 있다..
반복없이 가장 긴 문자열의 길이를리스트로 반환하는 문제이다. String을 매개변수로 받는 lengthOfLongestSubstring메서드의 틀이 주어진다. Problem : public class LongestSubstring { public int lengthOfLongestSubstring(String s) { } } 풀이는 lengthOfLongestSubstring 메서드에 작성하면 된다. Solution 1: HashSet을 사용하는 방법 1. 왼쪽/오른쪽 포인터, 최대 길이 값을 담을 int 변수를 초기화 한다. 고유문자를 담을 Set 변수을 초기화한다. 2. 오른쪽 포인터가 문자열 끝에 닿을 때까지 반복할 때, 1) 오른쪽 포인터의 문자가 고유문자Set에 없으면, 추가하고 포인터를 하나 ..
애너그램(철자 순서를 바꾼 말) 관계의 문자열끼리 묶어 리스트로 반환하는 문제이다. String 배열을 매개변수로 받는 groupAnagrams 메서드의 틀이 주어진다. Problem :public class GroupAnagrams { public List groupAnagrams(String[] strs) { } }풀이는 groupAnagrams 메서드에 작성하면 된다. Solution :1. 주어진 문자열 배열로 반복문을 돌며 애너그램 맵에 추가한다. 2. 이 때, 애너그램 맵의 키는 해당 문자열을 정렬한 문자(문자열이 'cat'이라면 키는 ‘act')로 한다. 1) 애너그램 맵에 동일한 키가 없는 경우, 해당 키로 문자열이 담긴 리스트를 삽입한다. 2) 애너그램 맵에 이미 동일한 키가 있는 경우,..
이벤트 제어의 두 방식, 디바운스(Debounce)와 쓰로틀(Throttle)에 대해 알아보겠습니다. 언제 이벤트 제어가 필요할까? 짧은 시간 내에 수많은 이벤트가 발생하지만, 발생하는 모든 이벤트에 대한 처리가 필요하진 않은 경우에 이벤트 제어 방식을 적용함으로써 처리량을 조절할 수 있습니다. 예를 들어, 마우스 움직임이나 타이핑, 또는 스크롤링 등에 의해 발생하는 이벤트가 있습니다. 이러한 상황에서 발생하는 모든 이벤트를 처리하려고 하면, 실제 사용자가 체감도 하지 못할 양의 이벤트 처리를 위해 다음과 같은 문제점이 나타날 수 있습니다. 서버/클라이언트의 리소스 낭비 서비스 성능 저하 사용자 경험 저하 반대로, 이벤트 제어를 통해 처리량을 조절하게 되면 다음과 같은 효과를 기대할 수 있습니다. 서버/..
정적 멤버 클래스(정적 중첩 클래스)와 내부 클래스 즉, 내부 클래스가 static인지 여부에 따른 차이점을 알아보겠습니다. Inner Class VS Nested Static Class 특징 비교 Inner Class non-static nested class (스태틱이 아닌 중첩 클래스), non-static member class(비정적 멤버 클래스)라고도 한다. 외부 클래스의 static 멤버/메서드와 non-static 멤버/메서드에 모두 직접 접근 가능하다. 외부 클래스의 인스턴스를 생성해야만 인스턴스 생성이 가능하다. (외부참조: 메모리 누수 가능성) Nested Static Class static member class (정적 멤버 클래스)라고도 한다. 외부 클래스의 static 멤버/메서..
#branch #merge #reset #rebase #tag 새로운 브랜치 생성하기 - branch 명령어 - 새로운 브랜치를 생성하고, HEAD는 이동하지 않는다. git branch [브랜치명] #e.g. git branch develop git branch feature/login 새로운 브랜치 생성하고 이동하기 - checkout 명령어 + '-b' 옵션 - 새로운 브랜치를 생성하고, HEAD도 이동한다. git checkout -b [브랜치명] #e.g. git checkout -b develop git checkout -b feature/login 브랜치 삭제하기 - checkout명령어 + '-d' 옵션 - 브랜치를 삭제하기 위해서는 HEAD가 다른 브랜치에 있어야 한다. git check..