본문 바로가기

Java

(4)
Stack 대신에 Deque를 사용하자 여태 stack 자료구조를 사용할 경우, 단순히 Stack 클래스를 구현해서 사용해왔다. 그러나 Stack 클래스는 Vector를 상속하는 클래스인데, Vector 클래스 내부를 보면 대부분 메소드가 synchronized로 선언되어 있다. 대부분의 경우에는 성능 낭비이기 때문에, Deque 구현체인 ArrayDeque를 사용하자. 단, 클래스명대로 Deque는 queue & stack 특성이 둘다 가능하기 때문에, 코드를 작성할때 오타 및 실수를 조심하자!
LeetCode 2. Add Two Numbers 문제 요약: 2개의 Number형 자료구조(링크드리스트와 유사)가 주어졌을때, 각각의 원소를 더한 자료구조 (input과 같은)를 반환 하시오. 만약, 길이가 다르면 남는 원소 그대로 반환. 단 두자리수가 넘어가면 다음 링크드 리스트의 원소의 값에 1을 더한다. 예: input: 2 -> 4 -> 3 5 -> 6 -> 4 output: 7 -> 0 -> 8 input: 9 -> 9 -> 9 -> 9 -> 9 -> 9 9 -> 9 -> 9 output: 8 -> 9 -> 9 -> 0 -> 0 -> 0 -> 1 input: 2 -> 4 -> 9 5 -> 6 -> 4 -> 9 output: 7 -> 0 -> 4 -> 0 -> 1 문제 접근: 처음에는 input 각각 반복문으로 루프 하나가 진행될때마다 10의 ..
LeetCode 338. Counting Bits 문제 요약: 숫자(input)가 주어졌을때, 1부터 주어진 숫자까지 각각 2진수로 변환했을때, 각각 1의 갯수를 배열로 반환 하시오. 예: input: 2 -> 정답: [0,1,1] input: 5 -> 정답: [0,1,1,2,1,2] 문제 접근: 단순하게 반복문을 돌면서, 각각의 숫자를 2진수로 변환해서 1의 갯수를 구하면되는데, 구글링중 2진수의 규칙을 쉽게 구현할 수 있을거 같아서, 그 원리를 코드로 구현했다. 더 효율적인 코드들이 있는거 같지만 이해하는데는 이게 제일 쉬운거 같아서 아래와 같이 구현했다. 2진수 규칙: 2의 제곱수다음 숫자는 다음 2의 제곱수가 오기 전까지, 현재의 제곱수에 1부터 더하는 규칙을 가지고 있다. 말로 쓰기 어려워서 아래와 같이 보면 이해하기 쉬울?수도 있다. 0 ->..
LeetCode 3.Longest Substring Without Repeating Characters 문제요약: 문자열(input)이 주어졌을때, 반복되는 문자(Character)없는 가장 긴 문자열의 길이를 반환 하시오. 예: input => abcabcbb 정답: 3 input => bbbbb 정답: 1 input => pwwkew 정답: 3 문제접근: 문자열을 처음부터 반복을하면서 똑같은 문자열을 만나기 전까지 루프를 돈다. 만약 반복된 문자열을 만나면 다음 루프로 넘어가고, 이전에 가장 긴 문자열과 비교해서 가장 긴 길이를 체크한다. 구현코드: 언어는 java 사용 import java.util.*; class Solution { public int lengthOfLongestSubstring(String input) { // 빈 문자열이면 그냥 0을 반환 if (input.equals("")) ..