분류 전체보기
-
[Spring Boot] @ModelAttribute 와 @RequestBody 의 차이프로그래밍 2023. 5. 21. 19:47
그동안 스프링 부트로 서버를 개발하면서 @ModelAttribute 와 @RequestBody의 정확한 차이를 모르고 그냥 MVC에서는 @ModelAttribute, REST API 개발에서는 @RequestBody 를 사용했다. 하지만 이번 팀 프로젝트에서 프론트와 백엔드를 붙이면서 여기서 문제가 발생했다. @ModelAttribute 는 URL에서 파라미터로 데이터를 전송할 때 해당 파라미터를 DTO 객체와 매핑시켜준다. 또한 이렇게 동작하기 위해서는 프론트에서 Content-Type 을 반드시 application/x-www-form-urlencoded 이나 multipart/form-data 로 설정해주어야 한다. @RequestBody 는 프론트에서 보낸 request 에서 body 를 파싱해서..
-
[Spring Boot] CORS 문제프로그래밍 2023. 5. 21. 19:41
팀 프로젝트 개발을 하던 도중에 CORS 문제가 발생하였다. 이번 팀 프로젝트에서 프론트 서버와 백엔드 서버를 나눠서 개발하기로 했는데, 두 개를 한 컴퓨터에서 포트를 바꿔 동시에 실행하고 데이터 송수신을 테스트하던 도중에 문제가 발생했다. 이유는 localhost더라도 포트가 다르기 때문에 origin이 달라 오류가 발생한 것이다. 이를 해결하기 위해서는 백엔드 서버에서 수신할 origin을 설정해주면 간단하게 해결된다. @RequiredArgsConstructor @RestController public class LoginApiController { private final LoginService loginService; @CrossOrigin(origins = "http://localhost:80..
-
백준 - 게리맨더링 2 (17779) [C++]문제 풀이/백준 2023. 3. 27. 10:42
이 문제는 브루트 포스, 시뮬레이션 문제이다. 이 문제는 좌표를 잘 보고 구역을 잘 나누는 것이 중요하다. 또한 처음에는 경계선의 가능 여부를 재귀를 통해 만들었는데, 이는 시간 초과가 발생한다. 그래서 d1과 d2의 범위를 찾아내고, 그 안에서 y와 x를 루프를 돌아 경계선을 만들면 시간 초과가 발생하지 않는다. #include #include #include #include using namespace std; #define MAX 30 typedef struct _node { int y; int x; int d1; int d2; } node; int n; int people[30][30]; vector divs; void divideSection(int y, int x, int d1, int d2)..
-
백준 - 낚시왕 (17143) [C++]문제 풀이/백준 2023. 3. 26. 20:34
이 문제는 시뮬레이션 문제로 주어진 순서에 맞춰 구현하면 되지만, 구현이 매우 어렵다. 이 문제에서 가장 어려운 부분은 상어가 움직이는 것인데, 한 상어가 움직인 후 바로 맵에 저장하면 다음 상어가 움직임에서 잘못된 결과가 나오게 된다. 그러므로 모든 상어의 다음 좌표를 따로 저장해둔 뒤, 그 배열을 순회하면서 상어를 맵에 올려놓는 방식으로 구현하면 정답이 나오게 된다. 맵의 경우 구조체로 상어를 만든 뒤, 그 구조체의 2차원 배열로 구현했다. #include #include using namespace std; #define MAX 100 #define UP 1 #define DOWN 2 #define RIGHT 3 #define LEFT 4 typedef struct _shark { int y; in..
-
백준 - 톱니바퀴 (14891) [C++]문제 풀이/백준 2023. 3. 26. 19:13
이 문제는 시뮬레이션 문제로 주어진 요구사항을 그대로 구현하면 시간 초과 없이 해결할 수 있는 문제이다. 톱니바퀴를 돌리는 구현에 있어서 덱을 사용하여 문제를 해결했다. #include #include #include #include using namespace std; deque gear[4]; #define CLOCK 1 #define COUNTERCLOCK -1 #define N 0 #define S 1 int leftSide(int gearNum) { int temp1 = gear[gearNum].back(); gear[gearNum].pop_back(); int temp2 = gear[gearNum].back(); gear[gearNum].push_back(temp1); return temp2;..
-
백준 - 2048 (Easy) (12100) [C++]문제 풀이/백준 2023. 3. 25. 23:53
이 문제는 완전 탐색으로 푸는 시뮬레이션 문제이다. 이 문제를 처음 접했을 때는 막막했는데, 한 단계씩 천천히 구현해보니 꽤 쉬운 문제였다. 상하좌우로 움직였을 때 로직을 생각해내는 것이 핵심인데, 나는 이를 큐를 이용해서 구현했다. 또한 전역 배열로 board를 구현하지 않고 이차원 벡터를 매개변수로 주고, 바뀐 벡터를 리턴하는 방식으로 하여 더 쉽게 구현할 수 있었다. #include #include #include #include using namespace std; #define MAX 20 int n; int answer = -1; vector up(vector& board) { vector result(n, vector(n, 0)); for (int x = 0; x < n; x++) { que..
-
백준 - 뱀 (3190) [C++]문제 풀이/백준 2023. 3. 25. 21:35
이 문제는 덱을 이용한 시뮬레이션 문제이다. 덱을 이용하여 뱀을 표현하는 생각을 하는 것이 핵심이다. 처음에는 매 초마다 덱을 순회하여 보드에 표시했다가 초가 끝나면 다시 지우는 방식을 생각했으나, 사과의 유무에 상관없이 덱의 front에 추가 하면 되고, 사과가 없으면 덱의 back 부분을 pop 해주면 굳이 썼다 지웠다 할 필요가 없었다. 어려운 구현 문제는 단계를 나눠서 차근차근 풀어나가야 해결할 수 있는 것 같다. #include #include #include using namespace std; #define MAX 100 #define RIGHT 1 #define LEFT 2 #define UP 3 #define DOWN 4 int n, k, l; int board[MAX][MAX]; deq..
-
백준 - 미세먼지 안녕! (17144) [C++]문제 풀이/백준 2023. 3. 25. 16:12
이 문제는 시뮬레이션 문제로 주어진 순서에 따라 그대로 구현하면 된다. 한 가지 주의할 점은 미세먼지가 동시에 확산되기 때문에 확산되기 전의 미세먼지 양을 미리 알아두고 그 상태로 확산을 진행해야 정확한 값이 나온다는 것이다. #include #include #include #include using namespace std; #define MAX 50 typedef struct _node { int y; int x; int d; } node; int room[MAX + 1][MAX + 1]; int r, c, t; int dy[] = { -1, 0, 1, 0 }; int dx[] = { 0, -1, 0, 1 }; vector cleaner; bool inRange(int y, int x) { if (1..