2022.11.23.WED

ronglong·2022년 11월 23일
0

코드스테이츠 Day25

  1. 기타 자료구조
  • Deque
    • 양쪽에서 구슬 꿰기
    • 추가/삭제 방향을 제한함으로써 Stack, Queue 성질을 모두 가질 수 있음.
    • 양끝에서만 데이터 추가/삭제 용이. 중간값 수정은 x
  • Linked List
    • ArrayList 공부할 때 배웠음.
    • Queue 객체 생성할 때, 생성자로 쓰이기도 함.
  • Hash Table
    • 주소록, 블록체인, 자바스크립트 실행 엔진, DNS 변환 등 다양한 곳에 쓰임.
      공부 좀 해야할 듯.
    • 해시 충돌(서로 다른 key가 같은 hash를 갖는 경우)을 막기 위해 저장소(메모리)를 넓게 씀.
    • 해시 충돌 해결 방법
    1. 개방 연결법(Open Addressing) : 다른 색인에 저장
    2. 분리 연결법(Seperate Chaining) : 동일 색인에 리스트, 트리 등의 자료구조로 데이터의 주소 저장.
    3. 저장소 확장(Resize)
  • Heap Tree
    - 특징
    • 느슨한 정렬 구조(자식 노드 끼리 정렬 없음)
    • 최대힙(루트가 최대값), 최소힙(루트가 최소값)
    • 완전 이진 트리 구조
    • 중복 값 저장 가능.
    • 데이터 삽입은 가장 마지막 노드부터.
    • 데이터 삭제는 루트부터.
    • 깊이로 구분하여 배열 만들기 가능. (첫 번째 인덱스부터 사용)
  1. 기타 적어둔 것
  • 이진 트리는 값 중복이 안 된다.
  • 배열은 꼭 깊은 복사할 것. 얕은 복사하면 주소값만 복사돼서 동기화 됨.
  • 자바와 자바스크립트는 정반대의 언어라는 흥미로운 사실.
  • 문자열 비교할 때 계속 습관처럼 == 쓰는데, String은 래퍼 클래스라서 주소값이 저장되므로 비교할 때는 .equals()를 써야한다.

<느낀 점>
결국 어제 짜고 고민한 코드는 5개 중 1개 남은 벽을 뛰어넘지 못하고 사장되었다. ㅠ
레퍼런스를 보니 아예 다른 방식으로 접근했더군. 인접 행렬 길찾기 쉽지 않네,,
재귀함수가 아직 어려운데, 그걸 베이스로 하는 알고리즘이 진짜 많다.

오늘 13번 바코드 문제는 풀이 영상 봐도 어려워서, 영상만 2번 보고, 인텔리제이에 따라 써 봄..
오늘로 자료구조가 끝이라니,, 진도 속도 무엇. 이것이 부트캠프군,,
소화의 여부는 상관없이 일단 쭉쭉 진도를 빼고 보자,, !

그래도 오늘 좋았던 점은 아침에 데일리 코딩 문제 푸는데, 내가 슈도 코드를 쭉 작성하고 만든 코드가 한 번에 통과된 것! 기분 좋았다. 그것도 밑에 올려야지.

이건 사장된 코드

public class Solution { 
  public boolean getDirections(int[][] matrix, int from, int to) {
    // TODO:
    if(matrix[from][to]==1) return true;// 1-->4 바로 연결된 경우. 

    for(int i=0; i<matrix.length; i++){ 
      if(matrix[from][i]==1) { // 1-->3 다른 인덱스로 이어지는 경우. 해당 인덱스 행을 검사. 
        for(int j=0; j<matrix.length; j++){
          if(matrix[i][j]==1 && j==from) return false; // 3-->1
          else if(matrix[i][j]==1 && j==to) return true; // 3-->4
          else if(matrix[i][j]==1 && j!=to){ //3-->2
            i=j;
          }
        }
      }
    } 
    return false;
  } 
}

이건 아침에 푼 데일리 코딩.

public class Solution { 
	public HashMap<String, String> convertListToHashMap(String[][] arr) {

    //답을 넣을 해쉬맵 만들기.
    HashMap<String,String> result = new HashMap<>();

    // arr.length가 0인 경우(빈 배열)
    if(arr.length==0) return new HashMap<String,String>();

    // arr.length가 0이 아닌 경우
    if(arr.length!=0)
      for(int i=0; i<arr.length; i++){
        // arr[i]의 길이가 0 인 경우 --> 무시
        if(arr[i].length==0) continue;
        // arr[i]의 길이가 0이 아닌 경우
        if(arr[i].length!=0){
          //키가 이미 있다면 패스. 
          if(result.containsKey(arr[i][0])) continue;
          //arr[i][0] = key. arr[i][1]=value. 
          else result.put(arr[i][0], arr[i][1]);
        }
      }
      return result;
	} 
}

0개의 댓글