REST APIREST API는 웹 서비스 설계를 위한 일련의 원칙과 제약 조건을 제공한다. 이는 클라이언트와 서버 간의 상호작용을 표준화하기 위해 만들어졌으며, 다음과 같은 주요 원칙을 포함한다.자원(Resource) 기반: 웹에서 모든 것은 자원으로 표현된다.. 자원은 URI를 통해 식별된다.무상태성(Statelessness): 각 요청은 독립적이며, 이전 요청의 정보를 저장하지 않는다.캐시 가능성(Cacheability): 응답은 캐시가 가능하거나 불가능하다는 정보를 명시해야 한다.계층화된 시스템: 클라이언트는 중간 서버를 통해 자원에 접근할 수 있다.통일된 인터페이스: 일관된 인터페이스를 통해 상호작용한다.이러한 REST API 규칙을 잘 지키는 것을 RESTful API라고 한다.Spring B..
전체
16236. 아기 상어 16236번: 아기 상어 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가 www.acmicpc.net 아이디어💡 1차시도 물고기 크기가 6가지 → 각 크기 별 남아있는 개수, 먹을 수 있는 물고기 개수 세면서 가기 → 먹을수있는게 없으면 끝 일반 멤버 변수 물고기 크기별 물고기 개수 저장: int[] 아기상어 객체 인스턴스 맵 현재 시간 먹을 수 있는 물고기 개수 초기는 크기 1인 물고기 개수 내부에 아기상어 클래스 생성 멤버 변수 위치 상어 크기 초기값 : 2 먹은 물고기 개수 기능 먹기 해당 위치의 물고기 크기에 대한 물고기 개수..
20056. 마법사 상어와 파이어볼 20056번: 마법사 상어와 파이어볼 첫째 줄에 N, M, K가 주어진다. 둘째 줄부터 M개의 줄에 파이어볼의 정보가 한 줄에 하나씩 주어진다. 파이어볼의 정보는 다섯 정수 ri, ci, mi, si, di로 이루어져 있다. 서로 다른 두 파이어볼의 위치 www.acmicpc.net 아이디어💡 맵을 파이어볼 뭉치(파이어볼 리스트)를 갖게끔 해서 만들자! 필요한 클래스를 정해보자 좌표 파이어볼 좌표, 질량, 속도, 방향 움직였는지 여부 ⇒ move를 할 때 이동한 파이어볼 또 안돌리게! 파이어볼 뭉치 파이어볼 리스트 각 클래스 별로 필요한 메서드를 생각해보자 파이어볼 이동하기 파이어볼 뭉치 파이어볼 초기화(움직였는지 여부 초기화) 합치고 나누기 구현하자 1번 행은 N번과..
21610. 마법사 상어와 비바라기 21610번: 마법사 상어와 비바라기 마법사 상어는 파이어볼, 토네이도, 파이어스톰, 물복사버그 마법을 할 수 있다. 오늘 새로 배운 마법은 비바라기이다. 비바라기를 시전하면 하늘에 비구름을 만들 수 있다. 오늘은 비바라기 www.acmicpc.net 아이디어💡 상어 시리즈는 공통적으로 문제를 잘 읽고 제대로 구현하는걸 요구합니다. 따라서 다음과 같이 진행했습니다. 초기 설정 맵과 구름의 생성: N×N 크기의 맵과 초기 구름 위치가 설정됩니다. 구름은 특정 위치에 생성되며, 이후 이동, 비 내리기, 물 복사 버그 마법 등의 과정을 거치게 됩니다. 구름의 이동 방향과 속도: 사용자로부터 입력 받은 방향(d)과 속도(s)에 따라 구름이 이동합니다. 이때, 구름의 위치는 모..
4485. 녹색 옷 입은 애가 젤다지? 4485번: 녹색 옷 입은 애가 젤다지? 젤다의 전설 게임에서 화폐의 단위는 루피(rupee)다. 그런데 간혹 '도둑루피'라 불리는 검정색 루피도 존재하는데, 이걸 획득하면 오히려 소지한 루피가 감소하게 된다! 젤다의 전설 시리즈의 주 www.acmicpc.net 아이디어💡 처음에는 DFS(백트래킹)을 이용하는 방법을 생각했다. 하지만 시간초과가 나서 다익스트라를 활용하는 것으로 변경하니 성공했다. DFS (백트래킹) → 시간초과 결론 : 다익스트라 시간복잡도⌛ 우선 순위 큐 삽입 / 삭제 연산 : O(log N) -> 우선 순위에 모든 노드를 우선순위에 삽입 / 삭제 : O(N^2 * log(N)) 전체 코드 import java.io.BufferedReader;..
7579. 앱 7579번: 앱 입력은 3줄로 이루어져 있다. 첫 줄에는 정수 N과 M이 공백문자로 구분되어 주어지며, 둘째 줄과 셋째 줄에는 각각 N개의 정수가 공백문자로 구분되어 주어진다. 둘째 줄의 N개의 정수는 현재 활 www.acmicpc.net 아이디어💡 DP 초기화 각 앱의 메모리 사용량과 비활성화 비용을 저장하기 위한 Memory 객체 배열 memories를 생성합니다. DP 배열 정의 dp[j]를 메모리 j를 확보하기 위한 최소 비용으로 정의합니다. 이 배열은 최대 필요 메모리 M까지 고려하여 초기화됩니다. DP 초기화 첫 번째 앱을 사용하여 dp 배열을 초기화합니다. 첫 번째 앱의 메모리가 M을 넘지 않는 범위 내에서, 해당 앱의 비용으로 초기화합니다. DP 점화식 적용 만약 현재 살펴보..
1463. 1로 만들기 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 문제를 다시 살펴보자 정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다. X가 3으로 나누어 떨어지면, 3으로 나눈다. X가 2로 나누어 떨어지면, 2로 나눈다. 1을 뺀다. 정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오. 이는 시간제한이 짧기 때문에 DP를 활용해 푸는 방식을 떠올렸다. DP배열의 각 요소는 해당 정수를 1로 만들 수 있는 최소의 연산 횟수이다. 상황별로 다음과 같이 점화식을 세울 수 있다. dp[n] n % 3 == 0 dp[n] = min..
2747. 피보나치 수 2747번: 피보나치 수 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 www.acmicpc.net 문제를 간단히 살펴보면, 수를 입력받아서 해당 순서에 맞는 피보나치 수를 반환하는 것이 목적이다. 이는 DP 접근법으로 해결할 수 있는 대표적인 문제다. 그 중 DP 바텀업 방식을 적용해 아래 순서부터 차근차근 DP 배열을 채워나갈 것이다. 점화식은 다음과 같다. dp[n] = dp[n-1] - dp[n-2] 전체 코드 import java.util.Scanner; public class Main { pub..

2839번: 설탕 배달 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 문제를 다시 정리해보면 다음과 같다. 사탕가게에 설탕을 정확히 N kg을 배달한다. N은 3이상 5,000이하의 자연수 봉지는 3kg, 5kg 두 가지가 있고, 최대한 적은 봉지로 가져가려고 한다. 몇 봉지를 가져가야할까? 이에 대한 아이디어는 두 가지를 떠올릴 수 있었다. 첫번째는 그리디 방식으로 푸는 것이다. 3보다 5로 나누었을 때, 봉지 개수를 줄일 수 있기 때문에, N이 5로 나누어질 때까지, 3을 계속 빼자 두번째는 DP를 생각했다. dp..
프로젝트의 구조는 개발 과정에서 매우 중요한 부분이다. 잘 설계된 구조는 개발의 효율성을 높이고, 유지 보수를 용이하게 하며, 팀 구성원 간의 협업을 원활하게 한다. 이번 장에서 Spring Boot와 FastAPI를 사용할 때 일반적으로 나타나는 프로젝트 구조의 차이점에 대해 알아보자. 프로젝트 구조 FastAPI 프로젝트 구조 FastAPI는 비교적 자유로운 구조를 가지고 있으며, 개발자가 선호하는 방식으로 구조를 설정할 수 있다. 그러나 일반적으로 다음과 같은 구조를 따르는 것이 추천된다. my-fastapi-app/ ├── app/ │ ├── __init__.py # Python 파일로 애플리케이션 초기화 │ ├── main.py # FastAPI 앱 인스턴스 생성 및 설정 │ ├── depend..