Skip to content

rldnrl/problem-solving

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Java Coding Interview

LeetCode

번호 문제 코드
1 Two Sum Java
20 Valid Parentheses Java
125 Valid Palindrome Java
5 Longest Palindromic Substring Java
217 Contains Duplicate Java
387 First Unique Character in a String Java
53 Maximum Subarray Java
344 Reverse String Java
242 Valid Anagram Java

Java Data Structure Tip

HashMap

  • getOrDefault(Key, DefaultValue): Key가 존재하면, 해당 KeyValue를 반환하고, 없으면 Default Value로 설정한 값을 반환하는 메서드

  • computeIfAbsent(key, mappintFunction):

    1. null이 아닌 값과 관련된 Key
      먼저 키가 맵에 있는지 확인한다. Key가 있고 null이 아닌 값이 Key와 관련된 경우 해당 값을 반환.

    2. 매핑 함수를 사용하여 Value 계산
      또한 Key가 맵에 없거나 null 값이 Key와 관련된 경우 지정된 mappingFunction을 사용하여 값을 계산하려고 시도한다. 또한 계산된 값이 null이 아니면 계산된 값을 맵에 입력한다.

    3. 매핑 함수가 null을 반환하는 경우
      또한 mappingFunctionnull을 반환하는 경우 맵은 매핑을 기록하지 않는다.

    4. 매핑 함수에서 예외 발생 마지막으로 mappingFunction이 확인되지 않은 예외를 발생시키면 예외가 다시 발생하고 맵은 매핑을 기록하지 않는다.

  • Value를 기준으로 정렬하기

    • ListentrySet()을 넣어서 정렬하는 방법

      Map<Integer, Integer> map = new HashMap<>();
      map.put(1, 2);
      map.put(2, 1);
      map.put(3, 8);
      
      List<Map.Entry<Integer, Integer>> entryList = new ArrayList<>(map.entrySet());
      
      // 오름차순 정렬
      // 1. 람다를 이용하는 방법
      entryList.sort((a, b) -> a.getValue() - b.getValue()); // {2=1, 1=2, 3=8}
      
      // 2. Map.Entry에 내장 함수를 사용하는 방법
      entryList.sort(Map.Entry.comparingByValue()); // {2=1, 1=2, 3=8}
      
      // 내림차순 정렬
      // 1. 람다를 이용하는 방법
      entryList.sort((a, b) -> b.getValue() - a.getValue()); // {3=8, 1=2, 2=1}
      
      // 2. Map.Entry에 내장 함수를 사용하는 방법
      entryList.sort(Map.Entry.comparingByValue().reversed()); // {3=8, 1=2, 2=1}
  • Map의 value 중 최대, 최소값 뽑기

    • Collections를 이용한다.
    Map<Character, Integer> count = new HashMap<>();
    
    String str1 = "apple";
    for (char c: str1.toCharArray()) {
      count.put(c, count.getOrDefault(c, 0) + 1);
    }
    
    int maxValueInCount = Collections.max(count.values()); // 2
    int minValueInCount = Collections.min(count.values()); // 1

Character

  • isWhiteSpace(char c): c가 공백이면 true, 그렇지 않으면 false

비교 연산자

  • !=, ==를 사용하는 것보다, Objects.equals()를 사용하는 것이 좋다.
    • Valid Anagram을 풀었을 때, 동일한 값인데 다른 경우가 있었음.
    • String Literal로 할당한 값과 String.valueOf을 이용해서 String 객체로 만든 값을 비교할 때도 유용.
      • 같은 값을 담아도 == 연산자로 비교하면 false를 반환.
      • 같은 값을 Objects.equals()를 사용할 경우 true를 반환.
  • 두 배열이 같은지 확인하기
    • Arrays.equals()를 이용하면 된다.

Pair 객체 만들기

class Pair<L, R> {
    L left;
    R right;
    
    Pair(L left, R right) {
        this.left = left;
        this.right = right;
    }

    @Override
    public String toString() {
        return "Pair{" +
                "left=" + left +
                ", right=" + right +
                '}';
    }
}

List<Pair<Integer, Integer>> 정렬하기

  1. 오름차순 정렬(left를 기준으로 오름차순 정렬한다. left가 같은 경우 right를 기준으로 오름차순으로 정렬한다.)
pairs.sort((o1, o2) -> (!Objects.equals(o1.left, o2.left) ? o1.left - o2.left : o1.right.compareTo(o2.right)));
  1. 내림차순 정렬(left를 기준으로 내림차순 정렬한다. left가 같은 경우 right를 기준으로 내림차순 정렬한다.)
pairs.sort((o1, o2) -> (!Objects.equals(o1.left, o2.left) ? o2.left - o1.left : o2.right.compareTo(o1.right)));