본문 바로가기

분류 전체보기

(42)
[LeetCode 75] 1768. Merge Strings Alternately 문제 문자열 word1과 word2가 주어졌을 때 word1부터 시작해 word2와의 문자들은 하나씩 더해 병합하는것 예를들이 word1이 "abc" word2가 "pqr"일 경우 a(word1) p(word2) b(word1) q(word2) c(word1) r(word2) 의 순서로 apbqcr이 나오게 병합한다. 정답 예 public String mergeAlternately(String word1, String word2) { char[] ch1 = word1.toCharArray(); char[] ch2 = word2.toCharArray(); int length1 = ch1.length; int length2 = ch2.length; StringBuffer buffer = new StringB..
[leetcode75] 226. Invert Binary Tree 문제해석 이진트리의 root가 주어졌을 때 트리를 반대로 한 뒤 root를 반환해라 정답 예) /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public TreeNode invertTree(TreeNode..
[leetcode75] 19. Remove Nth Node From End of List 문제해석 linked list의 head가 주어졌을 때 리스트의 마지막부터 n번째 노드를 제거하고 헤드를 반환하라 정답 예 public ListNode removeNthFromEnd(ListNode head, int n) { int size = 1; ListNode node = head; // 리스트 사이즈 측정 while (node.next != null) { size++; node = node.next; } if (n == 1 && size == 1) { return null; } if (n == size) { return head.next; } node = head; for (int i=0; i
[leetcode 75] 43. Multiply Strings 문제해석 음수가 아닌 num1과 num2가 문자열로 주어졌을 때 두 수의 곱을 문자열로 표기하기 BigInteger 라이브러리나 입력값을 바로 정수로 전화하지 않고 풀어야 한다. 주어진 num1, num2가 각각 최대 200자리 이므로 int나 long형으로 변환해서 풀수도 없다. 각 자릿수를 나눠서 계산하는게 가장 좋은 형태인 것 같다. public String multiply(String num1, String num2) { if ("0".equals(num1) || "0".equals(num2)) { return "0"; } // ans[i]는 각각 자릿수에 해당하는 숫자의 곱 // ex) i가 0일 때는 1의 자릿수의 곱 합 // ex) i가 1일 때는 10의 자릿수의 곱 합 int[] ans =..
[leetcode 75] 202. Happy Number 문제해석 숫자 n이 happy인지 판단하기 happy number는 다음과 같이 정의한다 양의 정수로 시작해 각자릿수의 제곱을 더한다. 위 과정을 반복해 1이 나오면 종료하거나 아니면 무한히 반복한다. 과정의 마지막이 1이면 happy number 정답 예) public boolean isHappy(int n) { // 각자릿수의 제곱의 값이 반복되어 나오는지 체크하기 위한 자료구조 // add와 contains를 사용하므로 O(1)의 비용이 드는 HashSet 사용 Set set = new HashSet(); while (n != 1) { int digit; int num = n; n = 0; while (num != 0) { // 각 자릿수 계산 digit = num % 10; // 자릿수 마다 제곱..
[leetcode 75] 278. First Bad Version 문제해석 n이 주어졌을 경우 1.2.3...n 까지의 버전별 제품이 존재하는데 만약 최초로 불량버전이 존재하는 버전 이후로 모든 버전은 불량일 때 최초 불량제품의 버전을 찾기 정답 예 public int firstBadVersion(int n) { if (n == 1) { return 1; } if (isBadVersion(n) && !isBadVersion(n-1)) { return n; } int start = 1; int end = n; int mid; // bad version 의 시작 발견시 종료 while(end > start) { // 원래는 (start + end) / 2 인데 start + end를 하면 int 형 값의 범위보다 커져서 범위를 초과하지 않게 계산식 변경 mid = star..
[leetcode 75] 844. Backspace String Compare 문제해석 문자열 s와 t가 주어졌을 경우 텍스트 입력기에 입력했을 때 동일하면 true를 반환하기 '#'은 backspace(지우기)를 의미한다. 만약 빈 텍스트를 backspacing하는 경우에는 빈텍스트 그대로 유지된다. 정답 예 public boolean backspaceCompare(String s, String t) { Stack sStack = new Stack(); Stack tStack2 = new Stack(); for (int i=0; i
[leetcode 75] 1. Two Sum 정수가 들어있는 배열 nums와 정수 target이 주어졌을 경우 nums의 두 숫자를 합해 target이 나오는 nums의 두 숫자의 위치를 반환하기 정답은 정확히 하나만 존재하며 같은 배열의 요소를 두번 쓸 수 없다. 예를들어 nums = [3, 3]이고 target이 6인경우 정답을 [0,0]혹은 [1,1]이 안된다는 이야기 정답 예 public int[] twoSum(int[] nums, int target) { Map map = new HashMap(); int[] output = new int[2]; for (int i = 0; i < nums.length; i++) { // target - nums[i] 가 기존 맵에 저장되어있는지 검사 if (map.get(target - nums[i]) ..