20210113 리트코드 알고리즘 hash map

NOAH·2021년 1월 13일
1

TIL

목록 보기
5/179
post-thumbnail

소감 : 코딩나라에 온 지 10일이 지났다.

첫번째 문제는 해쉬맵을 공부할 수 있어서 좋았고,
두번 째 문제는 str으로 변환 할 까 했지만, %를 쓰고 싶은데 long개념도 나오고 복잡해서 세번째 문제 먼저 풀었다.
세번째 문제, 어제 싱글리스트를 공부했다고 개념이 익숙해진 것이 신기했다.
그래도 힌트가 없었으면 혼자서는 못풀었을 것 같다.
일단 알고리즘 풀면서 자바에 익숙해지는 것에 중점을 두자^^

첫번째 문제보기 : Two Sum

Hash map 관하여 공부

Key 값은 ID, Value 는 Password !! [생활코딩 : 맵의 사용법]
map의 put / get / containsKeY?
throw : 자바에서 예외 처리 하는 방법

Twosum 제출안

package AlgorithmPractice;
import java.util.*;

public class AlgorithmDay2_1 {
    // int [] 과 int target 을 받는 twoSum생성자를 생성합니다.
        public int[] twoSum(int[] nums, int target) {
  //    정수, 정수 형태의 Map 타입 HashMap num을 생성합니다.
            Map<Integer, Integer> num = new HashMap<>();
   // nums 배열의 인덱스를 key 에, 인덱스 값은 value에 할당하여 반복문으로 돌려 맵에 저장해줍니다.
            for(int i = 0; i <  nums.length ; i ++){
                num.put(nums[i],i);
            }
   // 보수(complement를 찾아내서 리턴해줍니다.
            for(int i = 0; i < nums.length ; i++) {
                int complement = target - nums[i] ;
                if(num.containsKey(complement) && num.get(complement) != i){
                    return new int[] { i, num.get(complement) };
                }
            }
    // 에외 상황들은 던져버립니다.
            throw new IllegalArgumentException("No two sum solution");
        }
    }

두번째 문제보기 : Reverse Integer

세번째 문제보기 : Remove Duplicates from Sorted List

제출안

 // Definition for singly-linked list.
  public class ListNode {
      int val;
      ListNode next;

      ListNode() {
      }

      ListNode(int val) {
          this.val = val;
      }

      ListNode(int val, ListNode next) {
          this.val = val;
          this.next = next;
      }
  }
public ListNode deleteDuplicates(ListNode head) {
      ListNode current = head;
// 현재 노드와 존재하고 그다음  노드도 존재하는한 계속 루프를 돌립니다. 
      while (current != null && current.next != null) { 
// 만약 다음 노드값이 현재 노드 값과 같으면
          if (current.next.val == current.val) {
// 다음 노드에 다다음 노드를 넣습니다.
              current.next = current.next.next;
          } else {
// 다르다면 현재노드에 다음 노드를 연결합니다.
              current = current.next;
          }
      }
      return head;
  }
}

5개의 댓글

comment-user-thumbnail
2021년 1월 13일

코딩나라에 온 지 10일! 너무 귀여워요ㅋㅋㅋㅋ
노아랑 또 같은 조 되어서 좋은데 이번에는 목소리를 많이 못 들은 것 같아 아쉽네요ㅠㅠ 혹시 하다가 막히는 거 있으면 다들 조용해도 바로바로 질문주세요! (저두 잘 못하지만 잘하는 누군가가 답변해 주겠죠😂) 오늘도 고생 많으셨어요👏👏

1개의 답글
comment-user-thumbnail
2021년 1월 13일

해싱(Hashing)이란?
대부분의 탐색 방법들은 탐색 키를 저장된 키 값과 반복적으로 비교하면서 탐색을 원하는 항목에 접근한다. 반면 해싱은 키 값에 직접 산술적인 연산을 적용하여 항목이 저장되어 있는 테이블의 주소를 계산하여 항목에 접근한다. 이렇게 키 값의 연산에 의해 직접 접근이 가능한 구조를 해시 테이블(hash table)이라 부르고, 해시 테이블을 이용한 탐색을 해싱(hashing)이라 한다.
출처: https://mattlee.tistory.com/62 [waca's field]

1개의 답글
comment-user-thumbnail
2021년 1월 13일

저도 알고리즘 두개 풀었습니다! 근데 LinkedList 아무리봐도 도저히...개념은 알겠는데 코드로는 이해가 안가네요. ㅠ.ㅠ 나중에 괜찮으시면 설명한번해주세요!

답글 달기