본문 바로가기

전체 글110

리코쳇 로봇(Lv.2) 문제 설명 입출력 예시 요약 출발점(R)에서 부터 동서남북 각 방향에 대해 벽(D)에 도달하기 전까지 이동하면서 도착점(G)까지의 최단 거리 구하기 풀이 접근 방식 1. 맵 정보를 이차원 배열에 담는다. → 출발점(R)과 도착점(G)의 좌표를 변수에 저장 2. bfs를 통한 최단 거리 구하기 → 출발점에서 bfs 시작. 도착점까지 최단 거리 구하기 3. 도착하지 못하는 상황 → 미끄러지는 그림을 상상했을 때, 도착점(R)의 상하좌우 어느 한 곳에는 반드시 벽(D)이 있어야 도달 가능 코드리뷰 import java.util.*; // 위치 정보를 담을 객체 클래스 class Position { int row; int col; int cnt;// 거리가 아닌 움직인 횟수를 기록한다. public Positi.. 2024. 4. 16.
미로 탈출(Lv.2) 문제 설명 입출력 예시 요약 레버로 이동한 후 도착지점으로 이동하는 최단 거리 구하기 풀이 접근 방식 1. 맵을 구성하는 이차원 배열 만들기 → 출발지(S), 레버(L), 도착지(E)가 있는 좌표를 따로 저장 2. bfs를 활용한 최단 거리 구하기 → 출발지(S)에서 레버(L)까지 bfs시작 → 레버에 도달했다면 레버에서 도착지(E)까지 bfs 시작 → 도착지에 도달했다면 S~L 거리와 L~E 거리 합 리턴 코드리뷰 import java.util.*; // 현재 위치와 거리를 저장할 객체 클래스 class Position { int row;// y좌표 int col;// x좌표 int dist;// 거리 public Position(int row, int col, int dist) { this.row =.. 2024. 4. 16.
줄 서는 방법(Lv.2) 문제 설명 입출력 예시 요약 n명의 사람을 n!(factorial)만큼 가지수로 나열했을 경우 k번째 나열 순서 리턴 풀이 접근 방식 1. 각 인덱스의 숫자가 얼마의 반복 주기를 갖는지 확인 → n = 4의 경우 {1, 2, 3, 4} / {1, 2, 4, 3} / {1, 3, 2, 4} / {1, 3, 4, 2} / {1, 4, 2, 3} / {1, 4, 3, 2} / {2, 1, 3, 4} / ... → 첫 번째 숫자의 경우 6개, 두 번째 숫자의 경우 2개, 세 번째와 네 번째는 각각 1개의 반복 사이클을 갖는다. → n = 4의 경우 반복되는 사이클을을 배열로 나타내면 {(n-1)!, (n-2)!, (n-3)!, (n-4)!} 임을 확인 할 수 있다. 2. k를 통해 각 인덱스에 해당하는 숫자 구.. 2024. 4. 15.
배달(Lv.2) 문제 설명 입출력 예시 요약 1번 마을에서 출발해서 K 이하의 시간으로 배달 가능한 모든 마을의 개수 구하기 풀이 접근 방식 1. 방문 가능한 모든 경로 찾기 → 간선의 가중치(소요 시간)와 도착 마을의 번호를 담는 객체 클래스(Node) 생성 → graph라는 배열에 특정 마을의 인접한 마을의 Node리스트를 저장 → 마을을 잇는 간선은 방향이 없기 때문에 반대의 경우도 함께 저장 2. 최소 비용으로 마을 방문하기 → 다익스트라(dijkstra) 알고리즘을 통해 최소비용으로 방문하는 경우를 구한다. 3. 배달 가능한 마을의 개수 구하기 → K 이하의 비용이 드는 마을의 개수를 카운팅해서 리턴 코드 리뷰 import java.util.*; // 도착 지점의 번호와 간선의 가중치를 담는 Node 객체 클래.. 2024. 4. 11.
대충 만든 자판(Lv.1) 문제 설명 입출력 예시 요약 주어진 keymap의 문자열에 들어있는 문자들을 최대한 적게 눌러서 targets에 있는 단어 만들기 풀이 접근 방식 1. targets의 문자열을 이루고 있는 문자를 하나씩 keymap에서 조사 → .indexOf() 메소드로 주어진 keymap을 모두 조사해 최소값을 찾는다. 2. keymap에 없는 문자를 포함하는 경우 -1을 return → 스트림의 최종 처리 기능인 .orElse() 메소드를 통해 -1을 리턴 코드리뷰 import java.util.*; public class Solution { public int[] solution(String[] keymap, String[] targets) { List list = new ArrayList(); for(int i.. 2024. 4. 11.
Optional 클래스 Optional? Optional Integer 혹은 Double과 같이 객체 T를 포장(wrap)해주는 래퍼 클래스입니다. 자바의 NullPointException(NPE)을 조금 더 세련되게 처리할 수 있도록 도와줍니다. 객체 생성 of() 메소드나 ofNullable() 메소드를 통해 객체를 생성합니다. 타입에는 / int / long / double 등이 있습니다. Optional : 객체 T OptionalInt : int OptionalLong : long OptionalDouble : double of( ) null이 아닌 명시된 값을 가지는 Optional 객체를 반환합니다. 만약 of() 메소드를 통해 생성된 Optionla 객체에 null이 저장되면 NPE가 발생합니다. ofNullab.. 2024. 4. 5.
스트림(Stream)_최종 처리 기능 세 줄 요약 - 최종 처리 기능을 담당하는 메소드를 체이닝 패턴 마지막에 위치시켜 내부 반복을 종료한다. - 집계 처리 메소드 중 Optional 타입을 리턴하는 메소드는 get() 메소드를 통해 그 값을 얻는다. - collect() 메소드를 사용해서 중간 처리를 거친 요소를 컬렉션에 담을 수 있다. 루핑 스트림에서 요소를 하나씩 반복해서 가져와 처리하는 것을 말합니다. 매개타입은 함수형 인터페이스인 Consumer이며, 해당 인터페이스에는 매개값을 처리하는 accept() 메소드가 있습니다. forEach( ) / peek( ) 둘 다 요소를 하나씩 반복해서 가져오는 기능을 수행합니다. 다만, peek() 메소드는 최종 처리 기능이 아니므로 스트림 메소드 체이닝 패턴에서 마지막에 위치할 수 없습니다... 2024. 4. 5.
스트림(Stream)_중간 처리 기능 네 줄 요약 - 매개값으로 넘길 땐 람다식을 통해 작성한다. - filter()를 통해 조건에 맞는 요소를 구별할 수 있다. - map()과 flatMap()을 통해 요소의 타입이나 개수를 바꿀 수 있다. - 객체 요소의 정렬을 위해선 해당 클래스에 Comparable을 구현하거나 Comparator의 리턴값을 매개값으로 넘겨준다. 반복자 반복자에는 외부 반복자와 내부 반복자가 있습니다. 외부 반복자의 경우 컬렉션의 요소를 반복적으로 바깥으로 가져와서 처리하며, 내부 반복자의 경우 처리 방법(람다식)을 컬렉션 내부로 주입시켜 요소를 반복 처리합니다. 외부 반복자 for 문과 Iterator는 컬렉션의 요소를 바깥쪽으로 반복해서 가져오는 외부 반복자입니다. Set 컬렉션의 iterator() 메소드를 통해.. 2024. 4. 4.