전체 글 139

백준 No.2665 미로만들기 - JAVA

문제 nxn 바둑판 모양으로 총 n제곱개의 방이 있다. 일부분은 검은 방이고 나머지는 모두 흰 방이다. 검은 방은 사면이 벽으로 싸여 있어 들어갈 수 없다. 서로 붙어 있는 두 개의 흐니 방 사이에는 문이 있어서 지나다닐 수 있다. 우니줄 맨 왼쪽 방은 시작방으로서 항상 흰방이고, 아랫줄 맨 오른쪽 방은 끝방으로서 역시 흰 방이다. 시작방에서 출발하여 길을 찾아서 끝방으로 가는 것이 목적인데 아래 그림의 경우에는 시작 방에서 끝방으로 갈 수가 없다. 부득이 검은 방 몇 개를 흰 방으로 바꾸어야 하는데 되도록 적은 수의 방의 색을 바꾸고 싶다. 아래 그림은 n=8인 경우의 한 예이다. 위 그림에서는 두 개의 검은방(예를 들어 (4,4의 방과 (7,8)의 방) 을 흰 방으로 바꾸면 , 시작 방에서 끝방으로 ..

알고리즘 2023.02.25

Spring - DispatcherServlet

스프링의 정석을 학습하고 정리한 내용입니다 DispatcherServlet 각 서블릿들은 입력을 받아야 하는데 이 공통 부분을 FrontContrller로 묶어서 정리할 수 있다. 결국 공통처리 부분을 따로 빼서 처리하는 것이 DispatcherServlet의 역할이다. DispatcherServlet이 앞에서 전처리를 해준다. 각 Servlet들이 공통적으로 처리해야 할 일을 앞부분에서 처리해준다. HandlerMapping Map으로 데이터를 관리한다. Key로는 URL(/login.do)을 관리하고 value로 메서드 정보를 저장하고 있다가 요청이 들어오면 해당 요청을 어던 메소드가 처리하면 되는지 DispatcherServlet이 HandlerMapping에게 알려달라고 요청한다. HandlerM..

Spring 2023.02.24

백준 No.2847 게임을 만든 동준이 - JAVA

문제 학교에서 그래픽스 수업을 들은 동준이는 수업시간에 들은 내용을 바탕으로 스마트폰 게임을 만들었다. 게임에는 총 N개의 레벨이 있고, 각 레벨을 클리어할 때 마다 점수가 주어진다. 플레이어의 점수는 레벨을 클리어하면서 얻은 점수의 합으로, 이 점수를 바탕으로 온라인 순위를 매긴다. 동준이는 레벨을 난이도 순으로 배치했다. 하지만, 실수로 쉬운 레벨이 어려운 레벨보다 점수를 많이 받는 경우를 만들었다. 이 문제를 해결하기 위해 동준이는 특정 레벨의 점수를 감소시키려고 한다. 이렇게해서 각 레벨을 클리어할 때 주는 점수가 증가하게 만들려고 한다. 각 레벨을 클리어할 때 얻는 점수가 주어졌을 때, 몇 번 감소시키면 되는지 구하는 프로그램을 작성하시오. 점수는 항상 양수이어야 하고, 1 만큼 감소시키는 것이..

알고리즘 2023.02.24

백준 No.10282 해킹 - JAVA

문제 최흉최악의 해커 yum3이 네트워크 시설의 한 컴퓨터를 해킹했다! 이제 서로에 의존하는 컴퓨터들은 점차 하나둘 전염되기 싲가한다. 어떤 컴퓨터 a가 다른 컴퓨터 b에 의존한다면 b가 감연되면 그로부터 일정시간 뒤 a도 감염되고 만다. 이때 b가 a를 의존하지 않는다면 a가 감염되더라도 b는 안전하다. 최흉최악의 해커 yum3이 해킹한 컴퓨터 번호와 각 의존성이 주어질 때, 해킹당한 컴퓨터까지 포함하여 총 몇 대의 컴퓨터가 감염되며 그에 걸리는 시간이 얼마인지 구하는 프로그램을 작성하시오 2 3 2 2 2 1 5 3 2 5 3 3 1 2 1 2 3 1 8 3 2 4 주의할 점 - 계속 풀어봐도 해킹 당한 노드는 3개가 나왔는데 문제에 함정이 있었다.... 이때 b가 a를 의존하지 않는다면, a가 감염..

알고리즘 2023.02.24

ClassCastException: class org.springframework.security.core.userdetails.User cannot be cast to class

JPA AuditingAware를 통해 CreatedBy를 사용하려 했다. MemberDTO dto = (MemberDTO) authentication.getPrincipal(); return Optional.of(dto.getEmail()); SecurityContext에서 값을 뽑아서 인증확인하고 하려했는데 계속 형변환 에러가 나서 찾아봤는데 여기서 Principal이 String을 넘어와서 그런거 같다. 그래서 값을 그냥 authentication.getName()으로 변경함 return Optional.of(authentication.getName()); https://stackoverflow.com/questions/32276482/java-lang-classcastexception-org-sp..

Exception or 에러 2023.02.23

백준 No.9237 이장님 초대 - JAVA

문제 농부 상근이는 마당에 심기 위한 나무 묘목 n개를 구입했다. 묘목 하나를 시믄ㄴ데 걸리는 시간은 1일이고, 상근이는 각 묘목이 다 자라는데 며칠이 걸리는지 정확하게 알고 있다. 상근이는 마을 이장님을 초대해 자신이 심은 나무를 자랑하려고 한다. 이장님을 실망시키면 안되기 때문에, 모든 나무가 완전히 자란 이후에 이장님을 초대하려고 한다. 즉, 마지막 나무가 다 자란 다음날 이장님을 초대할 것이다. 상근이는 나무를 심는 순서를 신중하게 골라 이장님을 최대한 빨리 초대하려고 한다. 이장님을 며칠에 초대할 수 있을까? 풀이 - 가장 오래걸리는 묘목을 먼저 심어야만 최대한 빠르게 이장님을 초대할 수 있는 방법이다. - 내림차순을 정렬한다. - for문을 만드는데 여기서 (i+1)+(arr[i]) 를 통해 ..

알고리즘 2023.02.23

백준 No.1916 최소비용 구하기 - JAVA

문제 N개의 도시가 있다. 그리고 한 도시에서 출발하여 다른 도시에 도착하는 M개의 버스가 있다. 우리는 A번째 도시에서 B번쨰 도시까지 가는데 드는 버스 비용을 최소화 시키려고 한다. A번째 도시에서 B번째 도시까지 가는데 드는 최소비용을 출력하여라. 도시의 번호는 1부터 N까지이다. 풀이 - dijkstra 알고리즘을 통해 start(시작지점을) 파라미터로 넘겨서 dist 배열을 start에서 시작했을 경우 각 노드에 최단 거리를 구한다. 여기서 버스비용이 가중치이다. - 그렇기 실행하게 되면 dist는 start에서 모든 인덱스(노드)까지의 최단거리가 될 것이다. 이제 dist에 도착점 인덱스를 출력하면 정답이다. import java.io.BufferedReader; import java.io.I..

알고리즘 2023.02.23

백준 No.1504 특정한 최단 경로 - JAVA

문제 방향성이 없는 그래프가 주어진다. 세준이는 1번 정점에서 N번 정점으로 최단 거리로 이동하려고 한다. 또한 세준이는 두 가지 조건을 만족하면서 이동하는 특정한 최단 경로를 구하고 싶은데, 그것은 바로 임의로 주어진 두 정점은 반드시 통과해야한다는 것이다. 세준이는 한 번 이동했던 정점은 물론, 한번 이동했던 간선도 다시 이동할 수 있다. 하지만 반드시 경로로 이동해야 한다는 사실에 주의하라. 1번 정점에서 N번 정점으로 이동할 때 주어진 두 정점을 반드시 거치면서 최단 경로로 이동하는 프로그램을 작성하시오 입력 4 6 1 2 3 2 3 3 3 4 1 1 3 5 2 4 5 1 4 4 2 3 주의사항 처음에 계속 주어진 입력을 넣었을 때 간단하게 답이 나왔는데 계속 틀려서 너무 화났는데 알고보니 문제에..

알고리즘 2023.02.22

백준 No. 14916 거스름돈 JAVA

문제 춘향이는 편의점 카운터에서 일한다. 손님이 2원짜리와 5원짜리로만 거스롬돈을 달라고 한다. 2원짜리 동전과 5원짜리 동전은 무한정 많이 가지고 있다. 동전의 개수가 최소가 되도록 거슬러 주어야한다. 거스름 돈이 n인 경우, 최소 동전의 개수가 몇 개인지 알려주는 프로그램을 작성하시오. 예를 들어, 거스름돈이 15원이면 5원짜리 3개를, 거스름돈이 14원이면 5원짜리 2개와 2원짜리 2개로 총 4개를, 거스름 돈이 13원이면 5원짜리 1개와 2원짜리 4개로 총 5개를 주어야 동전의 개수가 최소가 된다. 풀이 반복문을 true로 돌린다. 그러면서 해당 값이 5로 나누어 떨어지면 break 하면서 주어진 값을 5로 나누고 나눈 값을 count에 추가한다. 5로 나누어 떨어지지 않으면 주어진 수인 2로 계..

알고리즘 2023.02.21

백준 No. 1238 파티 JAVA

문제 N개의 숫자로 구분된 각각의 마을에 한 명의 학생이 살고 있다. 어느 날 이 N명의 학생이 X번 마을에 모여서 파티를 벌이기로 했다. 이 마을 사이에는 총 M개의 단방향 도로들이 있고 i번째 길을 지나는데 T 시간을 소비한다. 각각의 학생들은 파 참석하기 위해 걸어가서 다시 그들이 마을로 돌아와야한다. 하지만 이 학생들은 워낙 게을러서 최단 시간에 오고 가기를 원한다. 이 도로들은 단방향이기 때문에 아마 그들이 오고 가는 길이 다를지도 모른다. N명의 학생들 중 오고 가는데 가장 많은 시간을 소비하는 학생은 누구일지 구하여라 4 8 2 1 2 4 1 3 2 1 4 7 2 1 1 2 3 5 3 1 2 3 4 4 4 2 3 문제를 잘못 이해했던 점 다익스트라로 푸는 문제인 건 알겠는데 그래서 결국 x가..

알고리즘 2023.02.21