📑 문제 🌱 아이디어BFS 응용문제, 다른 문제들과 비슷하게 상, 하, 좌, 우를 이동할 수 있지만 좌, 우는 이동 횟수가 제한된다.그렇다면 총 이동할 수 있는 칸은 몇 칸인가? 를 물어보는 문제이다. 먼저 현재 좌표, 좌, 우 남은 이동 횟수를 담는 객체를 만들고 방문처리 및 0-1 BFS를 돌리면 된다고 생각했다.하지만 91%쯤 실패한다... 예상컨대 큰 틀에서 구현자체는 틀리지 않았지만, 히든케이스를 만족시키지 못할 만큼디테일하게 구현하지 못했던 것 같다 BFS 응용문제에선 대부분 방문처리에서 히든테스트케이스가 나온다. 기본적인 2차원 boolean 배열의 방문처리에는 한 가지 단점이 있다.- 먼저 도착한 노드가 최적값인지, 아닌지를 판단하지 못하고 무조건 먼저 도착한 노드만 통과시킨다. 하나..
🌱 옵셔널(Optional)이란? + 왜 사용해야 하는지? 자바 8에 추가된 기능이며, 결괏값이 없음(null)을 더 안전하고 명확히 전달하기 위해 등장했다.자바 8 이전까진 null로 표현했지만 알다시피 null은 시스템에 오류를 발생시킬 가능성이 매우 높다즉 시스템을 NPE(NullPointerException)로부터 안전하게 보호하기 위한 기능을 제공하는 래퍼(Wrapper) 클래스이다. Null safety를 고려하는 개발을 통해 에러를 방지하고 시스템의 안정성을 보장하기 위해 옵셔널을 사용한다. 🚨 사용 시 주의사항그렇다면 모든 변수, 반환값에 옵셔널로 래핑 해서 관리하면 되는 것 아닌가? 앞서 이야기했던 것처럼 옵셔널은 래퍼(Wrapper) 클래스이다. 반환값 등을 감싸고 (Wrappi..
📑 문제🌱 아이디어스위핑 유형의 문제, 일단 무엇을 기준으로 정렬할지 생각해 보자 위 문제에 핵심은 좌표의 범위 L이 주어질 때 end - start 이 만족해야 한다, 즉 구간마다 L범위에 해당하는선분의 개수를 세야 한다. 좌표 구간마다 선분이 해당하는지 판단하고, 범위체크까지 한다면 자칫 O(N^2) 시간복잡도를 가지게 구현할 수 있다.하지만 N의 범위가 100,000까지 이며 O(N) 이하로 구현해야 한다. 먼저 데이터를 정렬하는 과정이 필요하다. y축을 기준으로 정렬하고 한쪽 방향으로 쭉 스캔하면서 계산을 하면 된다즉 한쪽 -> 반대쪽으로 쭉 스캔을 하는 스위핑 방식으로 구현하면 O(N)의 시간복잡도로 빠르게 구현 가능하다. 정렬 후 가장 아래 (10, 20)부터 last에 x를 넣고 계..
📑 문제🌱 아이디어버블소트의 특징을 활용하자! 위 문제는 C++ 버블 소트 코드를 제공한다. 전형적인 버블 소트 알고리즘이며 O(N^2)의 시간복잡도를 가진다입력으로 1 즉 , 위 문제는 버블 소트를 구현하는 문제가 아닌 버블 소트의 특징을 이용하는 문제이다. 결국 정렬하는 문제이다 버블 소트의 정렬 특징을 생각해 보자 오른쪽 -> 왼쪽으로 숫자가 이동할 때, 한 턴에 연속적으로 다수의 칸을 이동한다.왼쪽 으로 숫자가 이동할 때, 한 턴에 단 한 번만 이동한다. 위 특징을 봤을 때, 결국 버블 소트의 실행 횟수는 왼쪽 그렇다면 어떻게 구현할까? 해당 숫자와 입력된 위치(인덱스)를 저장하고, 한 번에 정렬 후 현재 숫자 위치(인덱스) - 원래 위치(인덱스)의 차를 구한다그중 가장 큰 차가 바로 ..
🏠 빌드(Build)를 하는 이유결과물, 소스 코드를 안정적으로 실행할 수 있게 독립적인 형태로 변환하는 과정입니다.배포(Deploy)를 하기 위해선. java 파일을 바이너리 코드인. class로 변환을 해야 합니다즉, 독립적인 형태 + JVM, WAS로 변환시켜 패키징 하는 과정, 또는 결과물입니다로컬(개발, 디버깅 등) -> 빌드 -> 배포 순으로 진행됩니다. 🌱 빌드(Build) 과정 for Mac, Gradle 1. 터미널에서 프로젝트 폴더로 이동하기cd 프로젝트파일위 파일들이 있는 디렉터리로 이동해 주면 된다 2. 빌드 파일 만들기./gradlew build빌드 성공 시 Build 파일이 생깁니다. 이제 실행을 위해 cd 명령어를 통해build/libs 파일로 이동합니다. 3. jar 실..