전체 글

공부를 야무지게 해보겠습니다!! (알고리즘, 자료구조 문제 풀이 학습 및 기록)
· Spring
📌 @Controller와 @RestController의 역할 스프링 환경에서 Controller를 구현해보자. Controller를 구현하기 위해서는 클래스에 @Controller와 @RestController을 붙여 줘야 한다. 두 컨트롤러는 요청이 들어오면 URL, HTTP Method에 맞게 메서들를 실행시켜 주는 역할을 수행한다. 두 어노테이션의 차이점을 보기 위해 어노테이션을 뜯어(?) 보았다. @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Controller { @AliasFor(annotation = Component.class) String value(..
· Spring
📌 레이어드 아키텍처 프로젝트를 패키지별로 구성할 때 Client -> Controller -> Service -> Repository -> DB 방식으로 구조화할 수 있다. 각각을 계층별로 분리했다고 하여 레이어드 아키텍처라고 불린다. 이렇게 계층별로 나눈 구조를 사용하는 이유는, 각각의 계층별로 핵식점인 역할을 담당하도록 해서, 자신이 담당한 역할에 집중할 수 있도록 하기 위함이다. 그렇다면 클라이언트와 DB 사이의 3계층에서는 어떠한 기능과 역할을 수행하는지 알아보자. Controller 컨트롤러 계층에 있는 클래스들은 Client(사용자)의 요청을 받고 응답해주는 역할을 수행한다. 사용자가 "나 핸드폰을 구매하고 싶어"라고 요청을 보냈다면, 컨트롤러 계층은 서비스 계층에 구현되어 있는 '핸드폰 구..
· Spring
📌 DI란? 의존성 주입(Dependency Injection)은 외부에서 두 객체사이의 관계를 맺어준다는 의미이다. 이게 무엇이냐? // 필드 private Phone phone; // 생성자 public Person() { this.phone = new SamsungPhone(); } 위의 코드를 보면 Person클래스는 Phone타입의 필드를 가지고 있다. 이때 Person의 생성자에서 직접 new를 이용해 SamsungPhone()이라는 객체를 생성하고, 필드에 연결해주고 있다. 하지만 이렇게 하지 말고 아래처럼 외부에서(파라미터로) 전달받아 객체를 연결해 주는 것을 의존성 주입이라고 한다. // 필드 private Phone phone; // 생성자 public Person(Phone phone..
https://school.programmers.co.kr/learn/courses/30/lessons/172928# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 그래프 위에서 정해진 방향과 거리만큼 로봇을 움직이는 문제이다. 그래프 크기와 명령의 개수가 많지 않은 단순한 시뮬레이션 문제이다. dict(), dxs, dys 변수를 활용해서 동, 서, 남, 북으로의 다음 방향을 그래프 탐색한다. 1. 그래프 범위에서 나가는지 2. 중간에 X가 있어서 갈 수 없는지 에 대해서 조건문 처리만 해주면 쉽게 해결할 수 있다. 최종코드 def is_range(x..
https://school.programmers.co.kr/learn/courses/30/lessons/176963 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr dict()를 활용하여 {사람이름 : 그사람에 대한 추억점수}를 구한다. 각 사진을 순회하며 사진속에 있는 사람의 추억점수를 모두 더해준다. 단, dict()배열에 특정 사람이 없는 경우가 있을 수 있기 때문에 조건문을 활용해서 이름이 있는 경우에만 점수를 더해준다. (이름이 없으면 0점이기 때문에 더해주지 않아도 됨) 최종코드 # 산진별로 추억점수를 구한다. # 사진 속 인물의 그리움 점수를 ..
https://school.programmers.co.kr/learn/courses/30/lessons/178870 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 부분 수열의 합이 k인 부분수열의 구간을 구하여라. 길이가 더 짧고, 구간이 더 앞쪽에있는 정답을 찾자. sequence(≤ 1,000,000) 이므로 구간의 합을 1번의 for문을 통해 구해야 한다. 구간합을 O(N)에 구하기 위해 누적합을 구한다. 투포인터(p1, p2)를 활용해서 앞에서부터 k값에 해당하는 구간을 찾는다. 현재 구간합이 k보다 작으면 p2를 늘려주고, k보다 크다면 p1을 ..
https://school.programmers.co.kr/learn/courses/30/lessons/178871 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr dict() 테이블에 {이름 : 등수}의 형태로 데이터를 보관한다. 해설진이 부른 이름 callings를 순회하면서 등수가 바뀔 때마다 players배열에서 위치를 바꿔준다. 그리고 dict() 테이블의 이름과 등수도 새롭게 갱신해준다. 전체적으로 callings(≤ 1,000,000)를 한번만 순회하므로 시간복잡도는 O(N)이다. 최종코드 def solution(players, callings..
https://school.programmers.co.kr/learn/courses/30/lessons/181187 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 원점을 중점으로 가지는 두개의 원이 있을 때, 두개의 원 사이에 있는 정수 좌표 개수를 구해라! 접근1. 완전탐색 -> x O(n**2) 접근2. 1/4만 구하자 -> x 시간초과 접근3. 규칙을 찾아볼까? -> 실패 접근4 -> 큰 원안의 개수에서 작은 원안의 개수를 뺀다. 반지름값이 터무니 없이 컸기 때문에 사실 for문 한번에 해결할 수 있는 방법을 생각해 냈어야 했다. x**2 + y**2
· Spring
API와 REST API가 무엇일까? 이름은 비슷한 거 같은데 어떤 개념이고 어떻게 다르고 각각 어떠한 특징을 가지고 있는지 알아보자. 📌 API란? API는 Application Programming Interface의 약자로 이름에서 알 수 있듯이 두 개의 소프트웨어 프로그램 간에 인터페이스의 역할을 수행한다. 두 개의 프로그램은 정해진 통신 방법을 통해서 메시지를 주고받을 수 있다. 예를 들어 우리는 카카오지도라는 API를 통해서 특정 건물의 위치 정보를 알려달라고 카카오 지도 서버에 메시지를 보낼 수 있다. 반대로 카카오 지도 서버도 API를 통해 요청받은 건물의 위치정보에 대해서 우리에게 메시지를 보내줄 수 있다. 이렇게 서로에게 메세지를 보낼 수 있는 이유는 인터페이스라는 공통 규약이 존재하기..
문제 https://leetcode.com/problems/gas-station/?envType=study-plan-v2&envId=top-interview-150 더보기 Example 1: Input: gas = [1,2,3,4,5], cost = [3,4,5,1,2] Output: 3 Explanation: Start at station 3 (index 3) and fill up with 4 unit of gas. Your tank = 0 + 4 = 4 Travel to station 4. Your tank = 4 - 1 + 5 = 8 Travel to station 0. Your tank = 8 - 2 + 1 = 7 Travel to station 1. Your tank = 7 - 3 + 2 = 6..
Don't stop 훈
쉬지마 정지훈