전체 글 139

백준 No.14938 서강그라운드 - JAVA

문제 예으이는 요즘 가장 인기가 있는 게임 서강그라운드를 즐기고 있다. 서강그라운드는 여러 지역 중 하나의 지역에 낙하산을 타고 낙하하여 , 그 지역에 떨어져 있는 아이템들을 이용해 서바이벌을 하는 게임이다. 서강그라운드에서 1등을 하면 보상으로 치킨을 주는데, 예은이는 단 한번도 치킨을 먹을 수가 없었다. 자신이 치킨을 못 먹는 이유는 실력 때문이 아니라 아이템 운이 없어서라고 생각한 예은이는 낙하산에서 떨어질 때 각 지역에 아이템 들이 몇 개 있는지 알려주는 프로그램을 개발을 하였지만 어디로 낙하해야 자신의 수색 범위 내에서 가장 많은 아이템을 얻을 수 있는지 알 수 없었다. 각 지역은 일정한 길이 l 의 길로 다른 지역과 연결되어 있고 이 길은 양방향 통행이 가능하다. 예은이는 낙하한 지역을 중심으..

알고리즘 2023.03.03

Spring Security - JWT 설정

해당 url로 { "email":"user", "password":"1111" } 데이터를 바디에 담아 요청하면 토큰이 발행되도록 만들려고 한다. Spring 2.7.0 기준 일단 먼저일반적으로 Spring Security에 로그인 요청을 날리면 UsernamePasswordAuthenticationFitler로 해당 아이디, 비밀번호 입력값이 해당 필터로 날라간다. 하지만 JWT의 경우 폼로그인이 아닌 json 데이터로 들어온 값을 DB값과 대조하여 맞을 경우 토큰을 던져줘야 한다. 그래서 UsernamePasswordAuthentciationFilter 자리를 뺏기로 했다. 하지만 UsernamePasswordAuthenticationFilter는 특징이 있어 이 특징을 잘 처리해줘야한다. 1. 해당..

Spring Security 2023.03.03

백준 No.5972 택배 배송 - JAVA

문제 농부 현서는 농부 찬홍이에게 택배를 배달해줘야 합니다. 그리고 지금, 갈 준비를 하고 있습니다. 평화롭게 가려면 가는 길에 만나는 모든 소들에게 여물을 줘야 합니다. 물론 현서는 구두쇠라서 최소한의 소들을 만나면서 지나가고 싶습니다. 농부 현서에게는 지도가 있습니다. N개의 헛간과, 소들의 길인 M개의 양방향 길이 그려져 있고, 각각의 길은 C마리의 소들이 있습니다. 소들의 깉은 두 개의 떨어진 헛간인 A와 B를 잇습니다. 두 개의 헛간은 하나 이상의 길로 연결되어 있을 수도 있습니다. 농부 현서는 헛간 1에 있고 농부 찬홍이는 헛간 N에 있습니다. [2]--- / | \ /1 | \ 6 / | \ [1] 0| --[3] \ | / \2 4\ | /4 [6] \ | / /1 [4]-----[5] 3..

알고리즘 2023.03.02

백준 No.1446 지름길 - JAVA

문제 매일 아침, 세준이는 학교에 가기 위해서 차를 타고 D 킬로미터 길이의 고속도로를 지난다. 이 고속도로는 심각하게 커므가 많아서 정말 운전하기도 힘들다. 어느 날 세준이는 이 고속도로에 지름길이 존재한다는 것을 알게 되었다. 모든 지름길은 일방통행이고, 고속도로를 역주행 할 수는 없다. 5 150 0 50 10 0 50 20 50 100 10 100 151 10 110 140 90 틀린 점 - 처음에 dist 배열에 크기가 정말 고민이었는데 문제에서 10000을 넘기지 않는다 하여 10000을 주고 풀어봤는데 그러기에는 인접리스트 크기도 같게 줘야했기에 이렇게 가다가 분명 메모리 초과 또는 시간 초과로 틀릴 거 같아 계속 시도하다가 답을 봐버렸다.... 풀이 dist 배열을 10001의 크기에 모두..

알고리즘 2023.03.01

백준 No.6550 부분 문자열 - JAVA

문제 2개의 문자열 s와 t가 주어졌을 때 s가 t의 부분 문자열인지 판단하는 프로그램을 작성하라. 부분 문자열을 가지고 있는지 판단하는 방법은 t에서 몇 개의 문자를 제거하고 이를 순서를 바꾸지 않고 합쳤을 경우 s가 되는 경우를 이야기한다. sequence subsequence person compression VERDI vivaVittorioEmanueleReDiItalia caseDoesMatter CaseDoesMatter 풀이 - 입력 크기를 안 준 문제는 처음 풀어봤는데 신선하다. 처음에는 자료구조를 사용해서 contains로 접근했는데 그러면 순서가 상관 없어도 true가 나와버려서 그냥 주어진 값을 바로 charAt으로 대조하면서 맞으면 다음 값을 조회하는 식으로 변경했다. 그리고 그렇게..

알고리즘 2023.02.28

백준 No.18352특정 거리의 도시 찾기 - JAVA

문제 어떤 나라에는 1번부터 N번까지의 도시와 M개의 단방향 도로가 존재한다. 모든 도로의 거리는 1이다. 이 때 특정한 도시 X로부터 출발하여 도달할 수 있는 모든 도시 중에서, 최단 거리가 정확히 K인 모든 도시들의 번호를 출력하는 프로그램을 작성하시오. 또한 출발 도시 X로 가는 최단 거리는 항상 0이라고 가정한다. 예를 들어 K=4,K=2,K=1 일 떄 다음과 같이 그래프가 구성되어 있다고 가정하자 이 떄 1번 도시에서 출발하여 도달할 수 있는 도시 중에서 최단 거리가 2인 도시는 4번 도시 뿐이다. 2번과 3번 도시의 경우, 최단 거리가 1이기 때문에 출력하지 않는다. 풀이 - 방향성 그래프, 거리를 구한다 --> 다익스트라 - 출발점부터 시작하여 dist 배열에다가 1씩 추가하면 된다. - 그..

알고리즘 2023.02.28

백준 No.1417 국회의원 선거 - JAVA

문제 다솜이는 사람의 마음을 읽을 수 있는 기계를 가지고 있다. 다솜이는 이 기계를 이용해서 2008년 4월 9일 국회의원 선거를 조작하려고 한다. 다솜이의 기계는 각 사람들이 누구를 찍을 지 미리 읽을 수 있다. 어떤 사람이 누구를 찍을 지 정했으면, 반드시 선거 때 그 사람을 찍는다. 현재 형택구에 나온 국회의원 후보는 N명이다. 다솜이는 이 기계를 이용해서 그 마을의 주민 M명의 마음을 모두 읽었다. 다솜이는 기호 1번이다. 다솜이는 사람들의 마음을 읽어서 자신을 찍지 않으려는 사람을 돈으로 매수해서 국회의원에 당선이 되게 하려고 한다. 다른 모든 사람의 듣표수 보다 많은 득표수를 가질 때, 그 사람이 국회의원에 당선된다. 3 5 7 7 이번 문제에서 주어진 예제가 다 통과하는데 계속 9퍼에서 틀리..

알고리즘 2023.02.27

백준 No.1012 유기농 배추 - JAVA

문제 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 효과적인 배추흰지렁이를 구입하기로 결심한다. 이 지렁이는 배추근처에 서식하며 해충을 잡아 먹음으로써 배추를 보호한다. 특히, 어떤 배추에 배추 흰지렁이가 한 마리라도 살고 있으면 이 지렁이는 인접한 다른 배추로 이동할 수 있어, 그 배추들 역시 해충으로부터 보호받을 수 있다. 한 배추의 상하좌우 네 방향에 다른 배추가 위치한 경우에 서로 인접해있는 것이다. 한나가 배추를 재배하는 땅은 고르지 못해서 배추를 군데군데 심어놓았다. 배추들이 모여잇는 곳에는 배추 흰 지렁이가 한 마리만 있으면 되므로 서로 인접해 있는 배추들이 ..

알고리즘 2023.02.27

백준 No.1261 알고스팟 - JAVA

문제 알고스팟 운영진이 모두 미로에 갇혔다. 미로는 N*M 크기이며, 총 1*1 크기의 방으로 이루어져있다. 미로는 빈 방 또는 벽으로 이루어져 있고, 빈 방은 자유롭게 다닐 수 있지만, 벽은 부수지 않으면 이동할 수 없다. 알고스팟 운영진은 여러명이지만, 항상 모두 같은 방에 있어야 한다. 즉, 여러 명이 다른 방에 있을 수는 없다. 어떤 방에서 이동할 수 있는 방은 사하좌우로 인접한 빈 방이다. 즉, 현재 운영진이 (x,y)에 있을 때, 이동할 수 있는 방은 (x+1, y), (x, y+1), (x-1, y), (x, y-1) 이다. 단, 미로의 밖으로 이동할 수는 업삳. 벽은 평소에는 이동할 수 없지만, 알고스팟의 무기 AOJ를 이용해 벽을 부수어 버릴 수 있다. 벽을 부수면, 빈 방과 동일한 방으..

알고리즘 2023.02.27

백준 No.13549 숨바꼭질 3 - JAVA

문제 수빈이는 동생과 숨바꼭질을 하고있다. 수빈이는 현재 점 N에 있고, 동생은 점 K에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 0초 후에 2*X의 위치로 이동하게 된다. 수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빨느 시간이 몇 초 후인지 구하는 프로그램을 작성하시오 디버깅을 통한 풀이 첫 시작은 Node(수빈의 위치, 시간은 0) 으로 먼저 queue에 담는다. 첫 if문은 수빈이가 현재 있는 위치가 동생의 위치와 같은 경우 작은 값을 넣는 것인데 이떄 처음 들어가는 값이 바로 min변수에 값이 할당되어야 하므로 min은 Integer.MAX_VALU..

알고리즘 2023.02.26