자바

Book Review/Modern Java In Action

[모던 자바 인 액션] Chapter4. 스트림 소개

1. 스트림이란 무엇인가? 데이터 컬렉션 반복을 멋지게 처리하는 기능 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다. 다음 예제는 저칼로리의 요리명을 반환하고, 칼로리를 기준으로 요리를 정렬하는 자바 7 코드 기존 코드 List lowCaloricDishes = new ArrayList(); for (Dish d : dishes) { if (d.getCalories() < 400) { lowCaloricDishes.add(d); } } List lowCaloricDishesName = new ArrayList(); Collections.sort(lowCaloricDishes, new Comparator() { // 익명 클래스로 요리 정렬 @Override public int..

백준 오답노트/트리

백준 - 트리 순회 1991번 문제 / DFS풀이

전위 순회, 중위 순회, 후위 순회란 무엇인가? 전위 순회 루트 노드가 가장 먼저 나오는 순회 방식 Root -> Left -> Right 자기 자신 -> 왼쪽 자식을 방문 -> 오른쪽 자식을 방문 중위 순회 각 루트 노드가 자식 노드의 사이에 위치 Left -> Root -> Right 왼쪽 자식을 방문 -> 자기 자신 -> 오른쪽 자식을 방문 후위 순회 루트 노드가 가장 마지막에 출력 Left -> Right -> Root 왼쪽 자식을 방문 -> 오른쪽 자식을 방문 -> 자기 자신 접근 방법 DFS를 이용한 구현 왼쪽, 오른쪽을 구분할 수 있는 2차원 배열 생성 배열 안에 값을 알파벳 말고 숫자로 담은 후 출력만 알파벳으로! 구현 전위 순회: DFS를 시작했을 때, 그 값을 먼저 출력하고 계속 파고드..

Spring/Security

Spring Security) UserDetailsService에서 비밀번호는 어디에서 검사하는 걸까?

Spring Security의 사용자 비밀번호 검사 스프링 시큐리티 예제를 보며 개발하다 보면 UserDetailsService 인터페이스의 loadUserByUsername(String username)을 구현해서 사용자 정보를 DB에서 조회하고 반환한다. 하지만 비밀번호를 체크하는 코드는 없다. 그래도 잘못된 비밀번호를 입력하면 로그인에 실패한다. 내가 작성한 코드에는 없지만 어디에선가 비밀 번호 체크를 하고 있는 것이다. 비밀 번호는 어디에서 체크할까? DaoAuthenticationProvider AuthenticationManager.authenticate(Authentication)을 호출하면 스프링 시큐리티에 내장된 AuthenticationProvider의 authenticate()메서드가..

백준 오답노트/그래프와 순회

백준 - 그래프와 순회 나이트의 이동 7652문제 / BFS풀이, 오답

첫째 줄에는 체스판의 한 변의 길이 둘째 줄에는 나이트가 현재 있는 칸 셋재 줄에는 나이트가 이동하려는 칸이 주어진다. 0, 0에서 시작해서 -> 7, 0 도착 최소 몇 번만에 이동할 수 있는지 확인하는 문제다. => BFS를 이용해서 최솟값을 구하자 처음 나이트가 이동할 수 있는 경우의 수, 가운데 시작에서 나이트는 저렇게 이동할 수 있음을 알고 시작하자. col, row / col2, row2를 따로 나누었다. 2차원 배열을 생성해서 예를 들어보자. 이런식으로 이동할 수 있음을 나타낸다. 두 번째, col2와 row2를 이용했을 때 이동할 수 있는 예를 들어보자. 이렇게 이동함을 알 수 있다. 그럼 이제 같이 이동했을 때를 나타내보자 겹칠 일이 없이, 내가 이동할 수 있는 좌표를 Queue에 담고 한..

백준 오답노트/백트래킹

백준 - 백트래킹 14889번 스타트와 링크 / 풀이, 오답

= 내가 접근한 방법 = 처음 작성한 dfs 함수다. 이 메서드의 문제점은 2개까지는 구할 수 있어도 => n = 4일 때만 가능하고 n = 6일 때 부터 불가능했다. n = 6일 때, 1-2-3 vs 4-5-6 이렇게 팀을 이루는 건데 내가 짠 함수로는 1-2, 3-4, 5-6 이런 식으로 진행이 되기 때문에 당연히 오답. public static void dfs(int n, int depth) { // System.out.println("depth = " + depth); if (depth == n / 2) { for (int i = 0; i < depth; i++) { System.out.println("result: " + temp[i]); } int check = Math.abs(temp[0] ..

백준 오답노트/이분 탐색

백준 - 이분 탐색 1300번 K번째 수 / 풀이, 오답

= 접근 방법 = NxN 배열 A A[i][j] = i * j 이 수를 일차원 배열 B에 넣으면 B의 크기는 NxN이 된다. B[k]를 구해보자 N = 3, B = 7일 때 b[7] = 6이 문제에서 주어졌다. 문제를 그래도 만들어보자, int[][] A = new int[3][3] 그동안 우리가 해왔던 이분 탐색 문제들은 단순하게 주어진 값을 이용해서 반으로 나누는 식으로 어떻게든 2중 for문 시간 복잡도 O(N^2)이 아닌, O(logN)형식으로 만들면 되는 거였다. 이 문제가 어려운 이유는? => 지금까지 풀어왔던 틀에서 완전히 벗어나 새로운 규칙을 발견하고 응용해야 된다. 입력) 배열의 크기 N이 주어진다. N은 105보다 작거나 같은 자연수 이 문장을 봤을 때, 순수하게 배열을 그대로 만든다면..

초보병일이
'자바' 태그의 글 목록