일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코테
- 코드트리
- 트러블슈팅
- 완탐
- 자바
- JPA
- 알고리즘
- 알고리즘기본개념
- DP
- SWEA
- JUnit
- 완전탐색
- 다익스트라
- 백준
- 코딩테스트실력진단
- 기본유형
- 코딩테스트
- Java
- SSAFY
- 다시보기
- Spring
- database
- BFS
- 유니온파인드
- 그래프
- 싸피
- DFS
- Union Find
- 그리디
- 부분수열의합2
- Today
- Total
목록분류 전체보기 (279)
HwangHub
문제 문제 링크 접근 세 가지 풀이로 접근했습니다. DFS 판단 근거 : 그냥 행렬 보자마자 무지성으로 떠오른 풀이입니다. 시간복잡도 : O(NM); 인접행렬로 전체탐색 실행시간 : 344 ms 중복조합 판단 근거 : 격자상 이동 방식에 따라 visited를 검사할 이유가 없으니 이동 방향들의 조합으로 풀 수 있을 것으로 봤습니다. 시간복잡도 : O(NM); 중복조합 nHr == (n + r - 1) C (r) 이므로 (n + r - 1)! / (n - 1)! * (r)! 입니다. 실행 시간 : 160 ms DP 판단 근거 : 점화식이 간단할 것 같았고, 경로가 매 회마다 누적되는 느낌이니 DP로 가능할 것으로 봤습니다. 시간복잡도 : O(NM); 2차원 loop 돌면서 dp matrix tabulati..
✨ 문제 코드트리 문제 링크 📈 해석 구간을 구분하는 유형은 +1 / -1 테크닉을 이용하여 풀 수 있다. 이 문제에서는 구간별 크기의 합을 묻고 있으므로, 모여있는 구간들을 하나의 연속된 구간으로 구분하여 그 크기를 계산하면 된다. +1 / -1 테크닉을 사용하기 위해 입력되는 x의 값을 기준으로 정렬한다. 이 때, x좌표의 범위가 1 이상 10억 이하이므로 +1 / -1 값을저장하는건 모든 x에 대하여 배열 크기를 잡기보다는 좌표 개수만큼만 저장할 수 있도록 자료구조를 사용하면 된다. 나는 어차피 정렬+선입선출로 x를 사용해야 할 것으로 보여서 바로 우선순위큐를 이용하여 관리해 주었다. 이후 +1 / -1 값을 이용하여 0이 되는 지점을 체크하여 연속 구간을 구분하고, 구간이 시작되는 지점의 값을 i..
지난 시간에 OSI 7 Layer나 TCP/IP Stack에 대하여 다뤘다. 자바로 네트워크 이해하기 1 - OSI 7 Layer? ("자바로 네트워크 이해하기"이지만, 아직은 자바 코드가 등장하진 않는다. 통신 과정에서 코드로 설명해 볼 예정이다.) 네트워크가 뭐지요? 네트워크는 유선 또는 무선으로 여러 컴퓨터들을 연 hwanghub.tistory.com 여러 레이어를 거치며 통신이 이루어진다고만 이해해도 일단은 괜찮다 더 중요한 건, 통신의 목적이 되는 "중요 데이터"를 어떻게 주고받는가 이다. 이렇게 통신의 목적이 되는 중요 데이터를 어떤 규약으로 통신하는가를 담당하는 레이어는 Transport Layer이다. 전송 레이어라고도 하며, 여기에는 TCP와 UDP라는 두 개의 프로토콜이 메인을 이루고 ..
배열은 자료형을 이용하는 가장 단순한 자료구조이다. 물리적으로 연속된 메모리 공간을 할당하여 여러 데이터를 한번에 저장하는 방식이다. 하나의 변수에 여러개의 공간을 할당하여 사용 같은 타입의 데이터만 저장할 수 있고, 공간은 idx 로 구분. idx는 0번 부터 시작. 배열은 reference 타입으로, 객체를 생성해야 사용할 수 있음. 배열 객체를 생성하면 기본 값으로 초기화된다. 배열의 접근은 0 ~ arr.length - 1까지 접근 가능하고, 범위를 벗어나면 "ArrayIndexOutOfBoundException" 발생 배열의 최대 사이즈는 ? 자바는 기본적으로 사용하는 정수 타입이 int라 배열의 사이즈도 21억까지만 생성 가능. 따라서 2GB 이상의 파일을 로드하기 위해선 NIO라는 걸 사용해..
Java에서는 초기화 블록(Initialization Block)이라는 특별한 구조를 제공합니다. 초기화 블록은 두 가지 종류가 있는데, 하나는 인스턴스 초기화 블록(Instance Initialization Block)이고, 다른 하나는 정적 초기화 블록(Static Initialization Block)입니다. 처음 봤을 때 잘못본건가 했는데, 알고나니 알아둬야 할 것 같아서 기록합니다. 1. 인스턴스 초기화 블록(Instance Initialization Block) 인스턴스 초기화 블록은 클래스 안에 직접 작성되는 블록으로, 중괄호 {}로 감싸져 있습니다. 이 블록은 객체가 생성될 때마다 실행되며, 생성자보다 먼저 실행됩니다. 여러 개의 생성자가 있고 각 생성자에서 공통으로 수행해야 하는 코드를 ..
자바는 객체를 파일에 저장하거나 네트워크를 통해 전송하기 위해 문자열과 같은 연속적인 데이터(byte stream; 자바는 기본적으로 byte stream으로 입출력 관리)로 변환하는 과정을 처리합니다. 이를 직렬화라 합니다. 당연히 직렬화된 데이터(byte stream)를 다시 객체화하는 것을 역 직렬화라고 합니다. 직렬화가 되기 위한 조건은 다음과 같습니다. 클래스와 그 모든 멤버가 Serializable 인터페이스를 구현해야 함 직렬화에서 제외하려는 멤버는 transient를 선언해야 함 class Member implements Serializable /* 직렬화 필수 조건 */{ private Long id; private String name; private Integer age; privat..
개발하다보면 "예외처리"는 필수죠. Java의 Exception은 크게 Checked Exception과 Unchecked Exception 두 가지로 나뉘는데, 각각이 무엇인지 알아봅시다. 1. Checked Exception Checked Exception은 컴파일러가 컴파일 시점에 체크하는 예외를 의미합니다. 이러한 예외들은 반드시 예외 처리를 해주어야 합니다. 예를 들어, FileNotFoundException, IOException 등이 있습니다. 이런 예외들은 파일을 읽거나 쓰는 과정에서 발생할 수 있는 예외를 대비하여 개발자가 미리 예외처리를 해두어야 합니다. try { // 예외가 발생할 가능성이 있는 코드 } catch (FileNotFoundException e) { // 예외 처리 코..
("자바로 네트워크 이해하기"이지만, 아직은 자바 코드가 등장하진 않는다. 통신 과정에서 코드로 설명해 볼 예정이다.) 네트워크가 뭐지요? 네트워크는 유선 또는 무선으로 여러 컴퓨터들을 연결하는 것을 의미한다. 어릴적 스타크래프트를 한 사람들은 LAN이라는 용어가 익숙할 것이다. LAN은 지역 네트워크를 이용하는 것으로, 지역망을 구축하기만 하면 인터넷을 통하지 않고도 컴퓨터끼리 통신하여 게임을 즐길 수 있었다. 사실 우린 어릴적 의식하고 사용하지 않았지만, 스타크래프트는 네트워크에 대하여 노골적으로 전문적인 이해를 요구했던 것 같다. 이처럼 LAN은 가정이나 회사 등 특정 영역에 존재하는 컴퓨터를 연결하는 네트워크를 의미하고, 이러한 LAN을 연결하는 걸 Wide Area Network라 하여 WAN이..
우리는 많은 경우에 습관적으로 데이터를 초기화하여 사용합니다. 하지만 경우에 따라 자바는 기본적으로 초기화를 해 주는 경우도 있는데요. 이를 분명하게 인지하고 사용하고자 해당 내용을 명확하게 정리해 보겠습니다. 지역 변수와 초기화 먼저, 지역 변수에 대해 알아보겠습니다. 지역 변수란 특정 영역 내에서만 사용되는 변수를 말합니다. 예를 들어, 메서드 또는 제어문 안에서 선언된 변수가 이에 해당합니다. 이렇게 선언되는 지역 변수는 반드시 초기화를 해 줘야 사용이 가능합니다. public class Main { public static void main(String[] args) { int a; System.out.println(a); } } 예시 코드를 보겠습니다. 위 코드에서 int a;는 main 메서드..
문제 문제 링크 해석 해당 문제는 기본 구현으로도 가능하고, 누적합으로도 가능하다. 한번 살펴보자. 기본 구현 제외되는 숫자들이 B 개만큼 존재한다고 하면, 그 숫자들을 Hash Set을 이용하여 관리하고, 1부터 n까지 슬라이딩 윈도우 느낌으로 k의 길이만큼 연속된 수열을 한칸 한칸 밀면서 매 이동마다 다음에 추가되는 숫자가 B개의 숫자 중 하나이면 cnt++, 그리고 이동마다 다음에 빠지는 숫자가 B개의 숫자 중 하나이면 cnt--로 연산한다. 이렇게 계산하면서 매 이동마다 cnt의 최소값이 뭔지만 갱신해주면 답을 찾을 수 있다. 누적합 하지만 잘 생각해보면 이 방식은 매번 이동마다 수행해야 하는 연산량이 (상대적으로) 많다. 하지만 이를 미리 계산해둘 수 있다면 어떨까? 각 구간별로 누적 cnt 값..