일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 큐
- dfs
- scanner
- html
- JPA
- alter
- Calendar
- Java
- Union-find
- string
- priority_queue
- deque
- date
- 스택
- map
- BFS
- javascript
- spring boot
- GC로그수집
- CSS
- List
- Properties
- 힙덤프
- sql
- NIO
- union_find
- 스프링부트
- 리소스모니터링
- math
- set
- Today
- Total
목록2024/10 (49)
매일 조금씩
anagram 이란, 다른 단어가 기존 단어의 알파벳들로만 이루어진 것을 뜻하는 말이다. 난 HashMap을 사용해서 풀었지만, 간단히 Arrays.equals()로도 풀수 있었다. class Solution { public boolean isAnagram(String s, String t) { Map origin = new HashMap(); if(s.length() != t.length()) return false; for(char sc: s.toCharArray()){ origin.put(sc, origin.getOrDefault(sc, 0) + 1); } for(char tc: t.toCharA..
모든 메서드가 static인 유틸리티 클래스에서 "Add a private constructor to hide the implicit public one"라는 메시지를 볼 수 있다. 이 경고는,Java에서는 클래스를 선언하면 기본적으로 파라미터가 없는 public 생성자가 암묵적으로 제공되어서,클래스 외부에서도 해당 클래스의 인스턴스를 만들 수 있게 되어, 이를 방지하라는 의미이다. 보통 유틸리티 클래스는 인스턴스 생성이 불필요하므로,생성자를 private으로 만들어 인스턴스를 생성하지 못하게 하는 것이 일반적인 방식이다. 다음 코드는 예시이다.package com.tmax.talkstream.dto.service;import lombok.Builder;import lombok.Getter;import ..
슬라이딩 윈도우를 깊이 공부할 수 있었던 문제다. 최대 길이를 구했던 여태까지의 문제와 다르게 최소 길이를 구하는 문제였다.변수 설정, 반복문 설정 부터 모두 중요했던 문제다. 시간 복잡도: O(n+m)공간 복잡도: O(m)n: s의 길이m: t의 길class Solution { public String minWindow(String s, String t) { Map word = new HashMap(); // t의 문자를 문자, 갯수 매핑 Map window = new HashMap(); // 윈도우의 문자, 갯수 매핑 int minLength = Integer.MAX_VALUE; // 윈도우 최소 길이 int minLeft = 0; ..
하.. 이문제.. 방법을 알겠는데슬라이딩 윈도우 알고리즘을 쓰면 된다. 간단히 시작점을 기억하는 방식.흔히 조건을 만족하는 구간의 최대 길이를 구하는 문제에 활용되기 때문에, 이문제에서도 사용하면 된다.윈도우 구간을 넓히면서 조건을 만족하지 않으면 start를 차차 뒤로 민다.근데 이문제에서 이해가 안되는 부분이 있다. start를 뒤로 밀 때, 난 윈도우 구간이 조건을 만족할 때까지 밀었다.그래서 갯수가 가장 많은 알파벳의 갯수를 그때그때 업데이트 해줬다. 근데.. 그렇지 않아도 된다는 챗쥐피티의 답이 있었다.윈도우 구간을 반드시 조건을 만족하도록 만들지 않아도 된다? 왜그럴까.. 시간 복잡도가 생각보다 큰 차이가 없어서 일단 제출은 했지만 이유를 정확이 이해하지 못했다. import java.util..
이 문제는 "슬라이딩 윈도우" 알고리즘이다. 가장 긴 중복하지 않는 구간을 구하는 문제이므로, 각 알파벳을 돌되 시작점을 알고있어야한다.그리고 그 시작점은 업데이트가 될 때, 뒤로만 이동 할 수 있다. 앞으로 땡겨져선 안된다. class Solution { public int lengthOfLongestSubstring(String s) { if (s.length() check = new HashMap(); int start = 0; // 시작 인덱스 int res = 0; // 최대 길이 for (int i = 0; i