백엔드 개발을 하면서 Optional이 자주 쓰인다. 기능들에 대해 잘 아는 것도 좋지만, Optional에 대해 어느 정도의 이해도를 가지고 용도에 맞게 사용하는지도 중요하다는 생각이 들어서 정리해보겠다. Optional이란?Optional은 Java8 버전부터 도입되었으며, '값이 없는 경우'를 표현하기 위한 용도로 사용되는 클래스이다. Optional 클래스는 Java 제네릭을 사용하여 만들어져 있으므로, 어떤 타입의 객체라도 값이 없을 수 있는 겨우에 Optional을 사용하여 표현할 수 있다. 그러면, Optional이 왜 만들어졌고, 어떨 때 사용하면 되는지 알아보자. Optional 사용 목적API 공식 문서에 보면 Optional을 만든 의도가 다음과 같이 적혀있다. API Note :Op..
학습
문제 https://school.programmers.co.kr/learn/courses/30/lessons/172928 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 class Solution { public int[] solution(String[] park, String[] routes) { int[] answer = new int[2]; // 시작 좌표 찾기 for (int i = 0; i = 0) { answer[0] ..
문제 https://school.programmers.co.kr/learn/courses/30/lessons/169198 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 import java.util.ArrayList; import java.util.List; class Solution { public int[] solution(int m, int n, int startX, int startY, int[][] balls) { int[] answer = new int[balls.length]; Point start = new Point(startX..
문제 https://school.programmers.co.kr/learn/courses/30/lessons/178871?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 class Solution { public String[] solution(String[] players, String[] callings) { for (String call : callings) { for (int i = 0; i < players.length; i++) { if (call.equals(players[i])) { String tmp = ..
기수 정렬의 핵심 이론 기수 정렬(radix sort)은 값을 비교하지 않는 특이한 정렬이다. 기수 정렬은 값을 놓고 비교할 자릿수를 정한 다음 해당 자릿수만 비교합니다. 기수 정렬의 시간 복잡도는 O(kn)으로, 여기서 k는 데이터의 자릿수를 말한다. 수행 방식 기수 정렬은 10개의 큐를 이용한다. 각 큐는 값의 자릿수를 대표한다.
병합 정렬의 핵심 이론 병합 정렬(merge sort)은 분할 정복(divide and conquer)방식을 사용해 데이터를 분할하고 분할한 집합을 정렬하며 합치는 알고리즘이다. 병합 정렬의 시간 복잡도는 O(nlogn)이다. 수행 방식 부분 그룹은 setN으로 표시했다. 그림을 보면 최초에는 8개의 그룹으로 나뉜다. 이 상태에서 2개씩 그룹을 합치며 오름차순 정렬한다. 이런 방식으로 병합 정렬 과정을 거치면 전체를 오름차순으로 정렬할 수 있다. 병합 정렬은 코딩 테스트의 정렬 관련 문제에 자주 등장한다. 특히 2개의 그룹을 병합하는 원리는 꼭 숙지해야 한다. 2개의 그룹을 병합하는 과정 투 포인터 개념을 사용하여 왼쪽, 오른쪽 그룹을 병합한다. 왼쪽 포인터와 오른쪽 포인터의 값을 비교하여 작은 값을 결..