728x90
반응형

java 32

[Baekjoon 5427 / Java / 골드4] 불

BFS 문제이다. 불이 1초마다 상하좌우로 1칸씩 퍼지고, 상근이는 1초마다 상하좌우로 1칸씩 이동할 수 있다.건물 끝 4방향의 '.' 빈 공간에 다다르면 탈출에 성공하게 된다. 상근이의 빌딩 탈출에 걸리는 시간을 출력하고, 탈출할 수 없다면 IMPOSSIBLE을 출력하면 된다. import java.io.*;import java.util.*;public class 불_5427 {    static int N; // 테스트 케이스 개수    static int[] dx = {-1, 1, 0, 0};    static int[] dy = {0, 0, -1, 1};    static char[][] tower;    static int[][] visited;    static int w, h;    publ..

Algorithm/BFS 2024.06.08

[Baekjoon 2589 / Java / 골드5] 보물섬

L이 육지고 W가 바다이다.상하좌우 육지로만 이동할 수 있다고 했을 때, 보물지도 내에서 가장 먼 두 육지의 거리를 출력하면 된다.물론 두 육지의 거리는 최단거리여야 한다. import java.io.*;import java.util.*;public class 보물섬_2589 {    // 입력값 저장할 변수, 4방향 탐색할 dx dy 선언    static int N, M;    static char[][] maps;    static int[] dx = {-1, 1, 0, 0};    static int[] dy = {0, 0, -1, 1};    public static void main(String[] args) throws IOException {        BufferedReader br =..

Algorithm/BFS 2024.05.31

[Baekjoon 7983 / Java / 골드5] 내일 할거야

N은 과제의 개수D는 과제 소요일, T는 과제 마감일이며 D, T 형태로 주어진다. 최대한 과제를 미루고 미루다가 마지막에 한번에 몰아서 하는데, 이 때 첫 과제를 시작하기 전 최대 며칠을 놀 수 있는지를 구하는 문제이다. 먼저 과제 마감일 기준으로 내림차순 정렬을 해줘야 한다. 그리고 day 변수에 가장 긴 마감일을 설정해 둔다. day는 놀 수 있는 날을 저장해둘 변수이며, 반복문이 진행되며 계속해서 갱신된다. 그리고 N번 반복문을 돌리되, day와 e(현재 과제의 마감일)중 더 작은 값에서 s(현재 과제의 소요일)을 뺀다.그 뺀 값을 다시 day에 할당한다. day가 길어도 과제의 마감일이 더 이르다면 마감일에서 s를 빼고,마감일이 길어도 현재 남은 day가 더 짧다면 day에서 s를 뺀다.이걸 반..

Algorithm/Greedy 2024.05.06

[Baekjoon 18429 / Java / 실버3] 근손실

기본 3대중량은 500이다.매일매일 중량은 K 씩 감소한다.매일매일 하나의 운동 키트를 사용하여 중량을 증가시킬 수 있다. 3대중량이 단 하루도 500 미만으로 내려가지 않도록, 운동 키트를 사용하는 순서의 경우의 수를 모두 찾기 결국 중량의 변화는 (K + 키트로 인한 중량 증가량) 이므로, 입력받은 배열에서 미리 K를 빼 주었다.중량 변화가 음수일 경우 500 미만으로 내려가는 것 이므로, 중량 변화량이 N일동안 계속해서 양수인 경우의 수를 찾으면 된다. import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;public class 근손실_18429 {        // 결과 저장할 변..

[Baekjoon 24460 / Java / 실버3] 특별상이라도 받고 싶어

분할 정복 문제이다. N * N 형태의 좌석과 추첨번호가 주어진다.여기서 N은 2의 0승 ~ 2의 10승 중 하나이고, 따라서 정사각형 형태이며 4등분으로 분할이 가능하다. 특별상은 딱 한명만 받을 수 있다.사람이 1명밖에 없다면 그 사람이 수상한다.사람이 4명이라면(N : 2) 4명 중 추첨번호가 2번째로 작은 사람이 수상한다.사람이 16명(N : 4) 이상이라면, 각 구역에 사람이 4명만 남을 때까지 4등분한 후, 각 구역마다 2번째로 작은 사람을 가려내고, 그렇게 추려진 사람들 중에서 또 2번째로 작은 사람을 가려내고.. 하는 형태로 진행한다.  위 그림에선 왼쪽 위 : 1 , 오른쪽 위 : 3, 왼쪽 아래 : 5, 오른쪽 아래 : 7 이다.이렇게 추첨된 1, 3, 5, 7 중에서 또 2번째로 작은..

[Baekjoon 10655 / Java / 실버3] 마라톤 1

import java.io.*;import java.util.*;public class 마라톤1_10655 {    public static void main(String[] args) throws Exception {        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));                // 체크포인트 입력받기        int N = Integer.parseInt(br.readLine());        int cp[][] = new int[N][2];        for(int i = 0; i N; i++) {            StringTokenizer st = new StringToken..

[Baekjoon 1913 / Java / 실버3] 달팽이

import java.io.*;public class 달팽이_1913 {    public static void main(String[] args) throws Exception {                StringBuilder sb = new StringBuilder();                // 입력받기        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));        int N = Integer.parseInt(br.readLine());        int target = Integer.parseInt(br.readLine());        // 2차원 배열 생성        int board..

[스프링 부트3 백엔드 개발자 되기] 후기, 스프링 부트 교재

결론부터 말하면, 10점 만점에 4점이다. 스프링 부트를 시작할 다른 사람에게 굳이 추천하고 싶지는 않은 책이다. 책을 끝까지 완독 후 후기를 작성하려 했으나 다른 일정과 겹쳐서 마지막 Git 버전관리와 AWS 배포 부분은 읽지 못했다. 그러나 시간이 나더라도 굳이 다시 펼쳐서 끝까지 읽고 싶지는 않은 마음이고... 완독하지 못했더라도 가장 중요한 웹사이트는 끝까지 만들어 보았으니 짧은 후기를 쓸 정도는 된다고 생각한다. 독자의 수준이나 기초지식에 따라서 책에 대한 견해가 달라질 수 있으니 나를 설명하겠다. - 정보보안 전공, 보안과 관련된 지식과 네트워크, 서버, 웹 등 기초 CS지식정도 보유. - JAVA, Python 기초문법 숙지한 상태. - "개발"을 해본적은 한번도 없다. 개발 공부는 이 책이..

독서/IT 2024.01.15

스프링 입문 - 회원 서비스 테스트

회원 서비스 개발에 이어, 개발한 회원 서비스를 테스트할 차례다. 테스트를 수행할 MemberService에서, Ctrl + Shift + T를 누르고, Create New Test를 누른다. 그러면 이런 창이 뜬다. 테스트 클래스 이름도 본래 클래스 이름에 Test만 붙여서 자동으로 작성해 준다. 내가 테스트하고 싶은 메소드를 아래에서 체크해서 OK를 누른다. 그러면 이렇게 테스트에 필요한 틀을, 적절한 위치(경로)에 아주 쉽게 만들어준다. 일단 만들어진 테스트가 문제가 없는지, 현재 상태에서 바로 한번 돌려본다. 다행히 문제는 없다. 본격적으로 테스트 케이스를 작성해 보기 전에, 잠깐 MemberService로 가보자. 기존 코드를 변경해서, 이렇게 생성자를 통해 외부에서 리포지토리를 주입받도록 변경..

Development/Spring 2023.11.07

스프링 입문 - 회원 서비스 개발

도메인, 리포지토리를 만들었으니 서비스를 만들 차례이다. hello.hellospring.service 패키지를 만들고, service 패키지 아래에 MemberService 클래스를 만들자. 서비스는 리포지토리와 함께 동작해야 하니, 미리 만들어두었던 리포지토리 객체를 만들어 주자. 회원가입 메소드인 join이다. member 객체를 매개변수로 받아서 리포지토리에 저장하고, 저장한 객체의 Id를 리턴한다. 단, 중복된 name을 가진 회원은 가입할 수 없도록 검증하는 과정이 있다. 바로 밑에 선언해둔 validateDuplicateMember가 중복을 검사하는 메소드이다. name을 기준으로 리포지토리에서 회원을 찾아서, 해당 회원이 이미 존재한다면 "이미 존재하는 회원입니다" 예외를 출력하고 메소드는..

Development/Spring 2023.11.07
728x90
반응형