분류 전체보기
-
Java의 역사와 특징Programming Language/Java 2022. 3. 26. 16:55
개발 공부를 하는 사람이라면 자바 언어에 대해서 한 번쯤 들어봤을 것이다. 특히 한국에서 개발 공부를 하다 보면 주로 사용하는 언어가 무엇인지를 떠나 자바 언어의 기본적인 문법과 사용법을 알고 있는 경우가 많다. 그만큼 많이 사용되는 프로그래밍 언어이기 때문이다. 한국의 경우 큰 기업들에서 스프링을 통해 백엔드를 구성해놓은 경우가 많기 때문에 그러한 경향이 더 크다. 이번 게시글에선 대표적인 프로그래밍 언어인 자바가 어떤 언어이며, 어떤 특징을 가지고 있는지 확인해보도록 하겠다. 자바의 역사 자바는 1991년 썬 마이크로시스템즈(Sun Microsystems)의 제임스 고슬링(James Gosling)이 고안한 프로그래밍 언어다. (한 가지 재밌는 이야기, Java를 처음 배울 때 흔히 사용하는 IDE인..
-
백준 11497번: 통나무 건너뛰기 (Python/Java)Algorithm/Algorithm Problem 2022. 3. 22. 23:22
https://www.acmicpc.net/problem/11497 11497번: 통나무 건너뛰기 남규는 통나무를 세워 놓고 건너뛰기를 좋아한다. 그래서 N개의 통나무를 원형으로 세워 놓고 뛰어놀려고 한다. 남규는 원형으로 인접한 옆 통나무로 건너뛰는데, 이때 각 인접한 통나무의 높이 www.acmicpc.net 접근 반복 for문을 돌려서 매번 두 수의 차를 구하고 최댓값을 구한 뒤 배열에 집어넣으면 무조건 시간 초과가 날 수밖에 없는 문제. 때문에 수들을 정렬시킬 규칙을 찾아야 한다. 사실 이 부분에서 조금 헷갈리긴 했으나 잘 생각해보면 어렵지 않게 규칙을 찾을 수 있다. 우선 숫자들을 순서대로 정렬한다. 그 뒤 첫 번째에 가장 작은 수, 마지막에 다음 수, 두 번째에 다음 수, 뒤에서 두 번째에 다..
-
Stack(스택)과 Queue(큐)Computer Science/Data Structure 2022. 3. 22. 00:40
Stack Stack이란? 단어 그대로 생각해보자. stack을 동사로 사용하면 '쌓다', '(쌓아서) 채우다'라는 뜻을 가지고 있다. 그렇다. 너무 당연하게도 스택은 데이터를 쌓아 올린 구조다. 흔히들 스택을 '바닥이 막힌 상자'로 비유하곤 한다. 우리가 바닥이 막힌 상자 위에 물건들을 하나씩 쌓아 올린다고 생각해보자. 이제 그 물건들을 다시 꺼낼 때에는 맨 위에 올라와있는 물건부터 역순으로 꺼내야 할 것이다. 바닥이 막혀있으니 맨 아래에서부터 꺼낼 수 없고, 중간에서 꺼내면 무너져 내리기 때문이다. 조금 전문적인 말을 통해 설명하자면, 스택은 LIFO(Last In First Out, 후입 선출) 구조를 가지고 있다. 즉, 나중에 들어온 데이터가 먼저 빠져나가는 자료구조다. 예시 위 그림은 스택 구조..
-
백준 2036번: 수열의 점수 (Python/Java)Algorithm/Algorithm Problem 2022. 3. 21. 23:23
https://www.acmicpc.net/problem/2036 2036번: 수열의 점수 n개의 정수로 이루어진 수열이 있다. 이 수열에서 한 정수를 제거하거나, 또는 두 정수를 제거할 수 있다. 한 정수를 제거하는 경우에는 그 정수가 점수가 되고, 두 정수를 제거하는 경우에는 두 www.acmicpc.net 접근 그리디 알고리즘의 기본 원리만 생각하며 원론적으로 접근해봤다. '배열에서 가장 큰 숫자를 만들어 더하는 것'이 현재 단계에서 해야 하는 최선의 선택이다. 이 부분을 구현하기 위해 우선 두 가지 경우로 나눠서 생각해봤다. 첫 번째는 홀수인 경우다. 홀수인 경우는 무조건 두 개를 곱해야 최종 값이 가장 큰 값이 나온다. 홀수 숫자의 개수가 홀수개인 경우에는 두 개씩 곱하다가 마지막 홀수를 더해야..
-
컴퓨터 부팅 과정Computer Science/Operating System 2022. 3. 21. 22:33
Bootstrap(부트스트랩, 부팅) PC의 전원 버튼을 누른 직후부터, 운영체제가 메모리에서 동작하기 시작할 때까지의 모든 과정 Bootstrap 과정 메인 보드에 전원 공급 ROM 혹은 EEPROM에 저장된 BIOS 루틴 시작 POST 진단과정 시작 BIOS는 셀프 테스트를 통해 주변 하드웨어 체크 (컴퓨터 부팅에 필요한 하드웨어들이 정상인지 확인) MBR에 존재하는 부팅 정보를 읽어오는 부트스트랩 실행 RAM에 Bootloader를 적재 (RAM에는 운영체제가 적재될 Boot Sector가 따로 있음) 디스크에 있는 OS(커널) 코드를 복사하여 메모리에 적재 용어 설명 BIOS (Basic Input Output System) 컴퓨터에 전원이 들어왔을 때 가장 먼저 컴퓨터 제어를 맡아 기본적인 기능..
-
ArrayList와 LinkedListComputer Science/Data Structure 2022. 3. 20. 23:45
ArrayList ArrayList란? Java의 Collection Framework에서 가장 많이 사용되는 Collection Class 배열같이 인덱스를 통해 인자를 관리한다는 특징이 있지만 배열과는 다르게 크기가 동적으로 할당됨 기본 저장용량은 10이며, 10을 넘어가면 1.5배씩 증가 정확히 설명하자면, 기존 ArrayList의 크기가 동적으로 변하는 것이 아니라 기존 저장용량을 넘어서면 기존 ArrayList의 저장용량보다 1.5배 큰 ArrayList를 만들고, 이 리스트에 기존 ArrayList의 값들을 복사하는 것 값이 하나 삭제되면 해당 인덱스 뒤의 모든 인자가 한 칸씩 당겨지고, 값이 하나 추가되면 해당 인덱스 뒤의 모든 인자가 한 칸씩 밀림 Generic을 이용해 타입 안정성을 제공..
-
Array(배열)와 List(리스트)Computer Science/Data Structure 2022. 3. 19. 16:27
Array(배열) Array(배열)이란? 여러 데이터를 그룹으로 관리하기 위하여 사용하는 자료구조 데이터들은 메모리 상에 연속적(논리적인 저장 순서와 물리적 저장 순서가 같음)으로 배치됨 즉, 연속된 메모리 공간에 순서대로 저장된 데이터 그룹을 배열이라고 함 배열 내의 각 원소들은 유일무이한 고유의 인덱스 번호를 가지고 있음 -> 원소의 인덱스 번호를 통해 해당 원소에 접근할 수 있음 처음 배열을 생성할 때 배열의 크기를 정해줌(pre-allocation). 이 크기는 고정적이기 때문에 데이터를 몇 개를 집어넣느냐와 상관없이 처음 생성할 때 크기를 그대로 유지 Cache Hit Ratio가 높음 (※ Cache Hit Ratio: CPU가 요청한 데이터가 캐시 메모리에 있는 경우 캐시 적중(Cache H..
-
다이나믹 프로그래밍 (Dynamic Programming, DP)Algorithm/Algorithm Categories 2022. 3. 13. 01:50
기본 개념 다이나믹 프로그래밍(동적 계획법)은 큰 문제를 여러 작은 문제들의 해결을 통해 풀어가는 알고리즘을 뜻한다. 쉽게 말해 하나의 큰 문제를 쪼개 작은 여러 개의 문제로 만들고, 이 작은 문제들을 해결하다 보면 큰 문제를 해결할 수 있게 된다는 개념이다. (작은 문제들은 큰 문제의 조각들이니까) 언뜻 보면 분할 정복(Divide and Conquer)과 비슷하게 생각할 수 있지만 다이나믹 프로그래밍이 가진 다음 두 가지 조건으로 분할 정복과 구별된다. 최적 부분 구조(optimal substructure) 중복된 하위 구조(overlapping subproblems) 최적 부분 구조는 현재 최적 선택이 전체 최적 선택이 되어야 한다는 조건이다. 큰 문제를 여러 작은 문제들로 나눠놨으니 이는 당연한 ..