일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 백준
- 베타적락
- 누적합
- 추천 검색 기능
- AWS
- 이분탐색
- 알람시스템
- 카카오
- langgraph
- 관측가능성
- 프로그래머스
- dau 3만명
- 결제서비스
- ipo 매매자동화
- docker
- BFS
- piplining
- 몽고 인덱스
- next-stock
- 디버깅
- 아키텍쳐 개선
- 구현
- gRPC
- 셀러리
- spring event
- 완전탐색
- 쿠키
- 크롤링
- ai agent
- JPA
- Today
- Total
목록개발 (138)
코딩관계론

객체지향이란객체지향 프로그래밍은 프로그램을 구성하는 기본 단위인 '객체'를 중심으로 하는 프로그래밍 패러다임입니다.객체는 데이터와 그 데이터를 처리하기 위한 메서드를 함께 묶은 것으로, 이러한 객체들은 메시지를 주고받고, 상호작용하여 프로그램의 기능을 수행합니다. 특징객체지향에는 아래의 기능들을 제공하여 코드를 구조화하고, 관리할 수 있으며, 유연하고 확장 가능한 소프트웨어를 개발할 수 있습니다.캡슐화 (Encapsulation): 객체는 데이터와 해당 데이터를 처리하는 메서드를 하나의 단위로 묶어서 외부로부터의 접근을 제한합니다. 이는 객체의 내부 상태를 숨기고, 외부에서의 직접적인 접근을 제한하여 데이터의 무결성과 보안을 보장합니다.상속 (Inheritance): 상속은 기존 클래스(부모 클래스)의 ..

문제 이해하기Get 요청으로 다음과 같은 URI가 있고, 쿼리 파람을 통해서 예약 상태를 조회하고자 한다. 이 때 주어지는 조건이 여러가지 있는데 모두를 만족시켜야 한다.@GetMapping("/api/reservation/search") 문제 해결 방법쿼리파람을 DTO 객체에 리플렉션하기쿼리파람을 DTO 객체에 리플렉션을 하려면 객체의 기본생성자가 존제해야 한다. 그 이유는 Spring이 기본 생성자를 사용하는 이유는 리플렉션을 통한 객체 생성의 필요성, 객체 상태 초기화의 유연성, 데이터 바인딩의 일관성을 유지하기 위해서입니다. 기본 생성자가 없으면 이러한 과정을 수행할 수 없기 때문에, DTO 클래스에는 반드시 기본 생성자가 필요합니다. 1. 객체 생성의 일관성기본 생성자를 통해 객체를 생성하면, ..

"Why do I need to override the equals and hashCode methods in Java?"를 검색하면, 다음과 같은 답변이 나옵니다: [StackOverflow: Why do I need to override the equals and hashCode methods in Java?](https://stackoverflow.com/questions/2265503/why-do-i-need-to-override-the-equals-and-hashcode-methods-in-java)You must override hashCode() in every class that overrides equals(). Failure to do so will result in a violatio..

문제 이해하기문제가 총 두가지가 있다. 하나는 json파일을 읽어 고객의 tag와 username을 오름차순으로 반환하는 것과 쿼리파라마으로 tag와 username이 주어지면 승률을 반환하는 형식이다. json파일로 고객의 정보가 아래의 형태로 나타난다. { "id": 1, "username": "wt7Py", "tag": "bOCv", "win": 617, "lose": 875 } 문제 해결 방법 설명하기1. 고객의 username과 tag로 정렬하는 방법내가 사용한 방법은 읽어온 json파일에서 tag와 username만 따로 저장한 후 해당 값들을 key로 잡아서 정렬하는 것이었다.@app.route("/api/gamerec..

문제 이해하기 선영이라는 친구가 새로운 함수를 만들었는데, 해당 함수는 "R"과 D로만 이루어져있다.R은 reverse고 d는 delete다. 즉 R을 만나면 배열을 뒤집어야 하고, D를 만나면 해당 배열에서 젤 처음 숫자를 삭제해야한다.문제 해결 방법 설명하기1. R을 만나면 배열을 역순으로 변경해야할까?그렇다 R을 만날 때 마다 매번 배열을 역순으로 변경한다면 시간초과가 나타난다. 따라서 우리는 배열이 뒤집어 졌다는 것을 기억하고, 실제로 연산은 수행하지 말아야 한다. for f in funcStr: if f == "R": direction = not direction 2. D를 만나면 배열에서 삭제를 진행해야 할까?D의 연산의 경우 실제로 수행해도 상관은 없다 ..

문제 이해하기조교들이 새로운 보안 시스템을 설치하기로 했습니다. 이 시스템은 알파벳 소문자로 이루어진 암호를 사용하며, 최소 한 개의 모음과 최소 두 개의 자음이 포함되어야 합니다. 또한 알파벳은 증가하는 순서로 배열되어야 합니다. 주어진 C개의 문자로 가능성 있는 암호를 구하는 프로그램을 작성해야 합니다. 문제 해결 방법 설명하기1. 모든 알파벳을 조합해야 합니다.아래의 코드를 사용하면 모든 조합을 구할 수 있습니다.def possible_passwords(length, num_chars, characters): results = [] combinations_list = list(combinations(characters, length)) 2. 조건검사만들어진 문자열 조합에서 모음과 자음의..

문제 이해하기주어진 쿼리가 있고, 그 중에 몇 개의 월드가 매칭되는지 찾는 문제였다.참고로 필자는 틀렸고, 어떤 접근 방법을 통해서 틀렸는지 설명하고 풀이법을 설명하겠다.틀린 문제 해결 접근 과정1. 경우의 수 검색하기문제의 경우의 수를 보면 주어진 word의 길이는 100,000이고 word[x]의 길이는 최대 10,000이 된다.따라서 word를 하나씩 분리하면 해결이 가능하지 않을까 싶었다. 왜냐하면 분리에 N*M의 경우의 수만 사용하면 됐기 때문이다예시f????fr???fro??frod?????o???do.....????? 그 후 분리된 값들을 아래와 같은 방식으로 캐시에 저장하고 쿼리 배열 탐색을 cache에 찾아서 꺼내는 방식이었다.cache['fr???] += 1하지만 효율성4, 5에서 시간..

문제 이해하기n이 주어지면 그 중에 올바른 괄호쌍이 몇 개 있을 수 있는지 찾는 문제였다.올바른 괄호쌍이란 ()()()와 같이 모두 닫친 괄호를 의미한다.문제 해결 방법 설명하기1.가지치기n이 28(14 * 2)이기 때문에 완전탐색은 제한시간 내에 풀 수 없다. 따라서 시간을 줄이기 위해서 DP를 선택하던가 탐색하지 않아도 실패하는 경우를 발견해서 탐색을 줄여야 한다. 필자는 가지치기를 선택했고, 그 조건에 탐색 시점에서 남은 '(' 의 개수가 남은 ')'의 개수보다 많다면 탐색을 멈추도록 했다. 왜냐하면 닫친 괄호가 더 적게 남았다면 '(())))" 다음과 같은 상황이기 때문이다. if left_bracket > right_bracket: return 0 2. 완전탐색또한 항상 남..

문제 이해하기이동하는 방향이 담긴 배열이 주어질 때, 방의 갯수를 return하는 문제였습니다. 문제 해결 방법 설명하기1. 닫친 방이란?닫친 방을 생각해본다면 이미 방문한 정점에 다시 한번 방문 했을 때 닫친 방이라고 생각할 수 있다.하지만 주의할 점은 다시 방문한 정점은 이전에 사용되지 않은 edge로 부터 진입해야 한다는 점이다. 2. 배열의 확장 배열의 확장은 왜 필요한가.4각형 배열이기 때문에 중간 정점은 생각하지 못하게 된다.따라서 배열의 확장을 통해 중간 정점을 표현할 수 있게 만들어줘야 닫친 방을 모두 찾을 수 있게 된다. 코드from collections import dequedef solution(arrows): answer = 0 visited = {} dir = {}..

문제 이해하기삼각형의 정보가 담긴 배열 triangle이 매개변수로 주어질 때, 거쳐간 숫자의 최댓값을 return 하도록 하시오. https://school.programmers.co.kr/learn/courses/30/lessons/43105 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제 해결 방법 설명하기1. 최대값을 찾는 방법최대값이 되는 경로를 찾기 위해서는 모든 가능한 경로를 탐색해야 합니다. 그러나 모든 경로를 매번 계산하려고 하면 제한된 시간 내에 문제를 해결할 수 없습니다. 따라서 이전에 저장한 정보를 활용하는 방법이 필요합니다. 제가 선..

문제 이해하기부분 펄스가 있는데 해당 부분 펄스를 적용하고 나서 가장 큰 합을 가지는 부분 수열의 값을 찾는 문제였다. https://school.programmers.co.kr/learn/courses/30/lessons/161988 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 해결 방법 설명하기 1. 가장 큰 부분 수열이 되려면?가장 큰 부분 수열을 찾기 위해서 크게 두 가지 방법이 있다. 하나는 이중 for문을 이용해서 가장 큰 값을 갖는 부분 수열을 찾을 수 있을 것이다. 하지만 sequence 배열의 길이를 보면 해당 방법은 불가능하다. 따라..

문제 이해하기케이크를 잘라서 토핑을 공평하게 나눌 수 있는 가짓수 방법을 찾는 문제였다. 문제 해결 방법 설명하기1. 케이크를 나누기 전 토핑의 가짓수를 계산합니다 for i in topping: if not i in topping_right.keys(): topping_right[i] = 1 else: topping_right[i] += 1 2.토핑을 하나씩 제거하면서 공평하게 나눠지는지를 계산합니다. for i in topping: if len(topping_left.keys()) == len(topping_right.keys()): answer += 1 if ..