일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- HashSet
- ac 5430번
- StringTokenizer
- 백준 2473번 세 용액 - java
- kotlin
- HashMap
- dp
- mysql hy000 에러
- 프로그래머스 자바
- 백준 14938번 서강그라운드
- Stack
- append
- 백준 1647번 도시 분할 계획 - java
- 18111번 마인크래프트 - java 구현
- hash
- 프로그래머스 java
- replace()
- StringBuilder
- 백준 1806번 부분합 java
- 프로그래머스
- 백준 2467번 용액 자바 - 이분탐색
- toUpperCase
- map
- 코틀린기초
- 백준 1197번 최소 스패닝 트리 - java
- 백준 1541
- 백준 1043번 거짓말 - java 분리 집합
- Java
- 최소 힙 1927
- 백준 3190번
- Today
- Total
목록백엔드 (11)
말하는 컴공감자의 텃밭
정점과 가중치가 존재하는 간선이 주어진 상태에서 우리는 모든 정점을 가장 적은 비용으로 연결한 그래프를 최소 신장 트리라고 말한다. MST(Minimum Spanning Tree) 라고 말하며 이러한 문제에서 사용되는 알고리즘이 바로 프림과 크루스칼 알고리즘이다. 같은 목적을 지니고 있지만 접근방식이 조금 다른데 유념해서 알아보자 프림 알고리즘한 정점에서 시작해서 연결된 간선들 중 가장 가중치가 낮은 간선을 선택하며 트리를 확장하는 방식이다.시작점에서 점진적으로 최소 스패닝 트리를 완성해 나가는 그리디한 방식인데 순서는 다음과 같다. 초기화:임의의 정점을 선택해 시작한다.선택한 정점을 기준으로 연결된 간선 중 가중치가 가장 작은 간선을 선택한다.트리 확장:선택된 간선에 연결된 정점을 트리에 추가한다.이..
우리는 문제를 풀면서 알고리즘 문제가 어떤 유형의 문제인지 판단해야한다.그 중 한가지 팁인데 시간제한을 보는것이다. 인풋에 대한 적절한 시간 복잡도N의 범위가 500: 시간 복잡도 O(N^3) 이하N의 범위가 2,000: 시간 복잡도 O(N^2) 이하N의 범위가 100,000: 시간 복잡도 O(N log N) 이하N의 범위가 10,000,000: 시간 복잡도 O(N) 이하N의 범위가 10,000,000,000: 시간 복잡도 O(log N) 이하 N의 범위가 500 : 시간 복잡도: O(N^3) 이하500^3 = 125,000,000 예시 알고리즘: 플로이드-워셜, 3중 for 문을 사용하는 알고리즘N의 범위가 2,000 : 시간 복잡도: O(N^2) 이하2,000^2 = 4,000,000 예시 알고리즘:..
1. Optional이란 무엇인가? Optional은 Java 8에서 추가된 클래스다.이 클래스는 null이 들어올 수 있는 값을 감싸는 컨테이너 역할을 한다.Optional을 사용하면 null 값을 직접 다루지 않고도 null 처리를 할 수 있다. 예를 들어, 다음과 같은 JPA 메서드에서 Optional을 사용할 수 있다. Optional findByMemberAndStudy(Member member, Study study); 현재 개발중인 프로젝트에서 Jpa 메서드를 작성할때도 사용했었다. 2. 왜 Optional을 사용하는가?2.1 NullPointerException 방지 일명 "NPE"Optional을 사용하면 null 값을 직접 다루지 않기 때문에 NullPointerException을 방지..
스프링 프레임워크에서 포인트컷(Pointcut)은 매우 중요한 개념 중 하나인데 난 몰랐다. 예에나는 처음 들어봤다 껄껄 먼저 포인트컷이 뭔지 왜 쓰는지. 이해를 하고, 사용법을 살펴보자포인트컷이 뭔데?포인트컷은 특정 메서드 호출 또는 특정 시점의 실행 지점을 지정하는 규칙이라고 말할 수 있다.포인트 컷을 사용하면 애플리케이션의 특정 부분에 부가 기능을 적용할 수 있다. 포인트컷은 주로 정규 표현식을 사용하여 메서드 이름, 파라미터, 반환 타입 등을 지정할 수 있다.그럼 왜 사용하지?포인트컷을 사용하는 이유 1. 포인트컷을 통해 핵심 기능과 부가 기능을 분리할 수 있다. 우리는 스프링으로 개발할때 AOP가 중요하다. 업데이트 할때마다 고쳐야 할 부분이 여러곳이라면 얼마나 번거로워요...AOP는 관점 지향..
로깅 라이브러리를 사용해 로그를 출력해보자. 스프링 부트에서는 기본적으로 아래 라이브러리를 사용한다. SLF4J - http://www.slf4j.org Logback - http://logback.qos.ch 오늘은 SLF4J 를 사용해봅시도 @RestController로 View를 반환하지 않고 바로 메세지 바디에 String을 넣어주게 사용한다. HTML 삽입 미리보기할 수 없는 소스 application.properties 에 아래 코드를 추가하면 콘솔창 색이 구분되어진다. spring.output.ansi.enabled=always 로그 범위 ? -> 로그가 출력되는 포멧 확인 시간, 로그 레벨, 프로세스 ID, 쓰레드 명, 클래스명, 로그 메시지 Level 단계 TRACE > DEBUG > I..
Clone 인스턴스가 스스로를 복사하기 위해 사용. Cloneable 인터페이스 구현 권장. 깊은 복사는 직접 오버라이드하여 구현해야 함. 👀 얕은 복사와 깊은 복사가 존재하는데 간단하게 설명 후 예시를 통해 코드로 확인해보자. 얕은 복사는 객체의 필드 값을 새 객체로 복사하는 과정에서, 기본 타입의 필드는 그 값이 직접 복사되지만, 참조 타입의 필드는 메모리 주소(참조)만 복사된다. 이는 참조 타입의 필드가 가리키는 객체는 복사되지 않고, 원본 객체와 복사된 객체가 같은 객체를 참조하게 된다. 결과적으로, 얕은 복사를 통해 생성된 객체에서 참조 타입의 필드를 수정하면, 그 변경사항이 원본 객체에도 영향을 미친다. 두 객체가 동일한 참조 타입의 인스턴스를 공유하기 때문이다. 깊은 복사는 객체를 복사할 때..
오버로딩 동일한 이름에 매개 변수만 다른 여러 함수를 만드는 것을 함수의 오버로딩이라고 한다. 바로 예제로 정리해보자 예제 1 add 라는 이름의 함수에 하나는 string, 하나는 number이다. function add(a: any, b: any): any 를 통해 오버라이딩 해보자. function add(a: string, b: string): string; function add(a: number, b: number): number; function add(a: any, b: any): any { return a + b; } add("hello", "world"); add(1, 1); 만약 오버로딩되지 않은 값을 넣는다면? 예제 2 날짜를 만드는 Date 객체를 만드는 두가지를 오버로딩 하려한다..
호출 시그니처 호출 시그니처란 함수의 매개변수와 반환 값의 타입을 모두 type으로 미리 선언하는 것이다. 장점은 아래와 같다. 오버로딩: TypeScript는 메서드 오버로딩을 지원하므로 각각 다른 매개 변수 유형을 사용하여 단일 함수에 대해 여러 호출 서명을 정의할 수 있다. 이를 통해 함수는 다양한 유형의 입력을 처리할 수 있어 함수 사용 방법에 유연성을 제공한다. 인터페이스 구현: 인터페이스를 사용하여 TypeScript에서 호출 시그니처를 정의하면 코드 전체에 특정 함수 형태를 적용할 수 있는 방법이다. 구조화되고 재사용 가능하며, 유연한 방법이 제공되어 유형 안전성, 가독성 및 유지 관리성이 향상된다. 또한 객체 지향 디자인 원칙에 잘 맞으며 외부 코드를 사용하여 테스트하고 작업하는 것이 보다..
타입 스크립트의 추가 제공 타입이 존재한다. 기존에 number, boolean, string, null 등등 익숙한 명칭의 타입은 알고있었으나 Tuple, Enum, Any, Void, Never, Union 같은 특수한 타입이 있어 정리한다. Tuple : 명시된 타입만 사용가능한 타입. 배열을 보다 특수한 형태로 사용할 수 있게해주고, 아이템 순서를 정해 명시된 타입만 사용 가능하게 한다. var empId: number = 1; var empName: string = "Steve"; // 튜플 타입의 변수 선언 var employee: [number, string] = [1, "Steve"]; var person: [number, string, boolean] = [1, "Steve", true]..
BufferedReader, StringTokenizer, BufferedWriter 코테 준비하면서 자바 기본 I/O인 Scanner 만 사용했었다. 스캐너는 데이터 유형을 유연하게 선택할 수 있지만 속도가 느리다는 단점이 존재했다. 메모리와 속도적으로 알고리즘 문제 풀이에서 제한이 생기는 경우가 존재해서 방식을 바꾸려고한다. 백준 입력 속도 비교 https://www.acmicpc.net/blog/view/56 첫째 줄에 정수의 개수 N (= 10,000,000), 둘째 줄부터 N개의 줄에 한 개의 자연수(10,000 이하)가 적힌 파일을 입력받는데 걸리는 시간을 측정. 10번 측정해서 평균값으로 순위를 매김 버퍼 크기 실행 속도(백준 참고) BufferedReader 8KB 0.6585 sec Sc..