요즘 프로젝트 리팩토링을 하면서, DTO에 작성하는 여러개의 lombok 어노테이션의 사용 이유를 정확히 알지 못하고 사용하는 것 같아서 하나하나 고찰(?) 해보기로 했다. 일단, DTO는 Data Transfer Object로, REST API 작성 시에 엔티티 대신에 DTO를 사용하여 컨트롤러에서 데이터를 주고받는 용도로 사용한다. DTO를 사용하면 엔티티에 변질을 막을 수 있고, 로직에 맞춰 필요한 필드만 주고받을 수 있어 DTO를 사용하는 것이 좋다. 컨트롤러에서 DTO를 주고받기 때문에 JSON 직렬화와 역직렬화가 일어난다. - 직렬화(serialization) : Java Object 가 JSON으로 변환되는 것으로, ResponseBody를 사용할 때 일어난다. (서버 -> 클라이언트) - ..
예전 프로젝트 리팩토링을 진행하다가 문득 궁금한 것들이 생겼다. JPA를 사용하면서 Entity, DTO 클래스에 꼭 여러가지 lombok 어노테이션을 달아왔었다. 예를 들어, @Builder, @NoArgsConstructor, @AllArgsConstructor, @Getter 등... 그런데 어느 순간부터 이 어노테이션이 왜 필요한지 어떻게 쓰이는지를 잊고 습관적으로 갖다 붙이고 있는 것 같았다. 알아도 정확히 알고 있는 듯한 느낌이 아니었다. 그래서 이에 대해 많이 검색해보고 알아보았다. 일단 Entity 클래스에는 @Entity 를 붙여야한다. 난 항상 이렇게 달아왔다. @Entity @Builder @AllArgsConstructor @NoArgsConstructor(access = Acces..
이 문제는 좀 문제(?)가 있는 문제라고도 할 수 있다. 시간복잡도적으로 더 효율적인 코드를 알게 되어서 그 내용을 정리해보려고한다. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/92343 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 내 풀이 일단, 재귀 + 백트래킹으로 풀 수 있는 문제다. 그렇게 풀어도 통과할 수 있다. 나 또한 그렇게 풀었다. class Solution { int answer = 0; public int solution(int[] info, int[][] edges) ..
해커랭크에 있는 Lily's Homework 문제에 대해 정리해보려고한다. 어떤 알고리즘을 써야 적합한지에 대해서는 생각해냈지만, 구현방식을 생각해내지 못해 몇개의 테스트케이스에서 시간초과가 났다. 해결 과정 먼저, 문제를 읽고 도출해야하는 것이 크게 두가지라고 생각한다. 1. "인접한 인덱스의 원소의 차가 가장 작게 만들어야한다" -> 오름차순이나 내림차순으로 정렬이 되어야한다는 말이다. 2. "두 인덱스를 최소 횟수로 swap하여 1번 상태를 만들어야한다." -> 정렬 방법 중에 선택 정렬을 한다. 그런데, 선택 정렬은 시간복잡도가 O(N^2)이다. 기준 인덱스를 모두 도는 것이 (N) * 나머지 인덱스 중에 가장 작거나 큰 값 찾기 (N-1) 이 문제의 N의 최대값은 10^5이기 때문에 시간초과가 ..
주소 바인딩 논리적 주소 = 가상 주소 : 프로세스의 주소공간 가상 메모리 : 메모리 관리 기법. 컴퓨터가 실제 이용가능한 메모리자원을 추상화하여 매우 큰 메모리로 보이게 만드는것 물리적 주소 : 물리적 메모리에 실제로 올라가는 위치 cpu가 기계어를 수행하기 위해 논리적(가상) 주소를 통해 물리적 메모리의 어느 위치에 있는 지 확인해야함. 이렇게 논리적 주소를 물리적 주소로 연결해주는 작업을 주소바인딩이라고함. 1) 컴파일 타임 바인딩 : 프로그램을 컴파일 할 때 물리적 메모리 주소가 결정되는 방식 물리적 메모리가 컴파일 시 알려짐 시작 위치 변경 시 재컴파일 절대주소로 적재된다는 뜻에서 절대코드를 생성하는 바인딩 방식 비현실적이고 현대의 시분할 컴퓨팅 환경에선 잘 사용안함 2) 로드 타임 바인딩 : ..
문제를 읽어봤을 때 대충 풀어봤던 백준 문제 중에 '치즈' 라는 문제와 비슷해보여서 쉬울 줄 알았다. 백조가 만나야한다는 요소만 추가된 문제인줄 알았다. 그렇지만 플레5인 이유가 있었다..! '치즈'에서 풀었던 방식으로 똑같이 풀으려했더니 시간초과가 났다. 그래서 다른사람들의 풀이를 참고하여서 다시 풀어보았다. https://www.acmicpc.net/problem/3197 3197번: 백조의 호수 입력의 첫째 줄에는 R과 C가 주어진다. 단, 1 ≤ R, C ≤ 1500. 다음 R개의 줄에는 각각 길이 C의 문자열이 하나씩 주어진다. '.'은 물 공간, 'X'는 빙판 공간, 'L'은 백조가 있는 공간으로 나타낸다. www.acmicpc.net 문제 더보기 문제 두 마리의 백조가 호수에서 살고 있었다...
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bEZNmP/btrWeXMXX3i/KUjxBg87IDsMj1ede3oIbK/img.png)
그리디 문제다. 내가 푼 방법은 테스트케이스 17번 딱 하나가 시간초과로 절대 풀리지 않았다. 그러던 중 질문하기 탭에서 엄청난 풀이를 발견했다. !!! 그래서 그 풀이를 정리해보려고 한다. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/150369 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 더보기 당신은 일렬로 나열된 n개의 집에 택배를 배달하려 합니다. 배달할 물건은 모두 크기가 같은 재활용 택배 상자에 담아 배달하며, 배달을 다니면서 빈 재활용 택배 상자들을 수거하려 합니다..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/c5nJb6/btrVewXm8XI/rFMGDL8OkfbNa3754ebDlk/img.png)
벌써 2022년 한해가 지나갔다... 시간이 왜이렇게 빠를까 ㅠㅠㅠㅠㅠㅠㅠ 개발자들의 1년 회고글을 보면서 동기부여되는 점도 많았고 느끼는 것도 많았었다. 이번 1년은 의미있는 일이 많았고 나름(?) 열심히 지냈기에 정리해보며 1년을 마무리해보려한다. 1. SSAFY(삼성 청년 SW 아카데미) 1) 입학 🥳 1월 초부터 시작했던 싸피.. 코로나 때문에 온라인으로 시작했었다. 집으로 배송되었던 웰컴키트.. 받은게 엊그제 같다 ㅎㅎ 운 좋게도 입학식 인터뷰 대상자가 되어서 서울캠퍼스 가서 촬영도 하고 왔었다. 좋은 경험이 될 것 같아 갔다왔지만,,, 영상에서 얼굴이 너무 못나와서 후회했다는,,,,😂 2) 1학기 교육과정 📒 1학기는 전면 온라인으로 진행되었다. 집순이인 나는 온라인 교육이 너무 편했다! 1학..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/7UIgw/btrTPUzvdu5/GM6lfyyVVtECv2zuqVkEV1/img.png)
코딩테스트에서 풀었던 문제다. 물론 100점을 맞지는 못했던 문제라서 내가 풀었던 풀이를 다시 살펴보고, 문제를 다시 풀어보았다. 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2022 테크 여름인턴십 코딩테스트 해설 2022년 카카오 여름 인턴십 코딩 테스트가 지난 5월 7일에 5시간에 걸쳐 진행되었습니다. 시간이 부족하여 문제를 풀지 못하는 아쉬움이 없도록 1시간을 늘려 테스트를 진행한 것이 작년과 조금 tech.kakao.com 문제 설명 더보기 XX산은 n개의 지점으로 이루어져 있습니다. 각 지점은 1부터 n까지 번호가 붙어있으며, 출입구, 쉼터,..
요즘은 이분탐색 문제를 풀고 있다. 이분탐색은 코드를 짜는것 자체는 어렵지 않지만, 어떤식으로 어떤 값을 탐색해나가야할지를 알아내는 것이 어렵다. 보통, 1억개 연산에 시간이 1초가 걸리기 때문에 이를 고려하여 시간초과가 날 것 같으면 이분탐색을 해야한다. 이 문제 역시, 어떤값을 이분탐색해야할지를 찾지 못해서 다른 사람의 풀이를 참고하였다. https://www.acmicpc.net/problem/1939 1939번: 중량제한 첫째 줄에 N, M(1 ≤ M ≤ 100,000)이 주어진다. 다음 M개의 줄에는 다리에 대한 정보를 나타내는 세 정수 A, B(1 ≤ A, B ≤ N), C(1 ≤ C ≤ 1,000,000,000)가 주어진다. 이는 A번 섬과 B번 섬 사이에 중량제한이 www.acmicpc.n..