728x90

Java 177

[Grind75-LeetCode] Longest Palindromic Substring JAVA

[Grind75-LeetCode] Longest Palindromic Substring - Medium접근구현풀이펠린드롬에 관한 문제로 문자열에서 가장 긴 펠린드롬 부분 문자열을 찾아 반환하는 문제다. 이때까지 펠린드롬 문자인지 확인하고 가장 긴 펠린드롬 문자열의 길이를 반환하는 문제를 풀었었다면 부분 문자열 자체를 찾아 반환해야 하는 문제이다.  public String longestPalindrome(String s) { if (s == null || s.isEmpty()) { return ""; } int start = 0; int end = 0;문자열이 비어있는지 체크를 해 주고 부분 문자열 반환을 위해 펠린드롬의 시작 인..

[Grind75-LeetCode] Binary Tree Right Side View JAVA

[Grind75-LeetCode] Binary Tree Right Side View - Medium 접근dfs풀이이진트리를 오른쪽에서 바라봤을 때 보이는 노드들을 루트에서 바닥까지의 순서로 반환하는 문제이다. 즉 트리의 제일 오른쪽 노드들을 순서대로 반환하면 된다. 각 레벨의 노드를 오른쪽에서 봤을 때 제일 먼저 만나는 노드를 반환하는 문제이기 때문에 오른쪽 서브트리의 노드만 해당하는 것이 아니라 해당 레벨에 맨 왼쪽 노드 하나만 존재한다면 해당 노드가 반환할 목표 노드가 된다.  public List rightSideView(TreeNode root) { List result = new ArrayList(); dfs(result, root, 0); return..

[TOY] 설계 - Adapters (Controller)

1. 클래스 설계 - adapters(Controller)adapters 패키지의 Controller 부분 설계입니다. Thymeleaf를 사용한 Server-Side Rendering 형태를 사용하기 때문에 직접 html을 렌더링 할 FormController와 로직 처리를 담당할 Controller로 분리하여 설계하였습니다.2. user.adapters.controllerUser 도메인의 Controller입니다. html 렌더링을 위한 UserFormController와 요청 처리를 위한 UserController가 존재합니다.2.1 UserFormController회원 관련 html을 렌더링하는 Controller입니다. 회원 가입, 로그인, 회원 정보 페이지 등을 불러옵니다.2.2 UserCon..

[Grind75-LeetCode] Subsets JAVA

[Grind75-LeetCode] Subsets - Medium접근dfs풀이배열의 원소들을 중복 없이 조합 가능한 모든 조합을 찾는 문제이다. 비슷한 형태의 문제를 많이 풀었던 거 같은데 이 문제도 역시나 dfs를 사용해 모든 조합을 찾아주면 된다.  public List> subsets(int[] nums) { List> result = new ArrayList(); dfs(result, new ArrayList(), nums, 0); return result; }dfs 사용을 위해 결과 배열, 현재 사용 배열, 정수 배열, 시작 인덱스를 파라미터로 넘긴다. private void dfs(List> result, List current, int[] n..

[Grind75-LeetCode] Spiral Matrix JAVA

[Grind75-LeetCode] Spiral Matrix - Medium접근구현풀이2차원 배열의 원소들을 나선형으로 접근할 때 원소 접근 순서를 List에 담아 반환하는 문제이다. 내용 자체는 정말 간단한 문제이기 때문에 예제 그림 한 번만 보면 바로 이해할 수 있는 문제이다. 내용 또한 크게 어려울 것 없기 때문에 쉽게 풀 수 있다. public List spiralOrder(int[][] matrix) { List result = new ArrayList(); int length = matrix.length * matrix[0].length; int xMax = matrix.length - 1; int yMax = matrix[0].length..

[Grind75-LeetCode] String to Integer (atoi) JAVA

[Grind75-LeetCode] String to Integer - Medium접근구현풀이문자열을 정수로 변환하는 atoi 함수를 구현하는 문제이다. atoi는 C언어에 존재하는 ASCII to Integer로 문자열을 정수로 변환하는 자바의 parseInt와 같은 메서드이다. 기본적인 atoi 함수는 주어진 문자열을 정수로 변환하고 변환이 불가능한 경우 0을 반환한다. 그리고 범위 체크 부분이 존재하지 않기 때문에 범위를 벗어난 값이 들어오게 되면 의도치 않은 값이 반환되기도 한다. 반면 자바의 parseInt의 경우 똑같이 문자열을 정수로 변환하는 함수이지만 변환이 불가능한 경우 런타임 예외인 NumberFormatException를 던지게 되고 정수로 변환 가능한 범위인지도 체크하기 때문에 범위를..

[Grind75-LeetCode] Partition Equal Subset Sum JAVA

[Grind75-LeetCode] Partition Equal Subset Sum - Medium접근dpdfs풀이주어진 정수 배열 내의 값을 동등한 부분 합으로 만들 수 있는지 검사하는 문제이다. 예제 1번처럼nums = [1,5,11,5] -> [1, 5, 5] and [11]동일한 부분합으로 분리할 수 있는지 확인하는 것이다. 예제 1번이 [1, 5, 5]와 [11]로 분리되어 원소들을 더 한 값이 배열에 존재하는가와 같은 문제 이해를 잘못할 수 있는데 nums = [3,3,3,4,5] -> [3,3,3] and [4,5] 위처럼 단순히 부분합이 같은 두 집합으로 분리하는 것이다. public boolean canPartition(int[] nums) { int target = 0;..

[Grind75-LeetCode] Word Break JAVA

[Grind75-LeetCode] Word Break - Medium접근dpdfsdfs + 메모이제이션풀이주어진 문자열 s를 단어 List에 들어있는 단어들로 구성이 가능한지 검사하는 문제이다. List에 들어있는 단어들은 중복이 없고 여러 번 사용이 가능하다. 문제 이해자체는 굉장히 쉽기 때문에 테스트케이스만 봐도 이해할 수 있다.  처음 접근으로 replace를 사용해 List에 들어있는 단어들을 공백으로 치환한 뒤 순회가 끝나고 문자열이 공백이 되었다면 만들 수 있는 것으로 true, 문자가 남아있다면 false를 반환하게 만들어봤다.  public boolean wordBreak(String s, List wordDict) { for (String word : wordDict) ..

[Grind75-LeetCode] Sort Colors JAVA

[Grind75-LeetCode] Sort Colors - Medium접근Dutch National Flag풀이이 문제는 0, 1, 2가 들어있는 배열을 라이브러리의 sort 함수를 사용하지 않고 오름차순으로 정렬하면 되는 문제이다. 추가로 외부에 추가적인 공간을 사용하지 않고 배열 내부의 움직임으로만 one-pass 즉 한 번의 순회로 정렬해 보라는 추가 문제도 있다. 우선 Arrays.sort()를 사용해 제출을 해도 0ms의 최고 성능으로 통과는 가능하다. 그러나 문제의 취지와는 어긋나기에 라이브러리를 사용하지 않고 구현해야 한다. 우선 자바의 Arrays.sort()는 원시 타입 배열를 기준으로 Dual-Pivot QuickSort 알고리즘을 통해 정렬된다. Dual-Pivot QuickSort는..

[Grind75-LeetCode] Accounts Merge JAVA

[Grind75-LeetCode] Accounts Merge - Medium 접근dfsUnion-Find풀이2차원 리스트로 사용자의 이름과 보유한 이메일 정보가 주어진다. 각accounts [i][0]는 사용자의 이름을 나타내고 1번 인덱스부턴 보유 이메일이 들어있다. 이번 문제는 사용자가 보유한 중복되는 이메일을 병합하는 문제로 동명이인은 가려내고 같은 사용자의 이메일은 병합해 깔끔하게 출력하는 것이 목표이다. accounts = [["John","johnsmith@mail.com","john_newyork@mail.com"], ["John","johnsmith@mail.com","john00@mail.com"], ["Mary","mary@mail.com"], ["John","jo..

728x90