분류 전체보기
[Java/자바 백준 1520] 내리막 길
풀이 DFS + DP 문제입니다 처음에 DFS로만 풀었는데 메모리 초과가 발생했습니다. 이를 보완하기 위해 DP 메모이제이션 방법을 추가했습니다. 나보다 더 낮은 경로일 때 탐색을 계속해서 진행했으며, 목적지까지 도착하면 dp +1 시켜주었습니다. DFS방식이기 때문에 dp가 -1 이 아닌 경우는 이미 끝까지 탐색한 경로이기 때문에 해당하는 dp를 바로 return 시켜주었습니다. import java.io.*; import java.util.*; // dfs + dp 문제 public class Main{ static int N, M; static int[][] map; static int[][] dp; static int[] dx = {-1,0,1,0}; static int[] dy = {0,-1,0..
![[Java/자바 20055 백준] 컨베이어 벨트 위의 로봇](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbjSgY7%2FbtrpQRxh4kR%2FAAAAAAAAAAAAAAAAAAAAABwv7CBiZTmz8vWgacHBQ8j9b_L1-JFb2kNX_hpZqZbw%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D1%252B0qY6WKj16s5pAx8sOv88Ir6MA%253D)
[Java/자바 20055 백준] 컨베이어 벨트 위의 로봇
설명 문제 자체가 어렵진 않지만, 조건이나 설명이 헷갈린 문제였습니다. 컨베이어 벨트이고, N 이후에는 낭떠러지라고 생각하면 됩니다. 순환하는 원형이고 1~N까진 로봇이 존재할 수 있지만, N+1~2N까지는 존재 X 풀이 순서대로 진행하면 1. 과정에서 벨트와 로봇이 움직이게되는데, 이때 내리는 위치에 도달한 로봇은 즉시 내려갑니다. moveBelt() 2. 로봇이 앞에 칸에 내구도가 1이상이며, 로봇이 존재하지 않는다면 앞으로 이동하게 됩니다. 앞에 칸의 내구도는 -1. moveRobot() 3. 올리는 위치에 내구도가 1이상이면 로봇을 올려주고, 내구도를 -1 시켜줍니다. newRobot() 2,3번 과정에서 내구도가 -1되는 칸마다 0이 된 칸을 확인해주었습니다. import java.io.*; i..
[Java/자바 백준 19238] 스타트 택시
풀이 bfs를 이용하면서 collection sort 가 핵심인 문제 출발지와 도착지를 찾으면서 마지막에 남는 연료 값 출력하는 문제였으며, 승객 출발지 위치에 도달할 수 없거나, 승객을 태우고 도착지로 도달할 수 없는 경우 -1 출력, 또한 중간에 연료를 다 소진하게 되면 -1 출력해야합니다. 승객들을 찾는 과정에서 Taxi 클래스에서 time,row,col 순으로 collection sort를 해주고 조건에 맞는 승객을 태워 걸린 시간과 passengerMap에서 인덱스를 구해주고 Passenger 인덱스에 해당하는 도착지에 걸린시간을 도달하는 시간을 계산. package b0103; import java.io.*; import java.util.*; public class Main_bj_g4_192..
[Java/자바 백준 2589] 보물섬
풀이 bfs로 해결 가능한 문제 'L' 육지인 상황마다 가장 먼 육지와의 거리를 계산해주는 문제입니다. visited 를 -1로 모두 초기화해서 현재 위치와 가장 먼 육지를 계산하고 bfs가 진행될 때마다 현재 가장 먼 거리를 가지고 있는 answer와 비교 import java.io.*; import java.util.*; public class Main { static int N, M, answer; static char[][] map; static Queue queue = new LinkedList(); static int[] dx = {-1,0,1,0}; static int[] dy = {0,1,0,-1}; public static void main(String[] args) throws Exce..
[Java/자바 백준 14503] 로봇 청소기
풀이 문제 그대로 하나하나씩 진행하면 되는 문제였습니다. 현재 x,y 좌표와 바라보는 방향을 저장하고 왼쪽부터 청소할 수 있는지 비교해보며, 만약 청소할 수 없는 공간이 없다면 바라보는 방향 기준으로 후진을 진행했습니다. import java.io.*; import java.util.*; public class Main_bj_g5_14503_로봇청소기 { static int N, M, curX, curY, curDir, totalClean, dirCheck; static int[][] map; static boolean[][] visited; // 북 동 남 서 static int[] dx = {-1, 0, 1, 0}; static int[] dy = {0, 1, 0, -1}; public static ..
[Java/자바 백준 23288] 주사위굴리기2
풀이 삼성 가서 털렸던 문제.... 계속 풀고 싶어서 백준에 떠서 풀었는데, 디버깅도 한번도 안하고 바로 맞아버린 비운의 문제.. 코테때 로직 그대로 풀었는데.... 아무튼 풀이 시작하겠습니다 ! 저는 우선 방향을 동남서북으로 맞춰줘서 90도 시계일땐 +1 반시계 90도 일땐 -1 씩으로 dx, dy를 설정했습니다. 처음 동쪽 방향이니 dir=0 으로 설정 isAvailable에서 nx,ny값이 가능한지 보고, 범위 밖이면 dir을 변경해주었습니다. move 에서 nx,ny로 이동하고 dice_chage에서 주사위를 굴렸습니다. 주사위는 아래 동 서 남 북 위 으로해서 6 3 4 5 2 1 로 초기 설정하고 , 동서남북에 따라서 주사위가 값들이 어떻게 변경하는지 하나하나 바꿔주고, dir_change에서..
동기화(Synchronized ) vs 비동기화(Asynchronized) / 블로킹(blocking)과 논블로킹(non-blocking)
Sync / Async 동기는 요청과 그 결과가 동시에 일어난다는 뜻이며, 다시 말하면, 어떤 객체 또는 함수 내부에서 다른 함수를 호출했을 때 이 함수의 결과를 호출한 쪽에서 처리하면 동기입니다. 비동기는 요청과 그 결과가 동시에 일어나지 않는다는 뜻이며, 동기와 달리 어떤 객체 또는 함수 내부에서 다른 함수를 호출했을 때 이 함수의 결과를 호출한 쪽에서 처리하지 않으면 비동기입니다. -> 대표 예시 Ajax 1) 동기의 예 일반적으로 사용하는 함수들은 대부분 동기적 방식입니다. C언어의 scanf()와 Java의 Scanner 객체의 next()메서드 같이 사용자의 입력을 받는 함수들이 그 예입니다. Scanner sc = new Scanner(System.in); int num = sc.nextIn..
Java 객체 직렬화(Serialization) 와 역직렬화(Deserialization)
직렬화, 역직렬화란? 객체지향 언어인 Java는 프로그램의 모든 데이터들이 객체로 이루어져 있다고 봐도 무방하다. 그렇다면 Java로 만든 프로그램의 데이터(객체)를 외부로 전송하려면 어떻게 해야 할까? 네트워크를 공부했다면 기본적으로 데이터인 객체 그 자체를 네트워크 상으로 전송할 수 없다는 것을 알 것이다. 이를 전송하기 위해선 객체 그 자체보단 조금 더 단순한 형태로 변환해야 할 것이다. Java의 I/O 처리는 정수, 문자열, 바이트 단위의 처리만 지원하기 때문에 복잡한 객체의 내용을 저장/복원하거나 네트워크 상으로 전송하기 위해서는 객체의 내용을 I/O가 처리할 수 있는 형태로 변환해 줘야 한다. Java에서 말하는 객체 직렬화는 이처럼 Java의 객체를 외부로 저장/복원하거나 네트워크 ..
자바 스레드(Thread) 정리글
쓰레드(Thread) 프로세스 운영체제로부터 작업을 할당받는 작업의 단위이며, 실행 중인 하나의 어플리케이션 (ex : 크롬을 새 창으로 2개를 띄웠다면, 2개의 프로세스가 실행 중이라 말할 수가 있다. 쓰레드 프로세스가 할당 받은 자원을 이용하는 실행의 단위이며, 한 프로세스에서 동작되는 여러 실행 흐름이라고 볼 수가 있다. 1. JVM에 의해 하나의 프로세스가 발생하고 main( ) 안의 실행문 들이 하나의 스레드입니다. 2. main( ) 이외의 또 다른 스레드를 만들려면 Thread 클래스를 상속하거나 Runnable 인터페이스를 구현합니다. 3. 다중 스레드 작업 시에는 각 스레드 끼리 정보를 주고받을 수 있어 처리 과정의 오류를 줄일 수 있습니다. 4. 프로세스끼리는 정보를 주고받을 수 없습니..
가비지 컬렉션(Garbage Collection)이란
가비지 및 가비지의 역할 유효하지 않은 메모리를 가바지(Garbage)라고 하며, C / C++의 경우는 메모리를 개발자가 할당 및 해제를 해줘야하는데 자바는 가비지 컬렉터(Garbage Collerctor)가 자동으로 불필요한 메모리를 정리해줍니다. - > 자동으로 해줘서 장점이지만 동시에, 느리다는 단점이 있다고 합니다. 가비지 컬레션은 메모리 해제하는 전반적인 작업을 뜻한다면, 가비지 컬렉터는 JAVA에서의 해제 작업 담당을 말합니다. 가비지의 예시 String[] array = new String[2]; array[0] = "0"; array[1] = "1"; array = new String[] {'X', 'Y'}; 위 코드에서 array = new String[] {'X', 'Y'} 3번째 라..