배열과 연결 리스트, 알고리즘

지인·2023년 8월 1일
0

TIL

목록 보기
34/38

🐰 배열과 연결 리스트 비교

  • 비교하고 정리하는 과정에서 내가 두리뭉실하게만 알고 있었던 어느 상황에서 써야 더 효율적으로 사용할 수 있는지 시간복잡도를 통해서 보니 확실히 비교할 수 있었다.

  • 비교 정리

    • 배열은 정적 자료구조로, 크기를 미리 정해놓고 연속된 메모리에 요소들을 저장합니다. 이로 인해 메모리 상에서 효율적으로 관리되며, 인덱스를 통해 빠르게 요소에 접근할 수 있습니다. 또한 요소를 추가하거나 삭제할 때에는 다른 요소들을 이동시켜야 하므로 O(n) 시간이 걸립니다.
      반면, 연결 리스트는 동적 자료구조로, 동적으로 크기가 조절될 수 있습니다. 각 요소는 독립적인 노드로 구성되어 있고, 노드들은 포인터를 통해 서로 연결되어 있습니다. 요소를 추가하거나 삭제할 때에는 단순히 노드의 연결만 조정하면 되기 때문에 O(1) 시간이 걸립니다. 다만 리스트 앞이나 중간에 요소를 추가/삭제하는 경우 노드를 찾는 시간이 추가적으로 필요할 수 있습니다.
      결론적으로, 배열은 데이터의 접근, 탐색할 때 유용하고 연결 리스트는 데이터의 추가, 삭제할 때 유용하게 사용됩니다.

배열과 연결 리스트 비교


🐰 플러스 과제

  • 이 중 Error 메시지 관리와 예외 공통화 처리를 이런식으로 하는게 맞는지 좀 더 효율적인 방법은 없는지에 대해 고민을 많이하고 검색도 많이했지만 내가 할 수 있는 최선이였다.
    이 부분에 대해서는 튜터님에게 물어보기!!

  • PostServiceImpl

public Post findPost(Long id) {
        return postRepository.findById(id).orElseThrow(
                () -> new NotFoundException(messageSource.getMessage(
                        "not.found.post",
                        null,
                        "Not Found Post",
                        Locale.getDefault()
                ))
        );
    }
  • GlobalExceptionHandler
@ExceptionHandler({NotFoundException.class})
    public ResponseEntity<StatusResponseDto> notFoundProductExceptionHandler(NotFoundException ex) {
        StatusResponseDto statusResponseDto = new StatusResponseDto(ex.getMessage(), HttpStatus.NOT_FOUND.value());
        return new ResponseEntity<>(
                statusResponseDto,
                HttpStatus.NOT_FOUND
        );
    }
  • NotFoundException
public class NotFoundException extends RuntimeException{
    public NotFoundException(String message) {
        super(message);
    }
}
  • messages.properties
not.found.post = 해당 게시글이 존재하지 않습니다.

//나머지 부분 생략

🐰 알고리즘

  1. [프로그래머스] 삼각형의 완성조건 (1) Java

  2. [프로그래머스] 최댓값 만들기 (1) Java

    • 삼각형의 완성조건과 최댓값 만들기는 둘 다 비슷한 결이라서 Arrays.sort()를 이용해 문제해결을 했다.
  3. [프로그래머스] 숨어있는 숫자의 덧셈 (1) Java

    • 지금까지 사용한 함수를 적절히 사용해서 풀어야 하는 느낌이였다.
      첫 시도때는 string을 정수로 바꿀 생각만 했었다.
      그 결과, 입출력 예 #1 에서 1+2+3+4가 아닌 1234+1234+... 이런식으로 계속 string의 길이만큼 더해져서 4936 가 나왔다...
    • 최종적으로 split을 이용해 하나 하나 자르고 배열에 저장한뒤 향상된 포문에서 Integer.parseInt()를 사용해 정수로 바꿔 더해줬다.
profile
열쩡

0개의 댓글