본문 바로가기

반응형

전체 글

(38)
[PG / SQL] 프로그래머스 SQL 고득점 Kit - SELECT 풀면서 계속 추가하는 중 1. 과일로 만든 아이스크림 고르기https://school.programmers.co.kr/learn/courses/30/lessons/133025 주문량, 주성분 데이터가 나뉘어짐 → 조인 필요, 필드명 동일하므로 USING 사용주문량, 주성분 타입 조건 필요 → WHERER주문량 순으로 내림차순 정렬 → ORDER BY DESCSELECT FLAVORFROM FIRST_HALF JOIN ICECREAM_INFOUSING (FLAVOR)WHERE TOTAL_ORDER > 3000 AND INGREDIENT_TYPE = 'fruit_based'ORDER BY TOTAL_ORDER DESC; 2. 평균 일일 대여 요금 구하기https://school.programmers.co...
[이펙티브 자바] 12. toString을 항상 재정의하라 모든 구체 클래스에서 toString을 재정의하자 toString 메서드는 객체를 문자열로 변환하는 메서드이다. toString 메서드를 호출하지 않아도, println, printf, 문자열 연결 (+), assert 구문 등에서 자동으로 호출될 수 있다.따라서 객체의 내용을 보기를 원하거나, 원하는 포맷이 있는 경우 반드시 재정의해야한다. 기본 toString을 사용하는 경우 클래스명@주소값 형태로 출력된다.public class Person { String name; int age;}System.out.println(new Person()); // Person@1234 디버깅용 로그를 찍거나 할 때 System.out.println(객체) 이런식으로 많이 호출하기 때문에 toStrin..
[이펙티브 자바] 11. equals를 재정의하려거든 hashCode도 재정의하라 equals를 재정의한 클래스 모두에서 hashCode도 재정의해야한다.재정의하지 않으면 hashCode 일반 규약을 어겨, HashMap, HashSet과 같은 컬렉션 원소로 사용할 때 문제가 생긴다. ⭐️ 논리적으로 같은 객체는 같은 해시코드를 반환해야한다. hashCode를 재정의하지 않은 예시HashMap에 저장할 때 사용된 인스턴스, 조회할 때 사용된 인스턴스가 2개 사용되었다.둘은 논리적으로 같지만, 물리적으로 다르기 때문에 다른 해시 코드를 리턴하게 된다.Map m = new HashMap();m.put(new PhoneNumber(707, 867, 5309), "제니");System.out.println(m.get(new PhoneNumber(707, 867, 5309)); // nul..
[이펙티브 자바] 10. equals는 일반 규약을 지켜 재정의하라 꼭 필요한 경우가 아니라면 equals를 재정의하지 말자, 재정의해야할 때는 5가지 규약을 확실히 지키자. equals를 재정의하지 않아야하는 상황equals는 재정의할 때 주의해야하는 메서드 중 하나다. 아래와 같은 상황에서는 재정의하지 않는 것이 좋다. 1. 각 인스턴스가 본질적으로 고유할 때Thread 등 값이 아니라 동작하는 개체를 표현하는 클래스에서 비교할 때, 기본 equals가 아주 적합하므로 재정의할 필요가 없다. 2. 인스턴스의 논리적 동치성을 검사할 일이 없을 때java.util.regex.Pattern에서 equals 를 재정의해서, 두 정규표현식이 같은지 검사할 수 있다.하지만 클라이언트가 이 방식을 원하지 않거나 필요없을 때는 굳이 equals를 재정의하지 말자. 3. 상위 클래스..
[BOJ / C++] 1240 노드사이의 거리 https://www.acmicpc.net/problem/1240 문제 N개의 노드로 이루어진 트리가 주어지고 M개의 두 노드 쌍을 입력받을 때 두 노드 사이의 거리를 출력하라.입력 첫째 줄에 노드의 개수 N과 거리를 알고 싶은 노드 쌍의 개수 M이 입력되고 다음 N−1개의 줄에 트리 상에 연결된 두 점과 거리를 입력받는다. 그 다음 줄에는 거리를 알고 싶은 M개의 노드 쌍이 한 줄에 한 쌍씩 입력된다.출력 M개의 줄에 차례대로 입력받은 두 노드 사이의 거리를 출력한다.제한 2≤N≤1000, 2≤N≤1000 1≤M≤1000, 1≤M≤1000트리 상에 연결된 두 점과 거리는 10000 이하인 자연수이다.트리 노드의 번호는 1부터 N까지 자연수이며, 두 노드가 같은 번호를 갖는 경우는 없다.풀이트리이므로, ..
[BOJ / C++] 백준 1253 좋다 문제https://www.acmicpc.net/problem/1253 N개의 수 중에서 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있다면 그 수를 “좋다(GOOD)”고 한다.N개의 수가 주어지면 그 중에서 좋은 수의 개수는 몇 개인지 출력하라.수의 위치가 다르면 값이 같아도 다른 수이다.입력첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수) 출력좋은 수의 개수를 첫 번째 줄에 출력한다. 풀이처음에는 두 수를 뽑아서 더한 값을 set에 전부 넣어두고 브루트포스를 시도했다.하지만 O(N^2 * logN (set 검색))의 시간 복잡도 때문인지 시간 초과가 떴고, 투포인터를 사용해서 풀기..
[PG / C++] 프로그래머스 단어 변환 문제https://school.programmers.co.kr/learn/courses/30/lessons/43163 풀이1. 백트래킹을 이용한 풀이target 단어가 words에 포함되어 있지 않으면 종료 (set에 저장해서 find로 찾기)백트래킹을 사용해서 begin > target까지의 단어 변환 모든 과정 찾기⭐️ 이때 변환 횟수가 최솟값이 아니면 종료해서 탐색 과정 줄이기최소 변환 과정이므로, 이미 한 번 사용한 단어는 재사용하지 않음 (visited[idx]로 처리)checkValid 함수로 알파벳 한 개 이상 차이가 나는 단어인지 확인 (변환 조건 충족 여부 확인)#include #include #include #include using namespace std;int answer = 54..
[BOJ / C++] 백준 2110 공유기 설치 https://www.acmicpc.net/problem/2110 문제도현이의 집 N개가 수직선 위에 있다. 각각의 집의 좌표는 x1, ..., xN이고, 집 여러개가 같은 좌표를 가지는 일은 없다.도현이는 언제 어디서나 와이파이를 즐기기 위해서 집에 공유기 C개를 설치하려고 한다. 최대한 많은 곳에서 와이파이를 사용하려고 하기 때문에, 한 집에는 공유기를 하나만 설치할 수 있고, 가장 인접한 두 공유기 사이의 거리를 가능한 크게 하여 설치하려고 한다.C개의 공유기를 N개의 집에 적당히 설치해서, 가장 인접한 두 공유기 사이의 거리를 최대로 하는 프로그램을 작성하시오.입력첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 ..

반응형