[Spring] @Bean 메소드 파라미터 자동주입
·
자바
@Configuration 어노테이션이 선언된 클래스내에서,@Bean 어노테이션이 선언된 메소드는 다른 빈에 의존하여 자신을 초기화 할 수 있다. 이 때, 다른 빈이 파라미터로 들어올 때, 자동주입이 가능하다. 예시로 확인해보자. 1. 타입 자동주입   들어오는 파라미터의 타입이 선언된 빈이 하나라면, 해당 빈을 자동으로 주입해준다.  2. 이름 자동주입  만약 위와 같이 BeanA 라는 인스턴스 2개가 빈으로 등록되어 있다면? 이 때는 타입으로만 판단하기에 모호하기에 이름이 같은 빈을 주입해준다. ※ Bean 의 이름?@Bean 어노테이션이 달린 메소드의 기본 이름은 메소드명이 된다. 위 같은 경우에는 bean1, bean2 가 된다.그 외에도 개발자가 원하는 이름을 설정 하기 위해선 @Bean(nam..
2295 - 세 수의 합 (Java)
·
백준
문제https://www.acmicpc.net/problem/2295 풀이알고보면 참 단순한 문제다. 우리는 x + y + z = k 라는 공식을 활용해서 답을 찾아야 하는데, 이 표현은 x + y = k - z 로도 나타낼 수 있다는 점을 알아야 한다. x + y + z 의 경우의 수를 모두 구할려면 O(N^3) 이 걸릴 테지만  이를 조금 비틀어  x + y = k - z  를 활용하면 양쪽의 식들 값을 구하기 위해서 O(N^2) 의 시간에 풀이할 수 있다. x + y 의 값들을 set 에 저장한다음, k - z 값이 set에 있는지 확인하면 된다. 이 때 k 값이 가장 큰 값을 찾고 있기 때문에 배열을 오름차순으로 정렬해준다음,가장 뒤에서부터 k 값을 세팅해서 탐색을 시작하면 된다. k 값을 큰 값..
2493 - 탑 (Java)
·
백준
문제https://www.acmicpc.net/problem/2493 풀이스택을 활용한 문제이다. 스택을 활용해서 내 기준 왼쪽편에 나보다 큰 건물을 빠르게 찾을 수 있다. 스택에는 [건물번호, 건물높이] 형태로 저장하며, case 1. 스택이 빈 경우에는 -> 앞에 나보다 큰 건물이 없다는 뜻, 0번으로 세팅하고 스택에 현재 건물을 넣어준다. case 2. 스택 값이 건물높이가 나보다 작다면           -> 스택 값이 나보다 클 때까지 빼준다. (스택에 있는 높이가 크다면 내가 찾던 가장 가까운 건물을 의미한다.)           -> 큰 값이 나오면 해당 건물 번호로 세팅해주고, 스택에 현재 건물을 넣어준다. 정리하면 스택에서 현재 건물보다 큰 값이 나올때까지 빼주다가, 큰 값이 나오면 해당..
1253 - 좋다 (Java)
·
백준
문제https://www.acmicpc.net/problem/1253 풀이투 포인터를 활용해서 풀어야하는 문제이다. 값을 오름차순 정렬한다음, 가장 앞과 가장 뒤에 포인터를 위치시킨다. 포인터에 위치한 두 값을 더한 값이, 내가 선택한 값보다 크다면 -> 뒤의 포인터를 줄인다.내가 선택한 값보다 작다면 -> 앞의 포인터를 늘린다. 포인터를 이동할 때 선택한 숫자는 선택이 안되야하므로 이 부분은 예외처리 해주면 된다. 코드import java.util.*;import java.io.*;import java.util.stream.Collectors;public class Main { public Integer solution() throws Exception { BufferedReader ..
20955 - 민서의 응급 수술 (Java)
·
백준
문제https://www.acmicpc.net/problem/20955 풀이유니온 파인드를 활용해서 쉽게 풀 수 있는 문제이다. 뉴런은 노드, 시냅스는 엣지로 표현한다. 우선 입력으로 들어오는 값들을 연결하되, 사이클이 발생하면 연결을 끊는 과정을 거쳐야하기 때문에 연산횟수에 1을 더해준다. 그렇게 입력값이 다 끝났다면, 그룹을 확인해서 몇번의 연결 연산을 더 해야하는지 계산해주면 된다. 예로 그룹이 3개로 나뉘어져있다면 2번의 연결 연산이 더 필요한것이다. 단 주의해야할점이 union find 를 사용하다보면 내가 속한 부모의 그룹을 가리키고 있기 때문에 그룹의 개수를 구할려면 find 연산으로 계산을 하던가, 아니면 최적화 작업을 거쳐서 그룹번호를 가질 수 있도록 설정해두어야 한다.     코드imp..
1079 - 쇠 막대기 (Java)
·
백준
문제https://www.acmicpc.net/problem/10799 풀이괄호만 보면 스택먼저 생각나는 만큼, 스택을 활용해서 풀면 된다. 여는 괄호는 현재 막대기의 개수를 의미한다. 그러다가 이제 닫는 괄호가 나오면, 레이저를 의미한다. 이때 스택에서 여는괄호 하나를 꺼내서 닫는 괄호와 쌍을 맞추어 레이저가 구성된다. 그러면 막대들이 절단될것이고, 3개의 막대들이 있다고 가정 하면 3개가 잘려나갈것이다. 단, 앞서 레이저였는데 (닫는 괄호가 나왔는데) 또 닫는 괄호가 나온다면 이는 막대의 끝을 의미한다.막대의 끝을 만나면 1개를 추가해줌으로 레이저로 인해 잘린 오른쪽 값을 체크할 수 있다.   코드import java.util.*;import java.io.*;public class Main { ..
2116 - 주사위 쌓기 (Java)
·
백준
문제https://www.acmicpc.net/problem/2116 풀이  첫번째 주사위는 6면 모두 아랫면으로 향할 수 있기 때문에, 초기 값 기준으로 6번의 반복문을 돌아 경우의 수를 판단한다. 그 외의 주사위는 한칸씩 쌓으면서 아랫면이, 아래 주사위의 윗면과 맞닿으면 된다. 이 때, 새롭게 쌓는 주사위의 아랫면과 윗면을 제외한 4면 중 가장 큰 값을 취하고, 이 과정을 반복하면 된다.  주사위 쌓는 과정을 상세하게 설명하면, 1. 주사위를 쌓을때 아래 주사위의 윗면 값을 현재 주사위의 인덱스 어디에 있는지 찾는다.   (만약 아랫면 주사위의 윗면이 5라고 했을때, 현재 주사위에 5가 어느 위치에 있는지 찾으면 된다.)※ 주사위는 정수형 배열로 인덱스로 위치를 파악할 수 있다.  2. 해당 인덱스와..
15662 - 톱니바퀴(2)
·
백준
문제https://www.acmicpc.net/problem/15662 풀이우선 바퀴는 LinkedList 에 저장함으로 회전이 쉽도록 구성했다. (가장 앞쪽에 있는걸 뒤로하거나, 그 반대로 함에 따라 시계방향, 반시계방향 회전 구현이 가능하다.) 이후 나는 현재 바퀴를 기준으로,  앞쪽에 돌아가야하는 바퀴들을 검사하고 뒤쪽에 돌아가야하는 바퀴들을 검사하는 방식으로 수행했다. 이 때 포인터를 두개둬서, 기준점하고 그 기준점 앞의 바퀴를 가리키도록 했다.그 다음에 극이 같은지 다른지 검사하고, 이 과정을 앞쪽으로 쭉 반복, 뒤쪽으로 쭉 반복하는 식으로 구성했다. 검사 결과에 따라 돌아가야하는 바퀴들은 Map에 방식으로 저장해서 한 번 회전이 끝났을때Map에서 값을 꺼내서 회전을 시키는 방식으로 구성했다...
1043 - 거짓말 (Java)
·
백준
문제https://www.acmicpc.net/problem/1043 풀이[* 먼저 말하자면 이 문제는 union - find 로 푸는게 정설인 거 같다.] 이 문제의 요점은, 진실을 알고 있는 사람을 통해 건너건너 거짓말쟁이에게 진실이 전해질 수 있다는 점이다. 만약 진실을 알고 있는 사람이 1이라고 가정했을 때, 파티 1 : 1 2파티 2 : 2 3파티 3 : 3 4 이런식으로 이루어져 있을 때 2번이 1번을 통해 진실을 듣게 된다. 다음에 3번은 2번을 통해 들을 수 있고, 4번은 3번을 통해서 들을 수 있다.  (파티의 순서는 상관없다) 따라서 건너건너까지 진실을 알고 있는 사람과의 파티에 엮여있는지 확인할 필요가 있다. 나는 스텝을 나눠서 코드를 구현했다. 1. 우선 진실을 아는 사람들을 저장한..
[Oracle / Tibero ] Synonym 이슈 / Synonym이란?
·
개발
배경회사 업무중, 개발 환경과 운영 환경 사이의 테이블이 일치하지 않는 상황이 있었다.운영 환경에 있는 테이블을 참조하여, 개발 환경에도 동일한 테이블을 생성해주었는데서버에서 테이블이 없다는 오류가 지속적으로 발생했음!   원인 이는 알고보니 서버에서 DB에 접근하는 계정과, DB에서 테이블을 컨트롤 하는 계정의 정보가 달랐기 때문이었다.(계정을 구분한 이유는 보안상의 이유가 있었음.) 그리고 서버 계정에서는 Synonym 기능을 활용하여 테이블에 접근하고 있었음.  해결 권한부여 자신이 만든 테이블이 아닐 경우, 테이블 조작의 권한이 존재하지 않음.따라서 GRANT 명령어로 특정 계정에 권한을 부여해주어야 함 -- ANOTHER_USER 에게 MY_TABLE 에 대한 SELECT 권한을 부여GRANT..