전체 글 81

Leetcode 2211. Count Collisions on a Road

문제 이해 - directions 문자열에 나타난 문자에 따라 충돌 횟수를 구하라 해결 전략 - int i = 0 을 선언하고, directions 문자열을 순회하면서 L이 아닌 지점까지 이동합니다. - 해당 지점부터 'R'이 발견되면, carsFromRight에 값을 하나씩 추가하고, 'S'가 발견되면 answer에 carsFromRight를, 'L'이 발견되면 answer에 carsFromRight+1을 더해줍니다. - carsFromRight를 0으로 초기화한 후, 계속 순회합니다. 구현 class Solution { public int countCollisions(String directions) { int answer = 0; int i = 0; int carsFromRight = 0; for(..

PS 2022.04.24

Leetcode 83. Remove Duplicates from Sorted List

문제 이해 - 정렬된 Linked List에서 중복된 원소를 제거하라 해결 전략 - ListNode list를 만들고, head의 주소를 저장합니다. - list를 순회하면서, 만약 해당 위치의 값(val)과 다음 위치의 값(val)이 같다면, 다음 위치의 노드를 제거해줍니다. - 다음 위치의 노드가 존재하지 않는다면 while문을 탈출합니다. - head를 반환합니다. 구현 public class Solution { public ListNode deleteDuplicates(ListNode head) { ListNode list = head; while(list != null){ if(list.next == null){ break; } if(list.val == list.next.val){ list.n..

PS 2022.04.24

자바(Java) 알고리즘 문제 풀이 - 결혼식

문제 이해 - 결혼식장에 동시에 존재하는 최대 인원수를 구하라 해결 전략 - ArrayList에 시간과 관련된 정보를 저장합니다 -> 해당 ArrayList를 정렬합니다. - ArrayList를 순회하면서 s와 관련된 정보일 때는 인원을 추가하고, e와 관련된 정보일 때는 인원을 감소시킵니다. 구현 import java.util.*; class Time implements Comparable{ public int time; public char state; Time(int time, char state) { this.time = time; this.state = state; } @Override public int compareTo(Time ob){ if(this.time==ob.time) return ..

PS 2022.04.24

링크드 리스트(1)

1) 링크드 리스트 특징 - 링크드 리스트는 하나의 저장된 데이터가 있을 때마다, 해당 데이터를 저장할 공간과 다음 연결될 데이터의 주소값을 가지는 공간을 생성함 - 데이터가 1000개, 2000개, 10000개가 있어도 연결해서 놓을 수 있음 2) 링크드 리스트의 장단점 (1) 장점 - 미리 데이터 공간을 할당하지 않아도 됨 -> 데이터 공간이 필요할 때 할당하면 됨 (2) 단점 - 항상 데이터를 저장할 때, 데이터 공간과 다음 데이터 공간을 가리키는 데이터 공간이 필요함 -> 저장공간 효율이 높지 않음 - 링크드 리스트는 데이터를 찾으려면 무조건 맨 앞부터 찾아가야 함 -> 접근 속도가 느림 - 중간에 있는 데이터를 삭제하려면, 부가적인 작업이 필요함 3) 링크드 리스트 구성 - 링크드 리스트는 하나..

자료구조 2022.04.24

스택

1) 스택의 특징 - 스택은 큐와 함께 가장 많이 쓰이는 자료구조 중 하나임 - 큐가 FIFO 정책을 쓴다면, 스택은 LIFO 정책을 씀 -> 즉, 가장 마지막에 넣어진 데이터를 먼저 뽑음 2) 스택의 활용 - 컴퓨터 내부 프로세스 구조의 함수 동작 방식에 스택이 활용됨 3) 스택의 메소드 - push(): 데이터를 스택에 넣기 - pop(): 데이터를 스택에서 꺼내기 4) 스택의 장단점 장점 (1) 구조가 단순해서 구현이 쉬움 (2) 데이터 저장/읽기 속도가 빠름 단점 (1) 데이터 최대 개수를 미리 정해야 함 (2) 저장 공간의 낭비가 발생할 수 있음 5) 스택 활용하기 import java.util.Stack; Stack stack_int = new Stack(); stack_int.push(1);..

자료구조 2022.04.23

1) 큐의 특징 - 큐는 프로그래밍에서 가장 많이 쓰이는 자료구조 중 하나임 - 큐의 구조는 굉장히 단순함 -> FIFO라는 정책을 쓰는 자료구조 -> FIFO는 First In, First Out의 약자임 2) 큐의 메소드 - enqueue: 큐에 데이터를 넣는 기능 - dequeue: 큐에서 데이터를 빼는 기능 3) 큐 구현 예시 - Queue 클래스의 데이터 생성을 위해서는 java.util 패키지의 LinkedList 클래스를 사용해야 함 import java.util.LinkedList; import java.util.Queue; Queue queue_int = new LinkedList(); Queue queue_str = new LinkedList(); // 추가 queue_int.add(1..

자료구조 2022.04.23

배열

1) 배열의 목적 및 기능 - 같은 종류의 데이터를 효율적으로 관리하기 위해서 사용함 - 같은 종류의 데이터를 순차적으로 저장함 2) 배열의 장점 및 단점 장점 - 인덱스 번호만 알면 바로 데이터에 접근 가능함 단점 - 배열은 보통 길이가 정해져 있음 3) 배열의 예시 Integer[] data_list = new Integer[10]; data_list[0] = 1; Integer data_list1[] = {5,4,3,2,1}; Integer[] data_list2 = {1,2,3,4,5}; 4) ArrayList - Java에서 배열을 보다 손쉽게 다루기 위해 제공하는 클래스 4-1) List vs ArrayList - List는 인터페이스이고, ArrayList는 클래스임 - List로 선언된 변..

자료구조 2022.04.22

자바(Java) 알고리즘 문제 풀이 - 씨름선수

문제 이해 - 특정 선수에 비해 키와 몸무게가 둘 다 높은 선수가 존재하면 해당 선수는 탈락시킨다. 해결 전략 - 키를 기준으로 내림차순 정렬합니다. - 몸무게의 최대값을 max로 설정하고, 몸무게가 max로 업데이트될 때마다 한 명씩 추가합니다. -> 몸무게가 최대값으로 업데이트된다는 것은 해당 선수가 키는 더 작더라도, 몸무게는 더 많이 나간다는 것을 의미하기 때문입니다. 구현 import java.util.*; class Body implements Comparable{ int h; int w; public Body(int h, int w){ this.h = h; this.w = w; } @Override public int compareTo(Body obj){ return obj.h-this.h;..

PS 2022.04.21

자바(Java) 알고리즘 문제 풀이 - 회의실 배정

문제 이해 - 회의실을 사용할 수 있는 최대 회의수를 찾아라 해결 전략 - 회의들을 끝나는 시간을 기준으로 정렬합니다. - 하나의 회의를 선택하고, 그 회의의 끝나는 시간 이후에 있는 회의 중 가장 빠른 회의를 이어서 선택합니다. - 위의 전략을 반복합니다. 구현 import java.util.*; class Time implements Comparable{ public int s, e; Time(int s, int e) { this.s = s; this.e = e; } @Override public int compareTo(Time o){ if(this.e==o.e) return this.s-o.s; else return this.e-o.e; } } public class Main { public in..

PS 2022.04.20

SQL 레벨업 5장 반복문 (1)

- SQL에는 반복문이 없습니다. -> SQL은 일부러 반복문을 언어 설계에서 제외했는데, 바로 '반복문은 필요 없잖아?'라는 생각 때문입니다. - 반복이 없으면 프로그램의 생산성 향상 외에도 큰 장점이 생깁니다. -> 반대로 말하면 반복계 코드에서 발생하는 큰 단점이 있습니다. 15강 반복계의 공포 - 반복계 해답의 가장 '좋은 점'은 SQL을 잘 모르더라도 사용할 수 있다는 것입니다. -> 반복계가 가지는 몇몇 장점 중 하나가 바로 SQL 처리를 단순화할 수 있다는 것입니다. -> 반대로, 여러 행을 한꺼번에 처리하는 SQL을 포장계라고 부릅니다. 1. 반복계의 단점 - 반복계의 단점은 한 마디로 설명한다면 '성능'입니다. -> 같은 기능을 구현한다고 가정하면, 반복계로 구현한 코드는 포장계로 구현한..

DB 2022.04.18