thecolin18의 등록된 링크

키자드에 등록된 총 20개의 포스트를 확인하실 수 있습니다.

Naver Blog

자료구조-그래프(Graph)

Ⅰ. '그래프'란? 1. 구조 : 비선형 데이터 구조. 1) 노드(= 정점 = Vertex) : 데이터 2) 간선(= Edge) : 노드 간의 연결선. (1) 해설 : 노드 간 관계 or 흐름 표현. (2) 종류 ① 방향이 있는 간선 ② 방향이 없는 간선 2. 용도 : 주로 데이터 간 관계 표현용. Ⅱ. 분류 1. 방향성에 따른 분류 1) 방향 그래프(Directed Graph) : '방향이 있는 간선'을 포함한 그래프. (1) 양방향 그래프 : 두 노드 간에 서로 이동 可. (2) 단방향 그래프 : 두 노드 中 한 쪽 노드로만 이동 可. 2) 무방향 그래프(Undirected Graph) : '방향이 없는 간선'을 포함한 그래프. 2. 가중치 존재 여부에 따른 분류 1) 가중치 그래프(Weight Graph) : 가중치 O. 3. 순환 여부에 따른 분류 1) 순환 그래프(Cycle Graph) : 순환 O. (1) 해설 : 특정 노드에서 출발해서 간선을 따라 다시 특정 노드(= 출

Naver Blog

알고리즘-사방 탐색

1. 정의 : 특정 좌표 1개를 기준으로 해당 좌표의 상하좌우(= 전후좌우)를 탐색하는 방법. 2. 사방 탐색의 조건 : 2차원 배열 3. 좌표 보는 방법 1) 기준 좌표 : (i, j) (1) i : 행(= 가로 = x축) (2) j : 열(= 세로 = y) 4. 사방의 좌표 1) 구하는 방법 : 기준 좌표의 i, j 위치에 각 방향의 i, j 위치를 더하면, 해당 방향의 좌표가 나온다. (1) 예시 : 기준 좌표가 (1, 3)일 때 ① 위쪽의 좌표 : (1, 3) + (-1, 0) = (0, 3) ② 아래쪽의 좌표 : (1, 3) + (1, 0) = (2, 3) ③ 왼쪽의 좌표 : (1, 3) + (0, -1) = (1, 2) ④ 오른쪽의 좌표 : (1, 3) + (0, 1) = (1, 4) 2) 방향별 좌표 (1) 위쪽 : (-1, 0) (2) 아래쪽 : (1, 0) (3) 왼쪽 : (0, -1) (4) 오른쪽 : (0, 1) 3) Java 코드로 표현한 사방의 좌표 (1) 읽

Naver Blog

알고리즘-입력

1. 입력 속도 비교 : BufferedInputStream > BufferedReader > Scanner 1) 입력 개수별 속도 비교 (1) 1천 개 이하 입력 : 속도 차이 거의 X. (2) 1만 개 이상 입력 : 속도 차이 O. (3) 100만 개 이상 입력 : 확연한 속도 차이! 【참고】 1. 유레카 4기(백엔드) 2주차 수요일(26.04.15.) 수업 내용

Naver Blog

자료구조-스택(Stack)

Ⅰ. 스택이란? 1. 용도 : 일시적인 데이터 보관소. 2. 구조 1) 꼭대기(= Top) : 스택의 맨 윗부분. (1) 특징 ① 데이터의 입력(= push) 및 출력(= pop) 발생. → 출입구가 모두 꼭대기에 있음. ② 가장 최근에 들어온 데이터가 있음. 2) 바닥(= Bottom) : 스택의 맨 아랫부분. (1) 특징 ① 맨 처음에 들어온 데이터가 쌓임. Ⅱ. 데이터 입출력 방식 : LIFO 1. LIFO(Last In First Out) : 후입선출 1) 특징 (1) 맨 처음 들어온 데이터 : 스택의 맨 아래에 쌓임. (2) 맨 뒤에 들어온 데이터 : 스택의 맨 위에 쌓임. Ⅲ. 스택 관련 메서드(Java) 1. push 메서드 1) 기능 : 꼭대기에 데이터 삽입. (1) 해설 : 맨 위부터 차곡차곡 쌓임. 2) 스택이 가득 차 있을 경우 : 오버플로우 발생. 2. pop 메서드 1) 기능 : 꼭대기에 있는 데이터 제거 및 해당 데이터 반환. (1) 해설 : 들어온 순서의

Naver Blog

JAVA-배열(Array)

Ⅰ. 배열이란? 1. 분류 : 자료구조 2. 데이터 타입 : 참조 타입 1) 관련 특징 (1) 배열 변수에 저장된 값 : 참조하는 배열의 참조 값(= 주솟값 = 번지). ① 참조하는 배열이 없는 경우 : null <1> 이때, NullPointerException 주의! (2) 'new' 연산자 : 배열 생성 후, 배열 변수에게 배열의 '참조 값'을 리턴함. 3. 메모리상에서의 생성 위치 1) 배열 변수 : 스택 영역. (1) 이유 : 모든 변수는 '스택' 영역에 생성되기 때문. 2) 배열 자체 : 힙 영역. (1) 이유 : 배열도 '객체'이기 때문. 4. 등장 배경 : 변수의 단점 극복 1) 변수의 단점 (1) 저장 가능한 값 : 1개. ① 해설 : 필요한 변수의 수 == 저장할 값의 수 2) 배열의 장점 (1) 배열 변수 1개로 여러 데이터(→ 같은 타입의 데이터)를 다룰 수 있음. Ⅱ. 구조 및 형태 1. 연속된 공간 : 여기에 값을 나열함. 1) 저장 가능한 값 : '같은 타

Naver Blog

JAVA-예외(Exception)

Ⅰ. 예외란? 1. 에러 vs 예외 1) 공통점 (1) '오류'에 해당함. (2) 발생 즉시 프로그램 종료. (3) Java의 모든 에러 & 예외 클래스 : 'Throwable' 클래스를 상속받음. 2) 차이점 (1) 에러 ① 원인 : H/W 고장 (2) 예외 ① 원인 : 잘못된 사용 or 코딩 ② 특징 <1> 예외 처리를 통해 [종료 없이] 계속 실행 可. <2> 예외 클래스 : 'Throwable' 클래스의 하위 클래스인 'Exception' 클래스를 상속받음. Ⅱ. 종류 1. 일반 예외(Exception) 1) 뜻 : '컴파일러'가 예외 처리 코드 여부를 검사하는 예외. (1) 해설 : 실행 예외를 제외한 모든 예외. 2) 특징 (1) 예외 발견 시점 : 컴파일 단계. 2. 실행 예외(Runtime Exception) 1) 뜻 : '컴파일러'가 예외 처리 코드 여부를 검사하지 않는 예외. (1) 해설 : RuntimeException 및 자식 클래스. 2) 특징 (1) 예외 발

Naver Blog

LG 유레카 4기(백엔드)-TIL-3주차-수요일(26.04.22.)

알고리즘 수업을 시작한 첫날부터 어제 점심시간 전까지는 강사님이 진행하시는 알고리즘 이론 수업을 들은 뒤, 강사님께서 선별한 알고리즘 문제를 푸는 방식으로 수업에 참여했다. 그러다 어제가 마침 우리 백엔드 대면반에서 랜덤으로 세 분과 함께 점심을 먹는 날이었기에 같이 점심을 먹고 난 뒤, 서로 대화하던 중에 한 분이 나에게 지금 배우는 알고리즘이 어려우면 수업에서 문제를 같이 푸는 것보다 'https://solved.ac/'라는 사이트에서 1단계부터 차근차근 문제를 풀어보는 게 더 좋을 것 같다고 말해주셨다. 그 말을 듣고 나도 그게 더 도움이 될 것 같다고 생각했기에 어제 점심시간 이후에는 강사님께서 이론을 설명해 주시거나 알고리즘 문제를 풀이해 주시는 경우에는 수업에 집중하고, 강사님께서 제시해 주신 알고리즘 문제를 푸는 시간에는 'https://solved.ac/' 사이트의 알고리즘 문제를 푸는 방식으로 진행했다. 그래서 해당 사이트의 1단계부터 문제를 풀고 있는데, 1단계라도

Naver Blog

백준-브론즈2-1152-단어의 개수

1. 문제 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다. 2. 풀이 과정 처음 풀 때는 예제 입·출력 부분만 신경 쓰고, 문제를 잘못 보는 바람에 문자열에 같은 단어가 몇 개인지 세어야 되는 줄 알았다.(다음부터는 문제부터 꼼꼼히 읽자!) 그 뒤, 문제를 다시 읽고 푸는데, 처음에는 'split' 메서드 같은 것으로 각 단어를 하나씩 잘라서 세는 방식을 쓸지 고민하고 있었다. 그러던 중 문득 '단어가 아닌 공백을 기준으로 세면 어떨까?'라는 아이디어가 떠올랐다. 그래서 초기 코드는 아래와 같이 작성했다. <초기 코드> import java.util.Scanner; public class Main { public static void main(String[] args) { //문자열 입력 받기 Scanner sc = new Scanne

Naver Blog

JAVA-인터페이스-Comparator

Ⅰ. Comparator란? 1. 뜻 : 비교자. 1) 해설 : 'Comparator' 인터페이스를 구현한 객체. 2. 분류 : 인터페이스 3. 소속 패키지 : java.util 1) 주의 : import 사용 必!!! (1) 이유 : 자동 import가 안 되기 때. 4. 용도 : 두 값 비교 시, 사용자가 직접 기준을 제공함. 1) 해설 : 객체가 가진 Compare 기본 정렬(= 자연 순서) 대신에 다른 정렬 방법을 쓸 수 있게 해줌. Ⅱ. 구현 방법 1. 양식 1) 따로 클래스를 만들어서 구현할 경우 import java.util.Comparator; //'java.util' 패키지에서 'Comparator' 인터페이스 가져오기 public class 클래스명 implements Comparator<타입> { //메서드 @Override public int compare(타입 매개변수명1, 타입 매개변수명2) { 비교 기준 제공; } //compare 메서드 오버라이딩 필수!

Naver Blog

JAVA-인터페이스-Comparable

Ⅰ. 'Comparable'이란? 1. 뜻 : 비교 가능한 2. 분류 : 인터페이스 3. 소속 패키지 : java.lang 1) 특징 : import 생략 可. (1) 이유 : Java에서 'java.lang' 패키지는 자동 import 되기 때문. 4. 용도 : 구현한 객체에 비교 기능을 추가해 줌. 1) 해설 : 사용자 정의 객체 내에서 사용자가 직접 정렬 기준을 정의할 수 있게 해줌. → 즉, 비교 기능이 있는 '비 교 가능한' 객체로 만들어 줌. 2) 특징 : 정의한 비교 기준에 따라서 정렬 可. ※ 여기서는 '객체'라고 표현했지만, 엄밀히 따지면 '클래스'임. Ⅱ. 구현 방법 1. 양식 public class 클래스명 implements Comparable<클래스명> { //필드 //생성자 //메서드 @Override public 반환_타입 compareTo(클래스명 매개변수명) { 비교 기준 정의; } //compareTo 메서드: 오버라이딩 必!!! } //클래스 2.

Naver Blog

JAVA-예외-ClassCastException

1. 발생 원인 : 정렬 시, Comparable 비구현 객체면서 Comparator도 제공하지 않음. 【참고】 1. 인프런, 김영한의 실전 자바 - 중급 2편

Naver Blog

JAVA-예외-NullPointerException

1. 예외 발생 원인 : 참조 타입 변수의 값이 'null'인 상태에서 해당 변수의 값에 접근하려고 함. 1) 해설 : 참조 타입 변수에 참조 값이 없는 상태. → 즉, 아무 것도 참조하지 않는 상태. 【참고】 1. 신용권, 임경균 저, 『이것이 자바다(3판 1권)』, 한빛미디어, 2024 2. 유레카 4기 백엔드 1주차 화요일(26.04.07.) 수업 내용

Naver Blog

자료구조-트리-노드(Node)

1. 뜻 : 트리를 구성하는 요소. 2. 구조 1) 루트(Root) : 트리의 최상단(= 첫) 노드. (1) 원칙 : 1 트리 1 루트 (2) 특징 : 부모 노드 X. 2) 리프(Leaf) == 끝(말단) 노드(Terminal Node) == 바깥 노드(External Node) : 트리의 최하단(= 마지막) 노드. (1) 특징 : 리프 뒤에 연결된 노드 X. → 즉, 자식 노드 X. 3) 안쪽 노드 == 끝이 아닌 노드(Non-terminal Node) : 리프를 제외한 나머지 노드(루트 포함). 3. 노드 간 관계 1) 조상(Ancestor) : 해당 노드를 기준으로 위쪽에 연결된 모든 노드. (1) 주의 : 해당 노드와 직·간접적으로 연결되지 않으면, 조상 X. 2) 부모(Parent) : 해당 노드에 직접적으로 연결된 노드 中 바로 위쪽 노드. (1) 원칙 : 각 노드당 부모는 1개. (1) 예외 : 루트는 부모 노드 X. 3) 자식(Child) : 해당 노드에 직접적으로 연

Naver Blog

JAVA-객체지향 프로그래밍-다형성(Polymorphism)

1. '다형성'이란? 1) 뜻 : 사용법은 같은데, 다양한 실행 결과가 나오는 성질. (1) 해설 : 객체를 바꾸면, 프로그램 실행 성능이 달라질 수 있음. 2. 다형성 구현에 필요한 기술 1) 종류 (1) 자동 타입 변환 (2) 재정의 2) 특징 (1) 상속 & 인터페이스 구현으로 얻음. 【참고】 1. 신용권, 임경균 저, 『이것이 자바다(3판 1권)』, 한빛미디어, 2024

Naver Blog

알고리즘-유니온 파인드(Union Find)

Ⅰ. '유니온-파인드' 알고리즘이란? 1. 뜻 : 상호 배타적 집합에서의 병합 연산과 탐색 연산. 1) 상호 배타적 집합(Disjoint Set) == 서로소 집합 : 교집합이 없는 집합. 2. 순서 : Find 연산(두 노드의 루트 찾기) → Union 연산(두 노드의 루트 中 1개로 루트 통일하기) Ⅱ. 유니온(Union) : 병합(= 합치기) 1. 뜻 : 두 노드가 속한 '집합'을 '하나'로 합치는 연산. 2. 분류 : 집합 알고리즘에서의 연산. 3. 방법 : 두 집합의 루트 中 1개로 루트를 통일시킴. 1) 해설 : 한 집합의 루트의 부모 노드 부분을 다른 한 집합의 루트 값으로 바꿈. (1) 예시 : 집합 A의 루트가 1이고, 집합 B의 루트가 2일 때, 이 둘을 집합 B를 기준으로 병합할 경우. ① 기존 <1> 집합 A의 1번 노드(루트)의 부모 노드 값 : 1 <2> 집합 B의 2번 노드(루트)의 부모 노드 값 : 2 ② 루트 통일 후 <1> 집합 A의 1번 노드의 부모

Naver Blog

LG 유레카 4기(백엔드)-TIL-4주차-수요일(26.04.29.)

Array, 시뮬레이션 Queue, Stack 순열, 재귀 조합, 부분집합 정렬 브루트-포스, 보이어-무어, KMP Tree, List, DisjointSet(Union/Find) Graph, BFS, DFS Dijkstra, Bellman-Ford Simulation 위의 목록은 오늘까지 배운 알고리즘 수업 내용들이다. 이 중에서 이번 주(4월 29일 기준)에는 Union-Find부터 Simulation까지 다양한 알고리즘과 자료구조를 배웠다. 이러한 알고리즘과 자료구조를 배울 때, 이론적인 부분은 이해하는 데 큰 어려움이 없었다. 그러나 이를 실제 코드로 구현하는 것은 지금 내 실력으로 불가능할 정도로 매우 어려웠다. 아직 자료구조에 대한 이해도가 낮고, 알고리즘 관련 이론을 온전히 이해하지 못했기 때문인 것 같다. 그래서 이번 연휴를 활용해서 교재의 이론과 강사님께서 제공해 주신 코드를 분석한 뒤, 수업 때 같이 풀었던 문제를 다시 혼자 풀어보면서 구현 방법을 익히고, 시간이

Naver Blog

LG 유레카 4기(백엔드)-TIL-2주차-화요일(26.04.14.)

시작한 지 얼마 안 된 것 같은데 벌써 2주차 화요일이 되었다. 지난주부터 오늘까지는 『이것이 자바다(3판)』 18장까지 순식간에 진도를 나갔고, 내일부터는 본격적인 알고리즘 수업을 한다. 이러한 수업 방식은 프로그래밍 기초(위의 책 기준 4장까지)만 알던 비전공자인 나에게는 매우 힘들었기 때문에 중도 포기까지 고민할 정도였다. 그러나 힘들게 합격해서 서울까지 올라왔기에 결국 포기하지 말고, 끝까지 완주해야겠다고 마음을 잡았다. 그러다 때마침 오늘 강사님께서 나 같이 자바를 어려워하는 수강자들을 위해서 가이드라인을 제공해 주셨다. 【자바 초보자를 위한 가이드라인】 ※ 참고 : 이 가이드라인은 『이것이 자바다(3판)』 교재 기준이다. 1. Chap 1 ~ Chap 4 : 프로그래밍 기본(필수!!!) 챕터 주요 내용 Chap1 X Chap2 변수 선언 및 사용 형 변환 문자열에서 숫자 값 꺼내기 Chap3 연산자 - 기본 연산자(ex : 산술 연산자) & 증감 연산자 & 비교 연

Naver Blog

LG 유레카 4기(백엔드)-TIL-2주차-수요일(26.04.15.)

오늘은 알고리즘 첫 시간이었다. 그래서 알고리즘과 코딩 테스트의 전반적인 구조를 간단히 알려 주신 뒤, 알고리즘에 사용될 필수 자료구조 중 하나인 배열에 대해 다루는 시간을 가졌다. 【오늘 제시된 백준 문제】 1. 16935번 - 배열 돌리기3 : 오늘 같이 풀어봄. 2. 1244번 - 스위치 켜고 끄기 : 내일 같이 풀어볼 예정. 3. 1931번 - 회의실 배정 : 내일 같이 풀어볼 예정. 오늘은 이 세 문제 중에서 그나마 쉬운 편에 속하는 16935번을 다뤘다. 우선, 약 2시간 동안 각자 풀어본 뒤, 강사님께서 문제 풀이 해주시는 시간을 가졌다. 그동안 백준에서 Java 수업 때 배운 개념을 확인하는 정도의 쉬운 문제만 풀었기에 세 문제 중 가장 쉽다는 16935번 문제도 입력 부분과 이중 for문 정도만 구현하고 나머지 부분은 해결하지 못했다. 아래는 약 1시간 동안 혼자 작성한 초기 코드이다. import java.io.BufferedReader; import java.io

Naver Blog

LG 유레카 4기(백엔드)-TIL-2주차-토요일(26.04.18.)

어제와 오늘은 짬짬이 강사님께서 내주신 과제를 푸는 데 시간을 썼다. 과제는 백준의 1914번 문제인 하노이 탑 문제를 푼 뒤, 작성한 코드를 설명하는 것이다. 아직 재귀는 물론이고 배웠던 다른 알고리즘도 제대로 이해하지 못한 상태인 데다가 자습 시간도 더 필요하기에 이 과제는 너무 버거운 것 같다. 그럼에도 불구하고 다음 주 월요일 전까지 완료해야 하고, 조별 과제이기에 더 열심히 준비해야 한다. 일단 금요일에는 하노이 탑의 규칙을 찾기 위해서 5개의 원판이 있을 때를 기준으로 분석한 파일을 작성한 뒤, 챗GPT에게 그 파일을 바탕으로 코드를 짜달라고 부탁했다. 아래는 챗GPT와 대화한 내용이 담긴 URL이고, 하노이 탑 분석 파일도 같이 첨부했다. 챗GPT URL : https://chatgpt.com/share/69e3a10d-3658-83e8-baa0-3852e3fa85cd 파일 - PDF(규칙 분석) 첨부파일 하노이 탑 분석1.pdf 파일 다운로드 - 엑셀(하노이 탑 문

Naver Blog

LG 유레카 4기(백엔드)-TIL-3주차-월요일(26.04.20.)

오늘 오전에는 순열에 대해서 다뤘다. 순열 코드는 for문 내부에 재귀 호출 코드가 있는 구조여서 그런지 더 복잡했다. 오히려 재귀 코드만 단독으로 썼던 하노이 탑 코드가 더 이해하기 쉬웠다. 오후에는 지난주 금요일에 예고했던 대로 1시간 동안 하노이 탑 문제 풀이 관련 조별 발표 시간을 가졌다. 우리 조(8조)는 나와 짝꿍 2인으로 구성된 조였는데, 짝꿍이 나에게 발표 기회를 줬다. 이때, 잠깐 당황했지만, 발표해 보는 경험도 중요하다고 생각했고, 이 과제를 위해서 주말에 열심히 준비했었기에 거절하지 않고 내가 발표하기로 했다. 발표는 강사님 자리에서 강사님 컴퓨터를 이용해서 진행했다. 이때, 컴퓨터의 펜 프로그램을 쓰는 것이 익숙지 않았기에 오조작이 많이 발생해서 당황했고, 그때마다 흐름이 끊기긴 했다. 게다가 내가 졸업 후 거의 1년 동안 발표할 기회가 없었기에 말을 저는 부분도 있었다. 그럼에도 하노이 탑 코드를 한 줄씩 제대로 이해한 상태였기에 이런 돌발 상황에서도 침착함을

1