
애너그램(철자 순서를 바꾼 말) 관계의 문자열끼리 묶어 리스트로 반환하는 문제이다. String 배열을 매개변수로 받는 groupAnagrams 메서드의 틀이 주어진다. Problem :public class GroupAnagrams { public List groupAnagrams(String[] strs) { } }풀이는 groupAnagrams 메서드에 작성하면 된다. Solution :1. 주어진 문자열 배열로 반복문을 돌며 애너그램 맵에 추가한다. 2. 이 때, 애너그램 맵의 키는 해당 문자열을 정렬한 문자(문자열이 'cat'이라면 키는 ‘act')로 한다. 1) 애너그램 맵에 동일한 키가 없는 경우, 해당 키로 문자열이 담긴 리스트를 삽입한다. 2) 애너그램 맵에 이미 동일한 키가 있는 경우,..

패턴String의 애너그램에 해당하는 시작 index 리스트를 반환하는 문제이다. 두 개의 String을 매개변수로 받는 findAnagrams 메서드의 틀이 주어진다. Problem : public class FindAllAnagramsInAString { public List findAnagrams(String s, String p) { } } 풀이는 findAnagrams 메서드에 작성하면 된다. Solution : 패턴(p)에 해당하는 Ascii값이 1인 int배열을 통해서 푼다. 오른쪽 포인터가 배열 길이 이내인 동안 반복문을 돌며 Sliding Window 방식으로 푼다. 오른쪽 포인터에 해당하는 Ascii가 0보다 크면 패턴이 있는 것이므로, 해당 배열값을 줄이고 포인터와 count를 늘린다..

애너그램 맵에 해당하는 인덱스를 반환하는 문제이다. int 배열 두 개를 매개변수로 받는 anagramMappings 메서드의 틀이 주어진다. Problem : public class FindAnagramMapping { public int[] anagramMappings(int[] A, int[] B) { } } 풀이는 주어진 anagramMappings 메서드에 작성하면 된다. Solution : 주어진 배열 B로 anagram(key) - index(value)로하는 애너그램 맵을 만든다. 주어진 배열 A를 돌며 애너그램 맵에서 해당하는 index를 구해서 배열로 반환한다. import java.util.HashMap; import java.util.Map; public class FindAnagr..

주어진 숫자 배열에 대한 서브 배열 중 합의 값이 가장 큰 서브 배열을 반환하는 문제이다. 예를 들어, {-2, 3, -1, 4}에서 합이 가장 큰 서브 배열은 {3, -1, 4}이다. 여기서 중요한 점은 서브 배열은 반드시 연속된다는 점이다. ({3, 4}와 같이 선택적 합은 불가능) int 배열을 매개변수로 받는 maxSubArray 메서드의 틀이 주어진다. Problem : public class MaximumSubarray { public int maxSubArray(int[] nums) { } } 풀이는 주어진 maxSubArray 메서드에 작성하면 된다. Solution : 주어진 배열을 순서대로 돌며 "현재 인덱스의 값"과 "지난 서브 배열 + 현재 인덱스의 값" 중 무엇이 더 큰지 비교한다..

고유한 이메일 주소의 수를 반환하는 문제이다. 단, local파트에서 "."은 있으나 없으나 같은 것으로 치고, +이하는 무시한다. 하지만 domain파트에는 서로 다른 것으로 간주한다. 예를 들어, 아래에서 첫번째와 두번째는 같은 주소로 간주하며, 세번째는 도메인이 다른 주소이다. String 배열을 매개변수로 받는 numUniqueEmails 메서드의 틀이 주어진다. Problem : public class UniqueEmailAddresses { public int numUniqueEmails(String[] emails) { } } 풀이는 주어진 numUniqueEmails 메서드에 작성하면 된다. Solution : 계정에서 고유한 local 부분만 가져온다. ("."은 무시하고, "+" 또는 ..

각 자릿수가 배열로 주어진 하나의 수에 1을 더한 값을 각 자릿수 배열로 반환하는 문제이다. e.g. [9, 9, 9] → 999 + 1 = 1000 → [1, 0, 0, 0] int 배열을 매개변수로 받는 plusOne 메서드의 틀이 주어진다. Problem : public class PlusOne { public int[] plusOne(int[] digits){ } } 풀이는 주어진 plusOne 메서드에 작성하면 된다. Solution : 주어진 숫자배열의 맨뒤(=1의 자리수)에 1을 더하고, 그 수의 1의 자리수만 저장한다. (9 + 1 = 10이 되었을 때, 1의 자리수에 0만 저장하기 위함) 저장한 수가 0인 경우 한자리 올림수(carry)가 발생한 것이므로 carry를 1로 설정하고 다음 ..

원점과 가까운 상위 k개의 점을 구하는 문제이다. 2차원 int 배열과 int를 매개변수로 받는 kClosest 메서드의 틀이 주어진다. Problem : public class KClosestPointToOrigin { public int[][] kClosest(int[][] points, int k) { return result; } } 풀이는 kClosest 메서드에 작성하면 된다. Solution : 피타고라스의 정리에 따라 좌표평면에서 두 점 사이의 거리를 구하는 공식은 다음과 같다. 이 때, 두 점 중 하나는 원점이므로, 식은 다음과 같이 간략화 할 수 있다. 본 풀이에서는 거리 순위에 영향을 주지 않으면서 계산을 더욱 간소화 하기 위해 제곱근을 제외하고 비교했다. 앞서 설명한 간소화된 원점과..

주어진 문자열 S를 첫번째 파트 외에는 모두 K개씩 끊어 포매팅 된 대문자 형태로 변환하는 문제이다. e.g. 2-5g3-J, 2 →2-5G-3J String과 int를 매개변수로 받는 solve 메서드의 틀이 주어진다. Problem : public class LicenseKeyFormatting { public String licenseKeyFormatting(String S, int K) { } } 풀이는 주어진 solvelicenseKeyFormatting 메서드에 작성하면 된다. Solution : 주어진 문자열에서 "-"를 제거하고 대문자로 변환한다. 변환된 문자열에 뒤에서부터 K번째 마다 "-"를 삽입한다. (첫번째 파트 외에는 K개 단위로 나누기 위함) public class License..