분류 전체보기
[Java/자바 백준 1459] 걷기
풀이 그리디 문제인지만 모든 케이스를 다 고려해주었습니다. 헷갈릴 수 있는 상황 -> (0,0) (2,0) 가기 1. 직진해서 2W로 갈 수 있지만, 2. 0,0 -> 1,1 -> 2,0 이렇게도 갈 수 있습니다 지도가 무한히 크므로 다음 케이스별로 모든 조건을 비교해주어서 가장 작은 값을 출력시켰습니다. import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws Exception{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); long X, Y, W, S; StringTokenizer st =..
[Java/자바 백준 1781] 컵라면
풀이 문제들을 deadLine이 작은 순, 받을 수 있는 컵라면 갯수가 큰 순으로 arraylist에 정렬했습니다. 컵라면을 최대한 많이 받으려면 deadline순으로 라면이 가장 많이 얻을 수 있도록 그리디하게 탐색해야하기 때문입니다. PriorityQueue를 사용해서 queue를 minHeap이라고 생각해줍시다. arr에 정렬되있는 값들을 탐색하면서 1. 큐 사이즈가 현재 데드라인보다 작다면 - 큐에 삽입을 해줍니다 2. 만약 큐 사이즈와 현재 데드라인이 같다면 큐의 peek(현재까지 얻을 수 있는 라면 중 가장 최솟값)과 비교를 해줍시다. 만약 peek가 작다면 빼주고 현재 라면수를 넣어주도록 합시다. 마지막으로 큐에 들어간 값들을 모두 더해주면 됩니다 ! import java.io.*; impo..
[Java/자바 백준 23290] 마법사 상어와 복제
풀이 문제를 읽다보면 주어진 조건이 너무 많다는 걸 알 수 있다.. 우선 map 자체를 뭐로 선언해야할까 효율적일까 고민하다가 list로 선언하기에 삭제나 삽입할때 문제가 생길거 같아서 2차원 큐 형태로 물고기의 방향 값을 갖도록 설계했습니다. 1. copyFishmap() : 맵에 있는 물고기들 전부 복사하기 map에 사이즈만큼 값을 copy[][]에 넣어줬습니다. 2. moveFish() : 물고기 이동 해당 맵 인덱스에 물고기가 있다면, 자신이 바라보는 방향부터 시작해서 반시계 45도로 탐색을 시작했습니다. 상어, 물고기 냄새, 격자 밖은 못가주게 해주었고 만약 8방향 탐색 후 모두 갈 수 없다면 제자리에 있도록 해주었습니다. 3. moveShark() : 상어 이동 순열을 이용했습니다. 저는 순열..
[Java/자바 백준 16928] 뱀과 사다리 게임
풀이 우선 최솟값을 위해 BFS를 사용했습니다. 1차원 배열을 길이가 100으로 선언하고 0으로 초기화 해줍니다. 해당 인덱스에 사다리나 뱀이 있다면 이동하게되는 위치를 넣어주고 0에서부터 큐에 삽입하여 게임을 시작합시다 ! 1~6에 주사위에 따라 전진하면서 해당값을 방문했는지, 범위에 벗어나지 않는지, 배열에 사다리, 뱀이 있는지 판단해주며 100에 도달시 (배열이라 인덱스는 99입니다) 걸린 시간을 출력해주면 되는 문제 입니다 ! import java.io.*; import java.util.*; public class Main{ static int[] map; public static void main(String[] args) throws Exception{ BufferedReader br = n..
[Java/자바 백준 16954] 움직이는 미로 탈출
풀이 8X8 맵에서 캐릭터는 인접한 곳 8방향 탐색과 제자리에 위치할 수 있습니다. 턴마다 캐릭터가 먼저 이동하고 난 뒤, 벽들이 아래로 떨어집니다. 저는 dfs로 진행하면서 1. 8방향 탐색으로 빈칸(.)의 위치를 찾고 2. 빈칸 위치 바로 위가 벽(#)이라면 continue 3. dfs로 진행하므로 다른 방향 탐색할 때 영향을 주면 안되므로 값을 copy했습니다. copy 과정에서 시간을 줄이기 위해서 flag를 사용해서 true면 리턴시켰고 벽이 아래로 떨어지게 되면 빈칸이 맨 윗줄에 생기므로 캐릭터가 row = 0 에 도달하게되면 flag = true 로 처리했습니다. import java.io.*; import java.util.*; public class Main { static char[][..
[Java/자바 백준 1976] 여행가자
풀이 유니온 파인드 문제 문제 핵심은 연결되었는지에 대해 물어보는 문제 매개체 도시가 있어서 1 - 3 도시가 서로 연결 되어있지 않아도 1 - 2 - 3 이 연결 되었으면 연결된 것 ! parents 배열을 만들어주고 먼저 자기 자신을 부모로 갖게 설정한 뒤, 입력을 받으면서 1인 경우(연결된 경우)에 한해서 유니온 파인드를 적용해주었습니다. 연결된 경우 이므로 a, b 둘중 인덱스가 큰 숫자를 작은 인덱스에 자식으로 갖게 만들어주었습니다. ex) union (0, 4) 일경우 이 상태에서 union (2,4)가 들어온다면 aRoot = 2 이지만 bRoot는 4 -> 0 이므로 bRoot = 0이 됩니다. 그렇다면 parents 배열은 이런식으로 바뀌겠죠 ! 유니온 파인드를 모두 적용 시킨 후, 정해..
[Java/자바 백준 17406] 배열돌리기 4
풀이 연산 수행 순서에 따라 최솟값이 변하므로 순열을 사용했습니다. 순열 뒤, 배열을 돌려줘야하는 배열 돌리기 구현 부분이 조금 헷갈린 문제 배열 돌리는 함수는 재귀로 구현했으며, 시작 x, 시작 y, 끝 x, 끝y 를 구해주고 시작 + 1과 끝 - 1 함수를 돌리면서 둘 값이 같아지면 min값을 구하는 식으로 구현했습니다. 또한 배열을 돌릴때, 네 부분으로 나누어서 구현했습니다. (시작 x, 시작 y) ~ (시작 x, 끝y) 오른쪽으로 배열 당기기 (시작 x, 끝 y) ~ (끝 x, 끝y) 아래쪽으로 배열 당기기 (끝 x, 끝 y) ~ (끝 x, 시작y) 왼쪽으로 배열 당기기 (끝 x, 시작 y) ~ (시작 x, 시작y) 위쪽으로 배열 당기기 이런 식으로 구현하고 각자 모서리 부분은 따로 저장해주었는데..
[Java 백준 16637] 괄호 추가하기
풀이 괄호가 중복된 것을 허용하지 않고, 연산자 우선순위가 동일하므로 왼쪽부터 계산하는 문제입니다. 연산자와 숫자를 나누어 담고 dfs를 활용해서, 케이스를 인덱스 기반으로 1. 괄호를 안친것으로 계산 과정 2. 괄호를 친것으로 계산 과정 두가지로 나누어서 진행했습니다. 첫번째 경우는 index, index + 1 를 연산과정을 하고 다음 dfs 두번째 경우는 index + 1, index +2를 먼저 연산하고, 지금까지 계산한 것과 다시 또 연산하고 다다음 dfs import java.io.*; import java.util.*; public class Main { static int N, max=Integer.MIN_VALUE; static ArrayList number = new ArrayList(..
Java Stream 정리글
왜 사용할까 자바 8부터 람다를 활용하여 함수형 프로그래밍이 가능해졌다. 컬렉션에 존재하던 엘리먼트들을 순회하면서 처리할 수 있는 패턴이다. 장점은 람다식과 함께 사용되어 데이터에 대한 처리를 간결하게 표현하여 코드양을 줄고 가독성이 좋아진다. 람다(lambda)란? 람다의 핵심은 (파라미터) -> {수행할 코드} 를 통해 메소드를 정의하지 않고도 메소드처럼 사용할 수 있다는 것인데 메소드와 같은 기능이지만 정의하지 않고도 사용하는 것이 람다의 핵심이 되겠다 Collection 과 Stream의 차이점은 데이터 계산 시점 ! Collection 모든 값을 메모리에 저장하는 자료구조다. 따라서 Collection에 추가하기 전에 미리 계산이 완료되어있어야 한다. 외부 반복을 통해 사용자가 직접 반복 작업을..
자바의 데이터 타입(Primitive type, Reference type)
자바에서 크게 기본형(Primitive Type), 참조형(Reference type) 두가지 타입으로 나뉜다. Java Data Type ㄴ Primitive Type ㄴ Boolean Type(boolean) ㄴ Numeric Type ㄴ Integral Type ㄴ Integer Type(byte, short, int, long) ㄴ Floating Point Type(float, double) ㄴ Character Type(char) ㄴ Reference Type ㄴ Class Type ㄴ Interface Type ㄴ Array Type ㄴ Enum Type ㄴ etc. Primitive Type(기본형) JAVA에서는 총 8가지의 Primitive type을 미리 정의하고 제공합니다. 자바에서..