목록전체 글 (81)
개발 공부 기록
Dynamic programming이란 한 번 계산한 문제는 다시 계산하지 않도록 하는 알고리즘으로, 중복 계산을 피하기 위해 실행 중간중간의 결과를 저장하고 이를 재사용하는 방식입니다. 어떠한 큰 문제를 작은 하위 문제로 분할하여 큰 문제의 최적 해결 방법을 하위 문제의 최적 해결 방법을 조합하여 만들어냅니다. 피보나치 수열을 예로 들어보겠습니다. public static int fibo(int x) { if(x == 1 || x == 2) { return 1; } return fibo(x - 1) + fibo(x - 2); } fibo(6)을 생각해봅시다. fibo(6)은 fibo(5)와 fibo(4)를 호출하고 fibo(5)는 fibo(4)와 fibo(3)을, fibo(4)는 fibo(3)과 fib..

Build Tool - Gradle Language - JAVA 11 SpringBoot Version - 3.1.3 Packaging - jar Dependencies - Spring Web start.spring.io를 통해 위와 같은 설정으로 프로젝트를 생성한 후 빌드를 하였더니 아래와 같은 에러가 발생하였습니다. 원인은 JAVA와 Gradle의 버전 충돌이였습니다. 공식 문서를 찾아봤더니 SpringBoot 버전에 맞는 JAVA 버전을 사용해야 한다는 걸 알게 되었습니다. SpringBoot 3.x 버전부터는 JAVA 17 이상을 사용하고, SpringBoot 2.x 버전은 JAVA 11을 사용하는 것을 추천드립니다. 저의 경우에는 SpringBoot 버전은 3.1.3에 JAVA 11을 사용하고 ..

스프링부트 프로젝트를 만들 때마다 JAVA의 대표적인 빌드 관리 도구인 Maven과 Gradle을 선택해야하는 상황이 옵니다. 여태까지지 Gradle을 사용하는 것이 트렌드라고 하여 별다른 생각없이 Gradle을 사용하였지만, "스프링부트 쇼핑몰 프로젝트 with JPA"란 책에서 Maven을 사용하는 것을 보고 둘의 개념과 차이점을 명확히 알고 넘어가야겠다는 생각이 들어서 글을 작성하게 되었습니다. 🔨빌드 관리 도구란? 빌드 관리 도구는 대표적으로 아래와 같은 작업을 수행합니다. 프로젝트에서 필요한 xml, properties, jar 파일들과 우리가 작성한 java 코드를 JVM이나 WAS가 인식할 수 있도록 빌드 소스 코드의 컴파일, 테스트 실행, 문서 생성, 패키징, 배포 등의 작업을 담당하며 실..

백트래킹이란 DFS와 주로 함께 사용되는 알고리즘 전략으로, 가능한 모든 경로를 탐색하는 도중 해답이 될 가능성이 없다고 판단되는 경로는 더 이상 탐색하지 않고 이전 분기점으로 돌아갑니다. 즉, 불필요한 경로는 조기에 차단하여 탐색의 효율성을 높입니다. 이를 문제 풀이에 적용하여 다시 말하자면, 우리는 경로를 찾기 위하여 현재 노드에서 다음 노드로 나아갈 수 있는 모든 경우를 재귀적으로 찾습니다. 이때 노드가 제한된 조건에 위배된다면 해당 노드를 제외하고 이전의 노드로 돌아가 다음 노드를 확인하는 방식입니다. 즉, DFS를 통해 모든 노드를 탐색하며 더 이상 필요하지 않는 부분들은 쳐내는 방식을 백트래킹이라고 생각하면 됩니다. https://www.acmicpc.net/problem/2580 2580번:..
DFS와 BFS 모두 정점(node)와 간선(edge)으로 이루어진 그래프를 탐색하는 방법으로, 하나의 정점에서 시작하여 차례대로 다수의 정점들을 방문합니다. 🔉 DFS(Depth-First Search) - 깊이 우선 탐색 DFS는 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘입니다. 스택 또는 재귀함수로 구현하며, 일반적으로 모든 노드를 방문하고자 할 때 사용됩니다. 예를 들어, 미로의 어느 한 지점에서 한 방향의 길로 쭉 탐색하다가 더 이상 갈 수 없게 되면 다시 가장 가까운 갈림길로 돌아와 그곳에서부터 다시 다른 방향의 길로 탐색하는 방식입니다. 아래는 DFS가 활용되는 몇 가시 예시입니다. 1. 두 노드 간의 경로가 존재하는지 확인하거나 모든 가능한 경로를 찾을 경우 - DFS는 깊게 들어..

프로그래밍에서 그래프는 크게 인접 행렬과 인접 리스트로 표현할 수 있습니다. 이 두 방식은 서로 정반대의 특징을 가지고 있기 때문에 알고리즘 및 그래프의 종류에 따라 적절히 사용하여야 합니다. - 인접 행렬(Adjacency Matrix) 인접 행렬 방식은 2차원 배열에 각 노드가 연결된 형태를 기록하는 방식입니다. 아래와 같은 테스트 케이스를 봅시다. 0 2 1 3 2 3 3 0 무방향 그래프의 경우에는 아래와 같은 그림으로 나타낼 수 있습니다. 파란색으로 표시된 부분은 자신을 나타내고, 이때 무방향 그래프는 자신을 기점으로 대칭입니다. 노드 0과 노드 2를 잇는 간선이 있을 경우 행렬(0, 2)과 (2, 0)에 1을 표기해주는 방식입니다. (참고로, 방향 그래프의 경우에는 방향에 맞는 간선만 표기합니..

🚨 문제 발생 더보기 A problem occurred configuring root project 'project_name'. > Could not resolve all files for configuration ':classpath'. > Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.1.2. Required by: project : > org.springframework.boot:org.springframework.boot.gradle.plugin:3.1.2 > No matching variant of org.springframework.boot:spring-boot-gradle-plugin:3.1.2 was found..
https://www.acmicpc.net/problem/2343 2343번: 기타 레슨 강토는 자신의 기타 강의 동영상을 블루레이로 만들어 판매하려고 한다. 블루레이에는 총 N개의 강의가 들어가는데, 블루레이를 녹화할 때, 강의의 순서가 바뀌면 안 된다. 순서가 뒤바뀌는 경 www.acmicpc.net Question 강토는 자신의 기타 강의 동영상을 블루레이로 만들어 판매하려고 한다. 블루레이에는 총 N개의 강의가 들어가는데, 블루레이를 녹화할 때, 강의의 순서가 바뀌면 안 된다. 순서가 뒤바뀌는 경우에는 강의의 흐름이 끊겨, 학생들이 대혼란에 빠질 수 있기 때문이다. 즉, i번 강의와 j번 강의를 같은 블루레이에 녹화하려면 i와 j 사이의 모든 강의도 같은 블루레이에 녹화해야 한다. 강토는 이 블루..
BufferedReader란? Java에서 텍스트를 읽을 때 사용하는 클래스로, 버퍼링 기능을 제공합니다. 이 클래스는 Reader 클래스를 확장하며, 버퍼를 사용해 한 번에 여러 문자를 읽어 오는 것이 가능하여 큰 파일이나 스트림에서 효율적인 읽기 작업이 가능합니다. StringTokenizer란? Java에서 어떠한 문자열을 특정 구분자를 기준으로 여러 토큰으로 분할할 때 사용됩니다. 이 클래스는 문자열을 처리하고 각 토큰을 순차적으로 가져오는 방법을 제공합니다. 알고리즘 문제를 풀 때, BufferedReader과 StringTokenizer를 같이 사용하는 경우가 많습니다. BufferedReader로 라인을 읽고, 해당 라인에서 특정 문자열을 읽을 경우 StringTokenizer를 사용합니다...
https://www.acmicpc.net/problem/1920 1920번: 수 찾기 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들 www.acmicpc.net Question N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오. Input 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어..