분류 전체보기205 [Java] 백준 단어 공부 - 1157번 문제 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. 입력 첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다. 출력 첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다. 예제 입/출력 풀이 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { static BufferedReader br; stati.. Algorithm/Problem Solving 2022. 7. 31. [Java] 백준 알파벳 찾기 - 10809번 문제 알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다. 출력 각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다. 입/출력 풀이 import java.io.BufferedReader; import java.io.IOExcepti.. Algorithm/Problem Solving 2022. 7. 31. [Java] 백준 문자열 반복 - 2675번 문제 문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다. S에는 QR Code "alphanumeric" 문자만 들어있다. QR Code "alphanumeric" 문자는 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\$%*+-./: 이다. 입력 첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스는 반복 횟수 R(1 ≤ R ≤ 8), 문자열 S가 공백으로 구분되어 주어진다. S의 길이는 적어도 1이며, 20글자를 넘지 않는다. 출력 각 테스트 케이스에 대해 P를 출력한다. 예제 입력 1 복사 2.. Algorithm/Problem Solving 2022. 7. 31. Producer-Consumer Pattern이란? (개념 /예제) 서론 이번 글에서는 멀티 스레드 환경에서 자주 사용하는 생산자 소비자 패턴에 대해 알아보려한다. 바로 한번 알아보자. Producer-Consumer Pattern이란? 생산자 소비자 패턴은 작업 목록을 가운데 두고 작업을 생산해내는 주체와 작업을 처리하는 주체를 분리시키는 설계 방법을 말한다. 이 말이 지금은 당장 와닿지 않을 수 있다. 그러나 멀티 스레드를 구성해야하는 상황이라면 해당 내용은 필히 이해하고 구성하기를 권장한다. 이렇게 작업을 '생성'하는 부분과 '처리'하는 부분이 각각 감당할 수 있는 부하를 조절할 수 있다는 장점이 있다. 여기서 Producer는 작업을 새로 만들어 큐에 쌓아두고, Consumer는 (블락킹)큐에 쌓여 있는 작업을 가져다 처리하는 구조이다. Producer는 디스크I.. Computer Science/etc 2022. 7. 29. Spring Boot jUnit Test : JPA metamodel must not be empty! 에러 해결 방법 서론 Controller 테스트코드 작성 중 다음과 같은 에러를 만났다. 해당 에러를 어떻게 해결하는지 원인과 해결방법 2가지에 대해서 정리해보도록 하겠다. 에러 발생 원인 Controller에 관련된 @MockBean 처리는 다 해준 것 같았는데 참 이상했다. 찾아보니 원인은 JPA를 사용하며 공통 & 자동으로 관리해주는 Auditing 클래스를 만들어놓았는데 이것을 @SpringBootApplication에 등록해놓은 것이 문제였다. Spring 컨테이너를 요구하는 테스트는 가장 기본이되는 --Application 클래스가 항상 로드되는데, @EnableJpaAuditing이 해당 클래스에 등록되어 있어 모든 테스트들이 항상 JPA 관련 Bean들을 필요로 하는 것이였다. 물론, @SprignBoot.. Error Document/Spring 2022. 7. 18. [Java] 코딩테스트 자주 사용하는 문법 정리 서론 Java로 알고리즘 문제를 풀 때 자주 사용하게 되는 문법들을 정리하려합니다. 계속해서 추가 예정입니다. 형 변환 Char To Int char myChar = '3'; int myInt = Character.getNumericValue(myChar); System.out.println(myInt); //결과: 3 String To Char String myString = "apple"; char[] myChars = myString.toCharArray(); for (int i=0; i 배열 요소 모두 더하기 int arr[] = new int[] {12,34,45,21,33,4}; int sum = Arrays.stream(arr).sum(); System.out.println("Array Su.. Programming/Java 2022. 7. 15. [Java] 탐욕 알고리즘이란? (개념/ 코드 예제/ 알고리즘 한계) 탐욕 알고리즘(Greedy Algorithm)이란? 최적의 해에 가까운 값을 구하기 위해 사용되는 알고리즘이다. 가장 큰 특징은 여러 경우 중 하나를 결정해야할 때마다, 매 순간 최적이라고 생각되는 경우를 선택하는 방식으로 진행하여 최종적인 값을 구하는 방식을 말한다. 특징 자체가 구현 방식을 말하는 것이기에 예제를 통해 바로 알아보겠다. 예제1) 동전 문제 Q1. 지불해야 하는 값이 4720일 때, 1원, 50원, 100원, 500원 동전으로 동전의 수가 가장 적게 지불하게끔 구현해보아라. Java 코드 구현 public class GreedyCoin { public static void main(String[] args) { //4720을 500,100, 50, 10 동전으로 최소한의 개수 구하기 A.. Algorithm/Concept 2022. 7. 15. [Java] 너비 우선 탐색(BFS), 깊이 우선 탐색(DFS)이란? (개념 /코드 예제) 서론 이번엔 대표적인 그래프 탐색 알고리즘인 너비우선탐색과 깊이 우선 탐색에 대해 알아보려합니다. 보통 BFS, DFS라 불리며, 굉장히 많이 쓰이는 탐색 알고리즘에 대해 알아보겠습니다. 너비 우선 탐색(Breadth First Search)이란? 정점들과 같은 레벨에 있는 노드들을 먼저 탐색하는 방식을 말한다. 깊이 우선 탐색(Depth First Search)이란? 정점의 자식들을 먼저 탐색한느 방식을 말한다. 너비 우선 탐색 구현 그래프에서 보통 각 덩어리를 노드, 이어진 선을 간선 또는 엣지라 칭한다. BFS 방식에서 노드들의 간선 흐름을 정리하면 다음과 같다. 구현 방식 탐색 순서 (위 이미지 참고) A - B - C - D - G - H - I - E - F - J 한 단계 씩 내려가면서, 해.. Algorithm/Concept 2022. 7. 14. [Git] The requested URL returned error: 403 Push 에러 해결 방법 서론 필자가 저 에러를 뱉기까지의 상황은 다음과 같다. 권한(Admin)을 부여받은 공용 repository를 fork한 후 작업 후 push하니까 다음과 같은 에러가 발생했다. 이 403에러는 github을 사용하기 위해 셋팅을 한 후 필자와 같이 push를 할 때 해당 주소에 접근 권한이 없어서 자주 발생하는 에러라고 한다. 이제 이를 해결하는 방법에 대해 알아보자. 에러 내용 The requested URL returned error: 403 Pushing to ... 에러 전문 보기 더보기 git -c diff.mnemonicprefix=false -c core.quotepath=false --no-optional-locks push -v --tags origin main:main remote: .. Git 2022. 7. 14. [Java] 순차 탐색, 이진 탐색의 개념과 예제 서론 이번 포스팅에선 순차 탐색과 이진 탐색의 개념에 대해 알아보고 간단히 Java로 구현해볼 예정입니다. 바로 시작하겠습니다. 순차 탐색(Sequential Search)이란? 탐색은 여러 데이터 중에서 원하는 데이터를 찾아내는 것을 의미한다. 순차 탐색은 데이터가 담겨있는 배열을 맨 앞부터 하나씩 비교하여 원하는 데이터를 찾는 방법을 말한다. 순차 탐색 구현 public class SequentialSearch { public static void main(String[] args) { ArrayList list = new ArrayList(); for(int i=0; i 중간 값) [True] 뒷 부분의 서브 리스트에서 검색할 숫자를 찾는다. if(검색할 숫자 < 중간 값) [True] 앞 부분의 .. Algorithm/Concept 2022. 7. 13. [Java] 고급 정렬 - 퀵 정렬이란? (개념 / 예제 / 알고리즘 분석) 서론 이전 병합 정렬에 이어 고급 정렬에 속한 퀵 정렬, 흔히 정렬 알고리즘의 꽃이라 불리는 이 포스팅을 마지막으로 정렬 알고리즘에 대해 마무리하려합니다. 바로 알아보겠습니다. 퀵 정렬(Quick Sort)이란? 분할 정복 알고리즘 중 하나인 고급 정렬 알고리즘이며, 평균적으로 매우 빠른 수행 속도를 갖고 있는 정렬 방법을 말한다. 퀵 정렬의 구현 방식을 알아보면 다음과 같다. 구현 방식 기준점(Pivot)을 정해서, 기준점보다 작은 데이터는 왼쪽(left), 큰 데이터는 오른쪽(right)으로 모으는 함수를 작성한다. 각 왼쪽(left)과 오른쪽(right) 배열은 재귀용법을 사용하여 다시 동일 함수를 호출하여 위 작업을 반복한다. 함수는 왼쪽(left) + 기준점(pivot) + 오른쪽(right)을.. Algorithm/Concept 2022. 7. 13. [Java] 고급 정렬 - 병합 정렬이란? (개념/ 예제/ 총 정리) 서론 이번 글에서는 고급 정렬 알고리즘에 속한 병합 정렬을 예제를 통해 알아보도록 하겠습니다. 병합 정렬(Merge Sort)이란? 병합 정렬은 재귀 용법을 활용한 정렬 알고리즘을 말한다. 구현 방식은 다음과 같다. 구현 방식 (위 이미지 참고) 리스트를 절반으로 잘라 비슷한 크기의 두 개의 리스트로 나눈다. 각 리스트를 재귀적으로 합병 정렬을 이용하여 정렬한다. 두 리스트를 다시 하나의 정렬된 리스트로 병합한다. 위와 같이 방식을 3 Step으로 나누어 구현할 수 있다. 이 방식을 토대로 아래의 예제 문제를 풀어보자. 예제 구현 방식에서 1번 항목인 하나의 리스트를 두 개의 리스트로 나누는 것부터 구현을 해보면 다음과 같이 짜볼 수 있다. 두 개의 리스트로 나눠보기 public class Split {.. Algorithm/Concept 2022. 7. 12. 이전 1 2 3 4 5 6 7 ··· 18 다음 💲 많이 본 글