분류 전체보기
[Algorithm] 구현(Implementation)
아이디어를 코드로 바꾸는 구현 코딩 테스트에서 구현이란 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정이다. 완전 탐색은 모든 경우의 수를 다 계산하는 해결방법을 의미하고. 시뮬레이션은 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행해야하는 문제 유형을 의미한다. 상하좌우 n * n 크기의 정사각형 공간을 입력 받고 다음 라인에 L, R, U, D 중 하나의 문자를 연속적으로 입력받는다. 시작하는 포인트는 (1, 1) 이며 n * n 크기의 정사각형 공간을 벗어나는 움직임은 무시된다. 해당 계획서가 주어졌을 때 최종적으로 도착할 지점의 좌표를 출력하는 프로그램을 작성하는 문제이다. L : 왼쪽으로 한 칸 이동 R : 오른쪽으로 한 칸 이동 U : 위로 한 칸 이동 D : 아래로 한 칸 이동 n ..
[Algorithm] 그리디(Greedy) : 탐욕법이란?
당장 좋은 것만 선택하는 그리디 그리디(Greedy) 알고리즘은 국내에서 단어 그대로 번역하여 탐욕법으로 소개된다. 이름에서 알 수 있듯이 어떠한 문제가 있을 때 단순 무식하게, 탐욕적으로 문제를 푸는 알고리즘이다. 여기서 탐욕적이라는 말은 현재 상황에서 지금 당장 좋은 것만 고르는 방법 을 의미한다. 그리디 알고리즘을 이용하면 매 순간 가장 좋아보이는 것을 선택하며, 현재의 선택이 나중에 미칠 영향에 대해서는 고려하지 않는다. 그리디 알고리즘의 문제 유형은 앞으로 다루게 될 알고리즘과 비교했을 때 사전에 외우고 있지 않아도 풀수 있을 가능성이 높은 문제 유형이라는 특징이 있다. 자바코드와 새로 배우고 있는 파이썬 코드로 풀어보았다. 큰 수의 법칙 다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M번..
[Algorithm] 알고리즘의 복잡도와 Big-O 란?
알고리즘이란 어떤 목적을 달성하거나 결과물을 만들어내기 위해 거쳐야 하는 일련의 과정들의 집합을 의미한다. 가는 루트는 다양하며 여러가지 상황에 따른 알고리즘은 모두 다르다. 따라서 시간복잡도가 가장 낮은 알고리즘을 선택하여 사용한다. 복잡도(Complexity)는 알고리즘의 성능을 나타내는 척도이다. 복잡도는 시간 복잡도와 공간 복잡도로 나눌 수 있다. 시간 복잡도 특정한 크기의 입력에 대하여 알고리즘을 수행할 때 연산이 몇번 이루어지는 지를 표기 공간 복잡도 특정한 크기의 입력에 대하여 알고리즘이 얼마나 많은 메모리를 차지하는지를 의미 동일한 기능을 수행하는 알고리즘이 있다면 일반적으로 복잡도가 낮을수록 좋은 알고리즘이다. 빅오 표기법(Big O Notation) 복잡도를 표현할때에는 빅오 표기법을 ..
[42Seoul] Netwhat - 네트워크 및 시스템 관리
1. Introduction Netwaht은 네트워크에 대해 알게 되고 그것이 내부에서 작동하는 일들에 대해 배울 수 있게 해줄 것입니다. 이것은 여러분이 이미 생활 속에서 사용하고 있는 어떠한 것들이 어떻게 동작하는지 이해할 수 있도록 해줄 것입니다. 2. General instructions Netwhat은 다중 선택 프로젝트입니다. 이 프로젝트는 여러분의 네트워크 지식을 평가할 것입니다. 인터넷에서 네트워크 강의들을 읽는 것으로 시작 할 수 있습니다. 그 이후에 지식을 테스트하기위한 온라인시험을 볼 수 있습니다. 일단 시험을 통과할 준비가 되었고, 공부를 끝마쳤다면 : netwhat.42.fr에 접속하세요. 3. Mandatory part ◦ What is an IP address IP : Inte..
[JAVA] 소켓(socket) 프로그래밍
소켓 프로그래밍 소켓(socket) 이란 프로세스간의 통신에 사용되는 양쪽 끝단을 의미한다. 자바에서는 java.net패키지를 통해 소캣 프로그래밍을 지원하는데, 소켓 통신에 사용되는 프로토콜에 따라 다른 종류의 소켓을 구현하여 제공한다. 1. TCP(Transmission Control Protocol) 인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜. 일반적으로 TCP와 IP를 함께 사용하는데, IP가 데이터의 배달을 처리한다면 TCP는 패킷을 추적 및 관리한다. TCP는 연속성보다 신뢰성있는 전송이 중요할 때에 사용하는 프로토콜로 예를 들면 파일 전송과 같은 경우에 사용한다. 패킷(Packet)이란? 인터넷 내에서 데이터를 보내기 위한 경로배정(라우팅)을 효율적으로 ..
[JAVA]입출력 IO & NIO
입출력이란? I/O란 입력과 출력, 컴퓨터 내부 또는 외부의 장치와 프로그램간의 데이터를 주고 받는 것을 말한다. 스트림(stream) 스트림이란 데이터를 운반하는데 사용되는 연결통로이다. 스트림은 단방향통신만 가능하기 때문에 하나의 스트림으로 입력과 출력을 동시에 처리할수 없다. 그래서 입력과 출력을 동시에 수행하려면 입력을 위한 입력스트림과 출력을 위한 출력스트림 모두 2개의 스트림이 필요하다. 스트림은 먼저 보낸 데이터를 먼저 받게 되어 있으며 중간에 건너뜀 없이 연속적으로 데이터를 주고받는다. 큐와 같은 FIFO(First In First Out) 구조로 되어 있다고생각하면 이해하기 쉬울 것이다. 바이트 기반 스트림 ( InputStream, OutputStream ) - 입출력 되는 데이터를 단..
[JAVA] 자바 컴파일은 어떻게 동작할까?
Write Once, Run Anywhere! 자바 이전에 C/C++과 같은 언어는 컴파일을 리눅스에서 했다면 리눅스에서만 실행이 가능했다. 즉 컴파일러가 OS에 종속되어 해당 OS에 맞는 컴파일러를 각각 사용해야 했던 것이다. 자바는 OS에 관련없이 JRE만 설치되어 있다면 어떤 OS에서도 자바를 컴파일하고 실행이 가능하다. 이를 보완하기 위해 나온 JVM은 가상환경에서 컴파일을 하는 방식으로 모든 OS에서 하나의 JVM으로 실행 및 컴파일 할 수 있게 하였다. JAVA 컴파일과정 및 메모리 구조 Java 컴파일 과정 .java 파일 생성 후 Build -> compile(javac) -> byteCode .class file(반기계어) 이렇게 생성된 자바 바이트 코드는 클래스 로더에 의해 JVM내로 ..
[JAVA] Garbage Collection (가비지컬렉션)이란?
Garbage Collection(GC) GC는 reachability라는 개념을 사용해 참조되지 않는 객체들의 메모리를 회수하는 역할을 하여 자바에서는 명시적으로 메모리를 지정하여 해제하지 않는다. Minor, Major GC -Heap 영역에 객체가 생성되면 최초로 Eden 영역에 할당되고 이 영역에 어느정도 데이터가 쌓이게 되면 참조정도에 따라 Servivor1, Servivor2 중 빈 공간으로 이동된다. New Generation과 Tenured Generation 에서의 GC를 Minor GC 라고 한다. Old영역에 할당된 메모리가 허용치를 넘게 되면, Old 영역에 있는 모든 객체들을 검사하여 참조되지 않는 객체들을 한꺼번에 삭제하는 GC가 실행되는데 시간이 오래 걸리는 작업이고 이 때 G..
[JAVA] JDK, JRE, JVM이란?
JVM(Java Virtual Machine) Java 코드 및 Application을 동작시킬 수 있도록 런타임 환경을 제공해주는 Java Engine이다. JRE(Java SE Runtime Environment) Java 실행환경, JVM이 자바를 실행시킬때 필요한 라이브러리 및 기타 필수 파일을 가지고 있다. JDK(Java Development Kit) JRE 외에 개발을 위해 필요한 도구를 가지고 있다. 개발자를 위한 kit이다. > JVM(Java Virtual Machine) JVM의 기능 1. 자바 프로그램이 어느 기기, 어느 운영체체 상에서도 실행 가능 2. 자바 프로그램의 메모리를 효율적으로 관리 & 최적화 3. 인터프리터로써 컴파일된 바이트 코드를 실행 - 가비지 컬렉션 : jvm이..