본문 바로가기

전체 글

(224)
[TIL] 그래프 - BFS/DFS (java) 파이썬으로 공부했던 알고리즘을 java로도 공부중이다. 파이썬의 간편한 문법에 익숙해져 있어서 java로 하니까 좀 헷갈리지만 알고리즘은 구현방법은 비슷하기 때문에 정리해보려고 한다. 백준의 그래프 문제(1260번: DFS와 BFS (acmicpc.net))로 연습하였다. 코드는 아래와 같다. package graph_bfs_dfs; import java.util.*; import java.io.*; public class Aug5Week_1260_Ssi { //두개의 그래프를 출력해야 하기 때문에 변수 선언 public static ArrayList[] graph; public static boolean[] visited; //재귀를 활용한 dfs public static void dfs(int v){..
[java] BufferedReader, BufferedWriter 자바로 알고리즘 공부를 시작하면서 Scanner보다 빠른 입출력이 가능한 BufferedReader와 BufferedWriter을 공부하였고 정리해보려고 한다. 파이썬도 기존의 input() 대신 빠른 입력을 위해 sys.stdin.readline()을 사용했었는데 자바도 비슷한 원리인 것 같다. BufferedReader와 BufferedWriter는 버퍼를 사용하여 읽기와 쓰기를 하는 함수로 버퍼를 사용하지 않는 입력은 키보드의 키를 누름과 동시에 바로 프로그램에 입력이 전달되지만 버퍼를 사용하는 입력은 버퍼로 전송한다. 버퍼가 다 차거나 개행 문자 등이 나타날 경우 버퍼의 내용을 한번에 프로그램에 전달한다. Scanner는 사용하기 쉽지만 버퍼사이즈가 1024char로 매우 작기 때문에 입력의 크기..
STS(Spring Boot)- UsernameNotFoundException이 BadCredentialsException으로 나오는 문제 원인 파악 spring security를 사용하여 로그인 로직을 개발하던 중 마주한 문제였다. 문제 상황은 다음과 같다. 데이터베이스에 없는 유저가 로그인을 시도 했을 때 UsernameNotFoundException이 아닌 BadCredentialsException으로 예외처리가 됐다. 그래서 왜 그런지 코드를 살펴보았다. [userDetailService] @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { User user = userMapper.getAuthInfo(username); if (user == null) { throw new UsernameNotFoundException..
[python] 2696 - 중앙값 구하기 2696번: 중앙값 구하기 (acmicpc.net) 2696번: 중앙값 구하기 첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스의 첫째 줄에는 수열의 크기 M(1 ≤ M ≤ 9999, M은 홀수)이 주어지고, 그 다음 줄부터 이 수열의 원소가 차례대로 주 www.acmicpc.net 문제 접근을 완전 잘못해서 어려웠던 문제였다. 혼자 풀어낼 수 있었다면 좋았겠지만 그러지는 못했다. 우선 중앙값을 구하기 위해 우선순위 큐 2개를 사용하였다. 우선순위 큐의 사용이 자기 익숙지가 않아서 더 연습을 해봐야 할 것 같다. 우선 이 문제는 입력과 출력도 10개씩 끊어서 해야했기 때문에 조건을 추가해주었다. 문제를 풀기위한 가장 중요한 원리는 중앙값을 기준으로 양쪽으로 우선..
[python] 1374 - 강의실 1374번: 강의실 (acmicpc.net) 1374번: 강의실 첫째 줄에 강의의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 줄마다 세 개의 정수가 주어지는데, 순서대로 강의 번호, 강의 시작 시간, 강의 종료 시간을 의미한다. 강의 www.acmicpc.net 전에 프로그래머스에서 비슷한 문제를 풀어봤는데 다시 풀어보려니 또 헷갈려서 정리를 해보려고 한다. 우선 이 문제는 우선순위 큐를 사용하여 쉽게 풀 수 있다. 최대한 많은 강의를 최대한 적은 수의 강의실을 사용하여야 하므로 그리디에 속한다고 볼 수도 있을 것 같다. 문제를 풀기 위해 고려해야 하는 것은 다음과 같다. 1. 여기서 강의번호는 무시해도 좋다. 2. 강의 시작 시간과 종료 시간을 묶어서 우선순위..
STS(Spring Boot) - The type javax.servlet.Filter cannot be resolved. It is indirectly referenced from required type org.sitemesh.config.ConfigurableSiteMeshFilter 해결 사이트매쉬를 설정하면서 마주한 에러였다. The type javax.servlet.Filter cannot be resolved. It is indirectly referenced from required type org.sitemesh.config.ConfigurableSiteMeshFilter 웹 애플리케이션에서 servlet 필터가 클래스 패스에 존재하지 않거나 가져오지 못해 발생한 에러로 Maven 웹 프로젝트 서블릿 3.1로 업그레이드 하기 (tistory.com)을 참고하여 서블릿을 업그레이드 한 후 의존성을 추가해주었더니 해결되었다.! ** 의존성 추가 후 꼭 install 후 재실행을 하자
[python] 누적 곱 구하기 코테 문제를 풀면서 리스트의 모든 원소의 누적합이나 누적곱을 구해야 하는 경우가 많다. 그래서 누적곱을 쉽게 구하는 방법을 정리하였다. 1. reduce 사용 - 리스트 내의 요소를 순차적으로 누적 계산한 결과를 리턴해준다. from functools import reduce ## 방법 1 - 함수 사용 def func(x,y): return x*y reduce(func, [1,4,2,5]) ## 방법 2 - 람다 사용 reduce(lambda x,y : x*y , [1,4,2,5]) 2. prod 사용 - math 라이브러리의 prod를 사용하여 구한다. from math import prod print(prod([1,4,2])) # 8
[python] 2014 - 소수의 곱 2014번: 소수의 곱 (acmicpc.net) 2014번: 소수의 곱 첫째 줄에 K(1 ≤ K ≤ 100), N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 K개의 소수가 오름차순으로 주어진다. 같은 소수가 여러 번 주어지는 경우는 없으며, 주어지는 소수는 모두 541보다 작거나 www.acmicpc.net 우선순위 큐를 해결하는 문제였다. 처음 내가 생각한 풀이는 다음과 같았다. 1. 중복조합으로 소수의 곱을 계산하여 리스트에 넣는다. 2. 힙 정렬 후 heap을 n번 반복하여 n번째 위치한 값을 구한다. 그런데 착각한 것이 주어진 소수를 곱해나가면 무한히 가능하기 때문에 중복조합으로 계산을 하면 안됐다..! 심지어 중복조합 후 구한 값을 prod를 사용해 누적합을 구해서 계산했다. 결과는..

728x90