[BFS 기본 사용] 그래프 탐색, 가중치 없는 최단거리 문제
·
📁 Develop/Coding test
그래프 완전탐색 기법에는 대표적으로 BFS, DFS가 있다. BFS는 현재 정점과 가까운 노드들을 먼저 모두 확인한 뒤, 그다음 거리의 노드로 넘어가면서 탐색하는 방식이다. 코테에서 BFS를 사용할 수 있는 상황, BFS의 필수 구성요소 및 BFS 기본 골격(코드)을 정리해본다! # BFS는 언제 사용할까? 1. 그래프의 모든 노드를 탐색해야 하는 경우그래프의 특정 정점에서 시작하여 연결된 모든 정점을 방문해야 하는 경우 BFS를 사용할 수 있다.예를 들어 그래프의 연결 요소 개수를 구하는 문제, 특정 정점에서 도달 가능한 정점들을 찾는 문제, 그래프 전체를 탐색하는 문제 등 그래프의 모든 노드를 탐색한다? 바로 BFS를 의심하자.특히, 바이러스 전파 / 불이 번지는 문제 / 토마토가 익는 문제.....
[ArrayDeque 메서드 총정리] 메서드별로 어디에 넣고 어디에서 뺄까? (first / last 기준)
·
📁 Develop/Coding test
코딩테스트 문제를 풀 때 나는 Stack으로도, Queue의 구현체로도, ArrayDeque을 가장 자주 사용한다. ArrayDeque은 Deque 인터페이스를 구현한 대표적인 구현체 중 하나이다. 내부적으로 배열 기반으로 동작하며, 앞(first)과 뒤 (last) 양쪽에서의 삽입, 삭제가 가능하다는 점이 핵심이다. 값을 넣고 빼는 위치가 한쪽으로 고정된 Stack이나, 뒤에서만 값을 넣고, 앞에서만 값을 빼는 것이 명확한 Queue와 달리, Deque은 메서드에 따라 값이 추가되거나 제거되는 위치가 달라진다. 그래서 메서드를 사용할 때마다 어디에 추가되고, 어디에서 제거되는지를 명확히 이해하고 있어야 했다. 따라서 이 글에서는 Deque(ArrayDeque)을 사용할 때 각 메서드가 어느 쪽(fir..
2편) 서비스 형태 결정 (웹이냐 앱이냐...)
·
📁 Projects/자투리시간 문제풀이
우선 내 일상생활에서 자투리 시간은 크게 아래 세가지로 나눌 수 있었다.화장실 큰 일 볼 때 (하루 평균 1시간)버스 기다리고, 타는 시간 (하루 평균 30분)일어난 직후, 자기 직전 (하루 평균 30분)이런 사용 환경을 생각했을 때, 구체적인 설계에 앞서 “앱이 맞을까, 웹이 맞을까?”라는 질문을 먼저 던지게 되었다.사실 휴대폰으로만 사용할 것을 생각하면 앱이 더 자연스러운 선택처럼 보이기도 했다. 홈화면에서 바로 접근할 수 있고, 모바일 UX가 사용자(나)경험이 훨씬 좋을 것 같았기 때문이다. 하지만 실제로 좀 더 고려해보니, 앱을 선택하기에는 몇 가지 현실적인 제약이 있었다. # 왜 앱이 아니라 '웹' 이었나?첫째, 우선 나 혼자 사용하는 서비스이다.이 프로젝트는 불특정 다수를 위한 서비스라기보다..
1편) 계기 & 문제 정의
·
📁 Projects/자투리시간 문제풀이
# 계기나는 사실 초등학생 때부터 큰일을 보면서 공부하는 습관이 있다..!엄마는 화장실에 있는 시간이 아깝다며 변기 앞에 책상으로 사용할 수 있는 검정의자 두 개를 놓으셨는데, 이때부터 20대 중반인 지금까지 나는 화장실에서 도합, 하루평균 1시간을 보내게 되었다.. (정말이다)그런데.. 대학에 들어오면서부터는, 그동안 나름 의미 있게 쓰고 있다고 생각했던 화장실 시간이 어느순간 유튜브 쇼츠를 멍하니 넘기는 시간으로 바뀌어 있었다.그 시간이 너무 아까웠다. 이외에도 버스타는 시간이나, 자투리 시간에 계속 공부를 할 수 있도록 간단한 시스템을 만들고 싶었다. 내가 설정한 취업준비 기간인 1년동안 하루 평균 1시간씩만 구해낼 수 있다면, 총 365시간, 즉 한 달 풀타임 학습에 가까운 시간이 된다.이 시간을..
Spring + Swagger, API 문서 작성을 위한 모든 어노테이션 총정리 (SpringDoc OpenAPI 3 기준)
·
📁 Develop/Spring
Spring + Swagger 기반 API 문서를 작성할 때 사용하는 주요 어노테이션을 정리해보겠다!기본 구성Spring에서 Swagger(OpenAPI) 문서를 만들기 위해 가장 많이 사용하는 라이브러리는 다음과 같다.Springfox (Swagger 2) → 구버전, 유지보수 중단SpringDoc OpenAPI 3 → 최신 표준 (OpenAPI 3 기반)이 포스트는 SpringDoc OpenAPI 3 기준으로 어노테이션 총정리를 해보겠다!1. Controller / API 설명 관련 어노테이션어노테이션용도@OpenAPIDefinitionAPI 전체 설명 (API 이름, 버전, 기본 정보 등)@Operation개별 API의 설명, 요약, 응답 등@Tag컨트롤러 단위 태그 지정 (API 분류)@Param..
@JsonProperty란?
·
📁 Develop/Spring
@JsonProperty@JsonProperty는 자바 객체의 필드 이름과 JSON 키를 매핑할 수 있도록, 직렬화/역직렬화 시 JSON 키 이름을 지정해주는 어노테이션이다. 에를 들어, public class UserRequestDTO { @JsonProperty("user_id") private Long userId; @JsonProperty("user_name") private String userName; private int age; // @JsonProperty 없으면 그대로 camelCase 사용됨}이런식으로 @JsonProperty 를 몇몇 필드에 붙여서 requestDTO 를 구성했다고 해보자. 이렇게 되면 json 요청 바디는 아래와 같이 @JsonProper..