본문 바로가기

전체 글

(172)
Autowire 알아보기 - 1 Autowire 어노테이션은 의존성 주입을 위해 자주 사용하게 되는데, 제대로 알고 사용하기 위해 한번 알아보겠습니다. @Autowired - Autowire의 required의 기본 값은 true( 의존성 주입에 실패하면 애플리케이션 구동이 실패한다.) 아래와 같이 BookService에서 Autowired를 생성자를 통해 진행하는 상황이라고 가정합니다. 만약 BookRepository가 빈으로 등록되지 않았을 경우 당연히 에러를 반환합니다. -> 당연한 생각이죠? 그런데 생성자가 아니라 setter를 통해 의존성 주입을 하는 상황이라고 가정해보겠습니다. 이건 왜 실패하는 걸까요? 첫 번째 예시의 생성자를 통한 의존성 주입은 빈을 만들기 위한 과정에서 빈에 필요한 다른 의존성인 bookRepositor..
자바의 String Pool 알아보기 자바의 String 타입을 다룰 일이 요즘 많아지고 있습니다.. 그렇지만 잘 알고 사용하지 못하는 것 같아 내용을 정리해보겠습니다. 불변성(Immutable) 유일하게 제가 알고 있던 String의 특징은 불변성입니다. String 문자열 객체는 처음 생성했던 값은 절대 변하지 않습니다. String a = "abc"; a = "abcde"; 위와 같이 String 객체가 생성된 후에 abcde로 객체를 변경하면 내부적으로 값이 변경되는게 아닌 새로운 String 객체가 생성되어 새로운 참조를 바라보고 있게 됩니다. 그렇기 때문에 "abc"아 "abcde" 두 개의 객체가 생성되어 heap 영역에 생성되어 있습니다. 왜 불변이냐!? 왜 불변일까요? String 타입은 가장 많이 사용되는 타입입니다. 그러..
프로그래머스 - 소수찾기(완전탐색, 에라토네스의 체) programmers.co.kr/learn/courses/30/lessons/42839#qna 코딩테스트 연습 - 소수 찾기 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 � programmers.co.kr 요즘 코딩테스트 시즌이라 알고리즘 관련된 포스팅만 올리는 것 같습니다. 이 문제는 소수찾기 문제인데 이걸 백트래킹으로 풀어야할지 아니면 다른 방식으로 풀어야할지 많이 고민하다가 방법을 찾은것 같아서 그 방식대로 풀어봤는데 자바로 문자열 다루는게 쉽지 않았고 특히 deep copy때문에 고생했습니다... 문제 한자리 숫자가 적힌 종이 조각이 흩어져있습니..
BOJ 2178 - 미로 탐색(BFS) www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 미로탐색 문제는 (1,1) ~ (N,M)까지의 최소 거리를 구하는 문제입니다. 이런 연결되어 있는 배열을 탐색해 나가야 하는 상황에서는 BFS를 사용하고 첫번 째 칸에 1을 대입하고 나머지 칸에 +1을 해나가면서 거리를 확장시켜 나가면서 풀어야 합니다. 코드 import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; ..
BOJ 1926 - 그림 www.acmicpc.net/problem/1926 1926번: 그림 어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로�� www.acmicpc.net BFS 문제 풀어봤습니다. 힘들어! import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class boj1926 { static int[][] arr; static boolean[][] visited; static int[] dx = {-1,1,0,0}; static int[] dy = {0,0,-1,1}; st..
BOJ 1912 - 연속합 ( 완전탐색, Prefix Sum, DP) www.acmicpc.net/problem/1912 1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 연속합 문제를 3가지 방식으로 풀어보겠습니다. 1. 완전탐색 말 그대로 전체 배열을 돌면서 모든 경우의 수를 탐색합니다. 시간복잡도는 O(n^3)으로 문제를 제출하면 시간초과가 발생합니다. import java.util.Scanner; public class boj1912 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int ..
BOJ 11726 - 2 x N 타일링 www.acmicpc.net/problem/11726 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net 풀이 import java.util.Scanner; public class boj11726 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int[] dp = new int[10001]; int mod = 10007; dp[1] = 1; dp[2] = 2; for(int i=3; i
BOJ 1149 - RGB거리 www.acmicpc.net/problem/1149 1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net dp 문제 하나를 더 풀어 봤습니다. 점화식을 세울 때 항상 1차원 배열로만 점화식을 작성했는데 2차원 배열로 작성해서 문제를 해결하는 방법이 있습니다. 이 문제는 dp의 배열을 1차원 배열로 하게 되면 R, G, B 세 가지의 색상을 나타내지 못하므로 2차원 배열을 생성해서 점화식을 작성하고 문제를 풀이합니다. dp[i][1] = R dp[i][2] = G dp[i][3] = B로 만든 ..