coding-factory의 등록된 링크

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

Tistory

[수학] 보수 계산법 (1의보수, 2의보수) + 필요한 이유

보수란 보수는 보충을 해주는 수를 의미합니다. 현재의 숫자에서 자릿수가 1단계 올라갈 수 있는 수가 몇인지를 구하시면 됩니다. 보수 구하기 예시 10진수 1의 보수 : 1+9=10 -> 1의 보수 = 9 3의 보수 : 3+7=10 -> 3의 보수 = 7 2진수 1₂의 보수 : 1₂+ 1₂=10₂ -> 1₂의 보수 = 1₂ 10₂의 보수 : 1001₂+0111₂=11110₂ -> 1001₂의 보수 = 0111₂ 컴퓨터에서 보수가 필요한 이유 컴퓨터는 이진수만 이해할 수 있습니다. 그렇다면 음수는 어떻게 표현할 수 있을까요? 음수를 표현하기 위해 보수가 사용됩니다. 컴퓨터에서 보수는 양수를 음수화로 표현하기 위한 방법이 됩니다. 즉, 보충하는 수. 양수에 대한 보수가 음수입니다. 컴퓨터의 CPU는 뺄셈도 모..

Tistory

[C언어/C++] 10진수를 8진수, 16진수로 출력하기

C언어에서는 10진수를 8진수나 16진수로 변환해주는 서식문자를 제공합니다. 8진수는 %뒤에 o를 붙이면 되고 16진수는 %뒤에 x를 붙이면 됩니다. 또한 출력한 값이 8진수인지 16진수인지 %뒤에 #을 붙이면 알 수 있게 출력할수도 있습니다. 그리고 원하는 자릿수까지 0으로 채워서 출력할수도 있습니다. 아래 예제를 확인해주세요. 입력받은 10진수를 8진수, 16진수로 출력하기 #include int main() { int num; printf("정수를 입력해주세요\n"); scanf_s("%d", &num); printf("10진수 : %d\n", num); // 서식문자 : %d printf("8진수 : %o\n", num); // 서식문자 : %o printf("16진수(소문자) : %x\n", n..

Tistory

[C언어/C++] 10진수를 2진수로 변환 출력하기 (비트연산 활용)

8진수나 16진수의 경우와는 달리 C언어에서는 2진수를 출력해줄 수 있는 서식 문자가 없습니다. 그렇기에 2진수는 직접 구해서 출력해야 하는데 일일이 2로 나누어 거꾸로 읽지 않아도 아래와 같이 비트 연산자를 사용하면 쉽게 구할 수 있습니다. 10진수를 2진수로 변환하여 출력하기 (비트연산 활용) #include int main() { unsigned int num; printf("정수를 입력해주세요\n"); scanf_s("%d", &num); printf("2진수 변환 : "); //이진수 출력 for (int i = 7; i >= 0; --i) { //8자리 숫자까지 나타냄 int result = num >> i & 1; printf("%d", result); } } 52를 바이너리로 8자리 숫자까..

Tistory

[Assembly] 어셈블리어 명령어 총정리

명령어 Data Transfer 명령어 설명 MOV Move 데이터 이동 (전송) PUSH Push 오퍼랜드의 내용에 스택을 쌓는다. POP Pop 스택으로부터 값을 뽑아낸다. XCHG Exchange Register / memory with Register 첫번째 오퍼랜드와 두번째 오버랜드 교환 IN Input from AL/AX to Fixed port 오퍼랜드로 지시된 포트로부터 AX에 데이터 입력 OUT Output from AL/AX to Fixed port 오퍼랜드가 지시한 포트로 AX의 데이터 출력 XLAT Translate byte to AL BX:AL이 지시한 데이블의 내용을 AL로 로드 LEA Load Effective Address to Register 메모리의 오프셋값을 레지스터로 ..

Tistory

[Assembly] 어셈블리어 기초 사용법 & 예제 총정리

어셈블리어란? 어셈블리어(assembly language)는 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어입니다. 전류가 흐른다 그렇지 않다로 구성되는 0과 1의 이진수로 프로그램을 하는 기계어는 인간의 관점에서는 컴퓨터가 바로 읽을 수 있다는 점만 빼면 장점이 없는 언어이기 때문에 이를 보완하기 위해 나온 언어가 어셈블리어입니다. 기계어와 명령어가 1:1로 대응되는 단어들로 구성되어 있습니다. 고급언어는 컴파일하는 시간이 오래 걸리는 단점이 있는 반면 저급 언어는 컴퓨터와 가까운 언어이기 때문에 컴파일을 해도 간단한 명령으로 실행돼서 실행 속도가 굉장히 빠릅니다. 하지만 저급 언어는 배우기가 어렵고 유지보수가 힘들다는 이유로 특수한 경우를 제외하고는 사용되지 않고 있습니다. 하지만 임베디드..

Tistory

[수학] 진법 변환 방법 정리 + 소수점 (2진수, 8진수, 10진수, 16진수)

진법이란? 진법이란 수를 표기하는 기수법의 하나로 몇 개의 기본 숫자를 이용하여 수를 표시하는 방법입니다. 자리값이 올라감에 따라서 수가 일정하게 커지는 규칙을 이용하고 수를 표시합니다. 우리가 일반적으로 사용하는 1 ~ 9까지의 숫자를 사용하여 수를 나타내는 방법을 10진법이라고 하며 프로그래밍에서 주로 사용되고 있는 진법은 아래와 같습니다. 위치의 가중치 모든 진법은 숫자의 위치에 따라 가중치가 달라지는 수입니다. 이 성질은 모든 진법에서 동일하게 적용되며 이 식을 사용하면 모든 진법들을 10진법으로 빠르게 바꿀 수 있습니다. 위의 경우 12345라는 10진법이 나오기 아래와 같은 식이 구해져야합니다. 계산식 : (1 * 10⁴) + (2 * 10³) + (3 * 10²) + (4 * 10) + 5 ..

Tistory

[IDE] 이클립스(Eclipse) 폰트 글꼴, 크기 변경하기

이클립스를 사용하는데 글씨가 너무 작아서 글자가 제대로 보이지도 않고 눈에 피로감이 몰려오면 큰일이겠죠. 간단한 설정만으로도 이클립스의 폰트와 크기를 변경하실 수 있습니다. 이번 포스팅에서는 오늘은 이클립스의 글자 폰트와 크기를 바꾸는 방법에 대해서 알아보도록 하겠습니다. 단축키 활용 폰트 사이즈의 경우 단축키만으로도 간단히 조절할 수 있습니다. 에디터 창에 마우스 커서를 가져다 놓고 Ctrl + '+' or '-' 를 눌러주면 폰트 사이즈가 조정됩니다. 이클립스 폰트, 크기 설정하기 1. Window -> Preferences 창으로 들어갑니다. 2. General -> Color and Fonts를 눌러 Color and Fonts로 들어가준 뒤 바꾸고 싶은 언어를 클릭합니다. 전체를 바꾸고 싶으면 ..

Tistory

[IDE] 비주얼 스튜디오 Release, Debug 모드의 차이점

Visual Studio 프로젝트에서 빌드를 하는 방법에는 릴리스(Release)와 디버그(Debug) 방식이 있습니다. 하지만 정확한 차이점은 모르시는 분이 많더군요. 대부분 Debug 버전은 디버깅용으로 Release 버전은 최종 배포용으로 빌드하는 것과 Relase 방식이 Debug 방식보다 빠르다 이 정도로만 알고 있지 이 두 가지의 정확한 차이점은 대부분 알지 못하는 듯하여 두 모드의 핵심적인 차이점 몇 가지를 이 포스팅에서 한번 정리해보고자 합니다. Release에서는 코드 최적화를 하고 Debug에서는 하지 않는다. 프로젝트 속성의 최적화로 들어가 보시면 Release는 위와 같이 최대 최적화로 되어 있는 반면 Debug는 사용 안 함으로 되어있는 것을 확인하실 수 있습니다. 여기서 코드 최..

Tistory

[IDE] 비주얼 스튜디오 어셈블리코드 확인하기 (DisAssembly)

C나 C++과 같은 고급 프로그래밍 언어는 컴파일을 거쳐 어셈블리가 됩니다. C나 C++와 같은 매우 민감한 언어들은 전혀 예상하지 못한 에러들이 자주 발생합니다. 해결방안에 대한 힌트를 찾을 때 상황에 따라서는 어셈블리 코드를 직접 확인해야 할 경우가 있습니다. Visual Studio에서는 컴파일된 어셈블리 코드를 직접 확인할 수 있는 기능을 제공합니다. 어셈블리 창 사용 설정 확인 도구 -> 옵션을 클릭하고 옵션창에서 디버깅 -> 일반에 들어간 뒤 주소 수준 디버깅 사용 체크박스가 체크되어있는지 확인합니다. 이것이 체크되어 있어야 디스 어셈블리 기능의 사용이 가능합니다. 어셈블리 코드 확인(DisAssembly) 디스 어셈블리 창을 보려면 분기점을 설정하고 F5를 눌러 디버그 모드로 실행해야 합니다..

Tistory

[IDE] Visual Studio 테마(Theme) 변경방법

Visual Studio를 처음 설치하면 Default로 적용되어있는 광원이라는 배경 테마(Theme)가 적용되어 있습니다. 그렇다고 해서 꼭 이 테마를 사용해야하는것은 아니고 사용하시는분의 성향에 따라 테마를 바꿔서 적용하실 수 있습니다. Visual Studio도 사용하시는분을 보면 광원 혹은 어둡게(Dark) 테마를 주로 사용하시는 것 같습니다. 오늘은 Visual Studio 테마 변경방법에 대해 알아보도록 하겠습니다. 비주얼 스튜디오(Visual Studio) 테마(Theme) 변경방법 1. 비주얼 스튜디오 상단의 메뉴의 도구 -> 옵션으로 들어갑니다. 2. 환경 -> 일반에서 색 테마를 바꿔주시면 됩니다. 광원은 기본테마 어둡게는 흔히 말하는 다크테마이며 파랑테마를 선택하시면 2010년도쯤 주..

Tistory

[IDE] 이클립스(Eclipse) 테마 변경 (다크모드) 설정방법

이클립스를 처음 설치하면 Defualt로 적용되어있는 Light라는 테마(Theme)가 적용되어 있습니다. 그렇다고 해서 꼭 이 테마만 사용을 해야 하는 것은 아니고 사용자의 기호에 따라 다른 테마도 적용이 가능합니다. 그중에서도 많은 선택을 받고 있는 테마가 다크(Dark) 테마가 아닐까 생각합니다. 경험상 80%정도의 개발자는 기본(Light) 테마를 20% 정도는 다크(Dark) 테마를 사용하셨던 것 같네요. 이 테마를 사용하셨던 개발자분들은 대부분 오래 모니터를 보고 있으면 흰색 화면보다는 검은색 화면이 눈에 피로를 덜 준다라는 생각을 가지고 다크 테마를 사용하셨던 것 같아요. 또한 다크 테마를 포함해 기본적으로 제공되는 테마 이외에도 Marketplace를 통해 여러가지 테마를 적용할 수 있는데..

Tistory

[IDE] 이클립스(Eclipse) 디버깅 하는법

프로그래밍을 하다 보면 필연적으로 각종 오류에 부딪치게 되고 그 오류를 해결하는 과정에서 디버깅은 필수입니다. 디버깅을 얼마나 잘하느냐에 따라 프로그램의 생산성과 개발자의 능력이 좌우되기도 합니다. 그렇기에 모든 IDE에는 디버깅을 할 수 있는 기능들이 아주 잘 되어있습니다. 자바 개발이나 웹 개발을 할 때 많이 쓰이는 이클립스에도 디버깅 기능이 있습니다. 오늘은 이클립스의 디버깅 기능에 대해 포스팅 해보려 합니다. Break Point 지정 디버깅을 진행하기 위해서는 가장 먼저 우선 자신이 조사하고 싶은 시점에 브레이크 포인트를 지정해주어야 합니다. 이클립스 좌측의 라인에서 오류가 의심가는 부분에 더블클릭 or 우클릭 -> Toggle Breakpoint를 누르면 좌측 그림과 같이 조그마한 점이 찍힙니..

Tistory

[IDE] 비주얼 스튜디오(Visual Studio) 디버깅 하는법

코딩을 하는 과정에서 필연적으로 여러 가지 오류가 생기기 마련입니다. 이러한 오류들을 해결하는 과정을 디버깅이라고 합니다. Visual Studio를 포함한 모든 IDE들은 이러한 디버깅 기능을 지원하고 있으며 만약 코드에 오류가 발생한다면 이러한 디버깅 도구 또는 디버거를 사용하여 훨씬 편하게 코드가 잘못된 이유들을 빠르게 파악할 수 있습니다. 그중에서도 특히 Visual Studio의 경우 매우 강력한 디버깅 기능을 제공하고 있어 많은 개발자들이 선호하는 IDE입니다. 오늘은 강력한 Visual Studio의 디버깅 기능에 대해 포스팅해보려 합니다 중단점(Break Point) 설정하기 디버깅을 하기 위해서는 가장 먼저 해야할 일이 중단점을 설정하는 일입니다. 가장 쉽게 중단점을 설정하는 방법은 대상..

Tistory

[IDE] Visual Studio 폰트 글꼴, 크기 변경하기

PC마다 조금씩 차이는 있을 수 있으나 아마 대부분 비주얼 스튜디오(Visual Studio)를 설치하면 기본으로 설정되어 있는 폰트는 돋움체 폰트일 것입니다. 하지만 코딩을 하다보면 필연적으로 여러 가지 특수 기호를 자주 사용하게 되는데 특히 (i l), (. ,), (; :)이 구분이 잘 되는 폰트를 사용하시는 것이 정신적으로 이롭습니다. 여기서 많은 개발자들이 추천하는 폰트는 Consolas입니다. Consolas폰트는 윈도우에서 기본적으로 제공하여 따로 다운을 받을 필요도 없고 간단한 설정만으로도 바꾸실 수 있습니다. 비주얼 스튜디오(Visual Studio) 폰트 글꼴, 크기 변경하기 1. 비주얼 스튜디오 상단의 도구 -> 옵션으로 들어갑니다. 2. 글꼴 및 색에서 원하는 글꼴과 크기, 글꼴 색..

Tistory

[C언어/C++] 구조체 사용법 & 예제 총정리

구조체란? 구조체란 하나 이상의 변수를 묶어 그룹화하는 사용자 정의 자료형입니다. 사용자가 C언어의 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입이며 기본 타입만으로는 나타낼 수 없는 복잡한 데이터를 표현할 수 있습니다. 구조체는 똑같은 변수를 여러번 사용해야 하는 경우에 효과적으로 사용할 수 있습니다. 예를 들어, C언어를 이용해서 콘솔로 간단한 성적 시스템을 만든다고 가정해봅시다. 이 주소록에는 학생의 국어, 수학, 영어 점수를 저장해야 합니다. 만약 구조체를 사용하지 않는다면 여러명의 학생의 성적을 구해야 할 경우 일일이 변수를 계속해서 선언해주어야 할 것입니다. 하지만 구조체를 사용하면 여러개의 변수를 하나로 묶어서 관리할 수 있게 됩니다. 그룹화할 때 같은 자료형을 가진 변수들을 ..

Tistory

[C언어/C++] 구조체 포인터 사용법 & 예제 총정리

구조체에서 포인터가 사용되는 경우는 아래와 같이 크게 3가지로 구분됩니다. 1. 멤버 변수로 포인터 사용하기 2. 구조체 변수로 포인터 사용하기 3. 구조체 간의 상호 참조 멤버 변수로 포인터 사용하기 #include struct Score { int *kor; //국어성적 int *mat; //수학성적 int *eng; //영어성적 }; int main() { int score1 = 100; int score2 = 90; int score3 = 80; struct Score s; s.kor = &score1; s.mat = &score2; s.eng = &score3; printf("국어점수 : %d\n", *s.kor); printf("수학점수 : %d\n", *s.mat); printf("영어점수 ..

Tistory

[C언어/C++] 열거형 enum 사용법 & 예제

열거형이란? 열거형은 사용하면 변수가 갖는 값에 의미를 부여할 수 있고 프로그램 가독성이 향상됩니다. 열거형은 명명된 정수형 상수의 집합으로 구성됩니다. 열거형을 선언하면 컴파일러는 열거형 멤버들을 정수형 상수로 인식합니다. enum 형식의 변수를 인덱싱 식에서 사용할 수 있으며 모든 산술 및 관계형 연산자의 피연산자로 사용할 수 있습니다. 열거형 상수 또는 열거형 형식의 값은 C 언어에서 정수 식을 허용하는 모든 곳에서 사용할 수 있습니다. 열거형(enum) 사용법 열거형 만들기 //문법 enum 열거형 이름{상수 이름}; //ex enum week{SUN, MON, TUE, WED, THU, FRI, SAT}; 열거형을 만드는 방법은 구조체와 비슷한데 구성은 열거형은 열거형 키워드(enum), 열거형..

Tistory

[C언어/C++] 포인터(Pointer) 사용법 & 예제 총정리

포인터란(Pointer)? 포인터는 주소를 저장하는 변수입니다. 기존의 변수는 데이터를 저장하는데 반하여 포인터는 메모리 공간의 주소를 저장합니다. 포인터 변수가 주소를 저장하려면 변수의 주소를 알아야 하는데 변수 이름 앞에 & 연산자를 붙이면 해당 변수의 시작 주소를 반환합니다. 더 나아가서 포인터 변수가 저장하는 변수의 주소에 저장된 값을 참조하려면 * 연산자를 사용합니다. 포인터(Pointer) 변수의 선언 및 사용 포인터 변수도 변수이므로 사용하려면 먼저 선언을 해야합니다. 다음은 포인터 변수의 선언 형식을 나타내고 있습니다. 포인터 변수의 선언은 자료형 다음에 *연산자를 붙이고 포인터 변수의 이름을 쓰게 됩니다. #include int main() { int* p = NULL; int i = 1..

Tistory

[C언어/C++] 함수(Function) 사용법 & 예제

함수(Function)란? 함수는 특정 작업을 수행하는 코드의 집합이라고 정의할 수 있습니다. 반복적으로 수행되는 코드들을 함수로 만들어 사용하면 코드의 재활용성이 높아집니다. 기능들을 분류하여 다양한 각각의 함수로 만들어 사용할 수도 있고 함수 내부에서 또 다른 함수를 호출 할 수도 있는 등의 다양한 이유로 인해 함수를 사용하면 복잡한 기능도 비교적 쉽게 구현할 수 있으며, 구조화 프로그램에 있어 매우 중요한 개념입니다. 함수(Function)의 종류 함수의 종류에는 사용자 정의 함수와 라이브러리 함수가 있습니다. 먼저 사용자 정의 함수는 사용자가 구현하고 싶은 기능을 구현하는 것이며 라이브러리 함수는 우리가 흔히 써오던 printf(), scanf() 같은 함수인데 헤더파일안에 정의되어 있어 원하는 ..

Tistory

[C언어/C++] 함수 포인터 사용법 & 예제 총정리

함수의 주소 변수를 선언하면 메모리 공간이 할당되고 그 공간의 위치가 주소로 존재하듯이 함수를 선언해도 변수와 마찬가지로 메모리에 공간이 할당되며 그 위치를 표현하는 주소가 생겨납니다. C언어 코드는 컴파일이 되면 기계어로 변경되고 프로그램이 실행되면 코드 세그먼트라는 메모리 영역에 위치하게 됩니다. 즉, 함수의 형태는 변경되겠지만 결국 메모리에 저장되기 때문에 주소를 가지게 된다는 의미입니다. #include void print_hello() { printf("Hello, world!\n"); } int main() { // 메모리 상에 저장된 함수의 주소값 printf("함수의 주소값 : %p\n", print_hello); return 0; } 위의 코드의 실행 값과 같이 함수도 주소 값을 가진다는..

Tistory

[Spring] 스프링 부트 게시판 만들기-4 계층형 댓글 만들기

실행화면 (계층형 댓글) 테이블 생성 CREATE TABLE `tb_reply` ( `idx` INT NOT NULL AUTO_INCREMENT, `board_idx` INT, `reply_idx` INT, `contents` TEXT NULL, PRIMARY KEY (`idx`)); 댓글 테이블 tb_reply를 추가해줍니다. idx(댓글 번호), board_idx(글 번호), reply_idx(상위 댓글번호), contents(댓글 내용)입니다. 가장 위에 있는 Root 댓글은 reply_idx가 0이고 하위 댓글들은 reply_idx로 상위댓글의 idx를 참조하도록 설계하였습니다. 소스코드 function 추가 (view.jsp) function drawReply(replys) { $("#cnt")..

Tistory

[C언어/C++] 연산자 우선순위에 대하여

연산자 우선순위란? 연산자 우선순위란 수학 및 컴퓨터 프로그래밍에서 연산의 우선순위는 모호하게 해석가능한 수식에서 어느 연산을 먼저 계산할 것인가를 결정하는 규칙입니다. 예를 들어 수학의 사칙연산을 보면 2+3*2 라는 식이 있을때 *가 +보다 우선순위가 높기때문에 먼저 3*2 = 6이 되고 그다음에 2를 더해 최종 결과값이 8이됩니다. 이처럼 프로그래밍 언어에도 연산자에 대한 우선순위가 존재합니다. 이러한 우선순위를 모르고 개발을 하다보면 전혀 엉뚱한 결과가 도출되기도 하죠. 연산자 우선순위를 모르고 코딩을 하다보면 연산자 우선순위로 인하여 내가 원하는 동작이 하지 않고 엉뚱하게 동작하는 경우가 있습니다. 특히 포인터를 사용할때 많이 발생하는데요, char arr[6] = { "hello" }; cha..

Tistory

[Spring] 스프링 부트 게시판 만들기-1 게시판 리스트 출력

SpringBoot를 활용하여 간단한 게시판을 만들어야 할 일이 있어 급하게 만든 초간단 게시판을 공유합니다. 총 4개의 포스팅으로 작성할 예정이며 전체 소스는 마지막 게시글에서 GitHub링크를 남겨드리도록 하겠습니다. 최소한의 게시판이 돌아가게끔 기본적인 틀만 정해서 구현하였기에 이 게시판을 기초로 살을 붙여나가며 사용하시면 좋을 듯합니다. SpringBoot와 데이터베이스는 MySql을 사용하였고 SpringBoot에서 데이터 베이스 접근은 마이바티스 라이브러리를 사용해 접근했습니다. 주요 기능 1. 게시판 리스트 출력 2. 게시판 글 등록 (이미지 첨부) 3. 게시판 상세보기 4. 댓글과 대댓글 (계층형 댓글) 실행 화면 (게시판 리스트 출력) 테이블 생성 CREATE TABLE `tb_board..

Tistory

[Spring] 스프링 부트 게시판 만들기-2 게시판 글 등록 (이미지 첨부)

실행 화면 (글 등록) 소스 코드 글 등록 화면 (write.jsp) 과제 홈 게시판 글쓰기 제목: 내용: 글쓰기 화면은 위와 같이 제목, 내용, 그리고 이미지 첨부를 할 수 있게끔 만들었습니다. 해당 화면에서 글을 작성하고 글쓰기 버튼을 누르면 writeAction이라는 url로 controller에 요청이 가게 됩니다. 파일 첨부 기능 구현 시 form의 메서드를 post / enctype을 multipart/form-data로, input type="file"로 해주고 컨트롤러에서는 MultipartFile 받아주면 됩니다. Controller (IndexController) @Controller public class IndexController { @Autowired private BoardSe..

Tistory

[Spring] 스프링 부트 게시판 만들기-3 글 상세보기 페이지 만들기

실행 화면 (글 상세보기) 소스코드 글 상세보기 (view.jsp) 과제 홈 게시판 본문 이미지와 제목, 글 내용이 적절하게 보여질 수 있도록 컨트롤을 적절히 배치하고 boardView URL로 Controller에 요청을 보내 image와 title, contents에 조회한 내용들을 삽입하여 보여줍니다. Controller (IndexController) @Controller public class IndexController { @Autowired private BoardService s; @RequestMapping(value="/view", method=RequestMethod.GET) public String view() { return "view"; } @RequestMapping(value..

Tistory

[블로그] 2020년 블로그 결산 (누적 방문자 수 1천만명 돌파)

안녕하세요 코딩팩토리입니다. 코로나와 함께한 2020년도가 끝이 나고 새해가 밝았습니다. 작년에도 제 블로그에 방문해주신 모든 분들께 진심으로 감사드립니다. 개인적으로 작년에 많은 일들이 생겨 블로그를 많이 소홀히 했다는 생각이 듭니다. 블로그 권태기가 와서 일정기간 포스팅을 쉰 적도 있습니다. 또 재미가 아닌 의무감으로 억지로 글을 쓰다 보니 제가 발행하는 포스팅에 점점 영양가가 떨어지고 있다는 생각이 듭니다. 이 부분에 대해서는 진심으로 사과의 말씀을 드립니다. 블로그를 다소 소홀히 했음에도 불구하고 의미 있는 성과가 많이 있었습니다. 이번 포스팅에서는 작년 한 해의 제 블로그의 기록들을 글로 남기고자 합니다. 2020년도 블로그 결산 2020년도 제 블로그를 구글 애널리틱스로 분석한 자료입니다. 사..

Tistory

[Web] 동영상 파일을 GIF(움짤)로 변환하기 (GIF 변환 웹 사이트 사용)

짧은 동영상이라면 영상을 삽입하는것 보다는 GIF파일 (움짤)로 변환해서 활용하는것이 좋을때가 있습니다. 동영상을 GF로 만드는 방법은 크게 동영상을 GIF로 변경해주는 사이트를 사용해주는 방법과 프로그램을 사용하는 방법이 있습니다. 이 두가지 방법 중 사이트를 이용하는 것이 설치도 필요없고 혹여나 프로그램을 다운받으면서 생기는 피해 (바이러스나 악성코드)를 예방할 수 있기에 추천드립니다. 동영상 파일을 GIF로 변환하기 (GIF 변환 웹 사이트 사용) 1. 아래에 링크된 사이트에 접속하여 가장 첫번째있는 탭 Video to GIF를 선택하고 변환 할 파일을 선택한 뒤 Upload video! 버튼을 누릅니다. ezgif.com/video-to-gif 2. 위에 업로드 된 영상을 재생하여 움짤(GIF)파..

Tistory

[Web] 유튜브 화면 비율 문제, 짤림 현상 해결하기 (전체화면)

최근에는 영화나 뮤직비디오 같은 영상들은 기본적인 16:9 비율을 넘어서 영상에 대한 몰입감이 가장 좋다는 21:9 비율로 만들어지는 추세입니다. 또한 이러한 추세에 비례하여 일반 16:9의 비율을 가지고 있는 모니터가 아닌 21:9 비율의 와이드 모니터까지 서서히 판매가 증가되고 있습니다. 저희 집 모니터도 와이드 모니터를 사용하여 영상을 시청하고 있는데요. 하지만 모니터의 비율과는 달리 유튜브에서는 비율을 조정하는 기능이 없어 영상의 겉 부분에 검은색 테두리가 그려져 모니터를 최적의 효율로 사용하지 못하고 있었습니다. 저와 같이 와이드 모니터를 사용하시는 분이라면 유튜브 특히 유튜브에서 구매한 영화등을 시청하다보면 위와 같이 검정색 화면이 거의 반 이상 차지하는 불편함을 느끼시는 분이 있으실 겁니다...

Tistory

[Web] 크롬 원격 데스크톱 설치 및 설정 & 사용법 정리

얼마 전 원격 제어를 해야 할 경우가 생겨 팀뷰어를 설치하려다가 프로그램 설치가 아닌 구글 원격 데스크톱이라는 크롬 확장 프로그램으로 좀 더 가볍게 원격을 할 수 있는 방법을 알게 되어 포스팅으로 작성해보고자 합니다. 크롬 원격 데스크톱은 어느 컴퓨터에서든지, 구글 계정에 등록해 둔 컴퓨터만 있으면 별도의 프로그램 설치 없이 PC 원격 제어가 가능합니다. 심지어, 핸드폰 어플리케이션을 활용하여 핸드폰으로도 컴퓨터를 먼 곳에서 제어가 가능합니다. 크롬 원격 데스크톱 메인 페이지를 보시려면 아래 링크로 들어가시면 됩니다. remotedesktop.google.com/home 크롬 원격 데스크톱 원격 설치 1. 아래 링크로 들어가 로그인을 하고 다운로드 버튼을 눌러 크롬에 원격 데스크톱 확장 프로그램을 설치합..

Tistory

[Git] Git Remote origin already exists 에러해결 remote origin 삭제

깃의 Remote origin already exists 에러는 기존에 연결되어 있는 레파지토리가 다시 새로운 레파지토리에 소스코드를 올리려고 하면 발생되는 에러입니다. 해결방법은 간단합니다. 위와 같이 원격 저장소와의 연결이 되어 있다고 하니 기존의 연결을 끊고 새로 올리고 싶은 곳에 소스코드를 올리면 됩니다. 해결 방법 1. git remote remove origin 명령어를 입력해서 기존에 연결되어 있는 원격 저장소와의 연결을 끊어줍니다. 2. git remote add origin [새롭게 연결할 깃 레파지토리 주소] 명령어를 입력합니다. 3. git remote -v 명령어를 입력해서 로컬 저장소를 원격 저장소에 연결시켜줍니다. 4. git push origin master 명령어를 입력해서 ..

Tistory

[Git] GitHub README 작성법 (마크다운, 이미지, Gif, 코드 블록 사용법)

리드미(README)란? README는 쉽게 말해서 프로젝트 소개글이라고 할 수 있습니다. 일반적으로 디렉토리나 압축 파일에 포함된 기타 파일에 대한 정보를 포함하고 있으며, 일반적으로 소프트웨어와 함께 배포됩니다. 또한 현재 Git과 같은 코드 저장소에서도 해당 파일을 기본값으로 생성되게 하여 해당 저장소에 대한 설명을 기입하도록 유도하고 있습니다. 다른 확장자를 사용할 수도 있겠으나 기본적인 README의 확장자는 md인데 이것은 마크다운(Markdown)의 약자입니다. 만약 리드미 파일이 없다면 아래에 리드미를 작성하는 것을 권장하는 창이 뜹니다. README 작성방법 1. 최근에는 프로젝트를 업로드하면 자동으로 리드미 파일이 생깁니다. 직접 리드미 파일을 만들어서 레파지토리에 Push를 하여도 되..

Tistory

[DB] MySQL 다운로드 / 설치 방법 (for Windows)

MySQL이란? MySQL은 전세계에서 많이 사용하는 빠른 작동과 경쾌함이 장점인 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)입니다. MySQL은 오픈소스로 이루어져있고 여러 운영체제에서 동작이 가능하며 많은 프로그램 언어를 지원한다는 장점이 있습니다. 유료버전도 따로 있으나 대부분은 무료버전을 사용하셔도 큰 무리가 없습니다. MySQL 설치 / 다운로드 방법 1. 오늘은 윈도우 10에서 MySql을 한번 설치해보려고 합니다. 아래에 링크된 사이트로 접속하여 최신버전의 MySql Install 파일을 다운 받습니다. 최소용량으로 설치하려면 2.5M의 installer를 설치해주세요. dev.mysql.com/downloads/installer/ 2. 오라클 계정에 로그인 하라고 하는데 로그인 ..

Tistory

[IDE] Visual Stdio 콘솔창 사라지는 현상 해결하기

비쥬얼 스튜디오에서는 Ctrl + F5를 사용하여 디버깅 하지 않고 시작할 수 있습니다. 이렇게 하면 바로 명령 프롬프트(cmd)창이 실행되면서 결과값을 확인할 수 있죠. 하지만 어떠한 이유인지는 모르겠으나 비쥬얼 스튜디오를 켜고 빈프로젝트를 하고 실행을 시켰는데 콘솔창이 시작과 동시에 계속 꺼졌습니다. 본래는 프로그램이 시작되고 프로그램이 종료되면 cmd창은 꺼지는것이 맞습니다. 하지만 이렇게 콘솔창이 사라지게 되면 짜놓은 소스코드의 결과물을 확인할 수 없기때문에 Visual Studio는 자동으로 프로그램이 종료되기 직전에 프로그램을 멈추어주는것으로 알고 있었는데 어떠한 이유인지는 모르겠으나 이 부분이 제대로 작동이 되지 않고 있었던 것 같습니다. system("pause"); 코드를 마지막에 삽입하..

Tistory

[Network] TCP / UDP의 개념과 특징, 차이점

전송 계층에서 사용되는 프로토콜 (TCP / UDP) TCP와 UDP는 OSI 표준모델과 TCP/IP 모델의 전송계층에서 사용되는 프로토콜입니다. 전송계층은 송신자와 수신자를 연결하는 통신 서비스를 제공하고 IP에 의해 전달되는 패킷의 오류를 검사하며 재전송 요구 제어등을 담당하는 계층입니다. 쉽게 말해 데이터의 전달을 담당한다고 생각하시면 됩니다. TCP와 UDP는 포트 번호를 이용하여 주소를 지정하는것과 데이터 오류검사를 위한 체크섬 존재하는 두가지 공통점을 가지고 있지만 정확성(TCP)을 추구할지 신속성(UDP)을 추구할지를 구분하여 나뉩니다. 데이터를 중요하게 생각하여 확실히 주고받고 싶을 때는 ‘TCP(Transmission Control Protocol)’를 사용합니다. TCP는 통신할 컴퓨터..

Tistory

[Algorithm] 각 정렬의 특징 및 장단점 & 시간복잡도

정렬 별 특징 선택정렬 (Selection Sort) 선택정렬은 앞에서부터 차례대로 정렬하는 방법입니다. 먼저 주어진 리스트 중에 최소값을 찾고 그 값을 맨 앞에 위치한 값과 교체하는 방식으로 진행하는 정렬방법입니다. 코드가 직관적이기에 구현도 비교적 간단합니다. n개 원소에 대해 n개의 메모리를 사용하기에 데이터를 하나씩 정밀 비교가 가능하며 정렬을 위한 비교 횟수는 많으나 교환 횟수는 상당히 적다는 것이 장점인 정렬 방식입니다. 따라서 교환이 많이 이루어져야하는 자료 상태에서 가장 효율적으로 적용될 수 있는 정렬 방식입니다. 선택 정렬이 가장 적합한 자료 상태는 역순 정렬입니다. 즉, 내림차순으로 정렬되어 있는 자료를 오름차순으로 재정렬할 때 최적의 효율을 보여줍니다. 반대로 이미 정렬된 상태에서 소..

Tistory

[Spring] Spring Tools 4 (Spring Boot) 설치 및 환경설정 방법

스프링 부트(Spring Boot)란? 스프링 부트는 스프링 설정에서 반복되는 코드를 싹 빼고 간편하게 이용할 수 있도록 확장된 버전입니다 스프링은 스프링부트와 비교하여 여러가지 장점이 있습니다. 개발을 하며 가장 와닿는 장점은 설정이 매우 간편해졌다는 점입니다. 스프링의 경우 많은 XML설정 파일등을 작성하는 등 설정하기도 힘들고 웹을 구축하기 위해 많은 Dependency 설정을 추가해주는 등 설정을 위한 코드의 양도 굉장히 많았지만 스프링부트에서는 starter 라이브러리 사용으로 많이 간소화 되었습니다. 이렇게 스프링 부트는 반복되는 개발환경 구축을 위한 코드작성등의 노력을 줄여주고 쉽고 빠르게 프로젝트를 설정할 수 있도록 도와줍니다. 또한 Maven보다 강력한 Gradle이라는 빌드배포 툴을 제..

Tistory

[Network] TCP / IP란 무엇인가?

TCP / IP란? TCP/IP(Transmission Control Protocol/Internet Protocol)는 데이터가 의도된 목적지에 닿을 수 있도록 보장해주는 통신 규약입니다. TCP / IP는 이름에서 알 수 있듯 TCP / IP에는 두가지 프로토콜로 이루어져 있으며 인터넷으로 디바이스를 연결하는 네트워크 프로토콜의 집합이며 개별적인 네트워크 프로토콜로 사용될 수도 있습니다. TCP / IP는 인터넷의 기본 통신 언어입니다. 기본적으로 TCP / IP를 사용하면 한 컴퓨터가 데이터 패킷을 컴파일하고 올바른 위치로 전송하여 인터넷을 통해 다른 컴퓨터와 통신 할 수 있습니다. 프로토콜이란? 컴퓨터와 네트워크 기기가 상호간에 통신하기 위해서는 서로 같은 방법으로 통신하지 않으면 안됩니다. 어떻..

Tistory

[Algorithm] 자료구조 그래프(Graph)란 무엇인가?

그래프란? 그래프는 정점과 간선으로 이루어진 자료구조입니다. 정확히는 정점(Vertex)간의 관계를 표현하는 조직도라고 볼수도 있겠습니다. 그런면에서 트리는 그래프의 일종인 셈입니다. 다만 트리와는 달리 그래프는 정점마다 간선이 없을수도 있고 있을수도 있으며 루트 노드, 부모와 자식이라는 개념이 존재하지 않습니다. 또한 그래프는 네트워크 모델 즉, 객체와 이에 대한 관계를 나타내는 유연한 방식으로 이해할 수 있습니다. 실생활에서 다양한 예를 그래프로 표현할 수 있습니다. 대표적으로 지하철 노선도, 도심의 도로등이 있습니다. 이런식으로 활용할 수 있는 방법이 많기에 문제도 다양하게 출제를 할 수 있습니다. 그래프는 알고리즘에서 굉장히 많이 사용됩니다. 특히 그래프를 순회하는 방식인 DFS와 BFS를 잘 알..

Tistory

[Algorithm] DFS 알고리즘 (Depth First Search)

깊이 우선탐색 (DFS)란? DFS는 그래프 전체를 탐색하는 방법중 하나로써 시작점 부터 다음 분기로 넘어가기 전에 해당 분기를 완벽하게 탐색하고 넘어가는 방법입니다. 스택이나 재귀함수를 통해서 구현할 수 있는데 재귀함수가 구현이 간편하기에 대부분 재귀함수로 구현하는것 같습니다. 구현시 주의할점은 노드를 방문시 방문 여부를 반드시 검사해야합니다. 그렇지 않다면 무한루프에 빠질 수 있습니다. [Algorithm] 자료구조 그래프(Graph)란 무엇인가? DFS의 장점 1. 현재 경로상의 노드들만 기억하면 되므로, 저장 공간의 수요가 비교적 적음 2. 목표 노드가 깊은 단계에 있는 경우 해를 빨리 구할 수 있음 3. 구현이 너비 우선 탐색(BFS) 보다 간단함 DFS의 단점 1. 단순 검색 속도는 너비 우선..

Tistory

[Algorithm] BFS 알고리즘 (Breadth-First Search)

너비 우선탐색 (BFS)란? BFS는 그래프 전체를 탐색하는 방법 중 하나로써 루트 노드(혹은 다른 임의의 노드)에서 시작해서 인접한 노드를 먼저 탐색하는 방법입니다. 시작 정점으로부터 가까운 정점을 먼저 방문하고 멀리 떨어져 있는 정점을 나중에 방문하는 순회함으로써 노드를 넓게(wide) 탐색합니다. 주로 두 노드 사이의 최단 경로 혹은 임의의 경로를 찾고 싶을 때 이 방법을 사용합니다. 주로 구현은 큐라는 자료에 이웃하는 정점을 다 담아놓고 차례대로 POP을 하는 방식으로 구현합니다. [Algorithm] 자료구조 그래프(Graph)란 무엇인가? BFS의 장점 1. 노드의 수가 적고 깊이가 얕은 경우 빠르게 동작할 수 있다. 2. 단순 검색 속도가 깊이 우선 탐색(DFS)보다 빠름 3.너비를 우선 탐..

Tistory

[Algorithm] 순열 조합 알고리즘 개념과 예제 (구현)

순열과 조합 실생활 예 순열과 조합의 차이는 순서를 정하느냐 그렇지 않느냐의 차이입니다. 순열 : 중국집 메뉴 5개 중 2개의 메뉴를 순서대로 먹는 경우의 수 조합 : 중국집 메뉴 5개 중 2개의 메뉴를 주문하는 경우의 수 순열이란? 순열이란 서로 다른 n개중 r개를 골라 순서를 고려해 나열한 경우의 수를 말합니다. 예를 들어 어느 중국집에 5개의 메뉴(a,b,c,d,e)가 있다고 해봅시다. 이때 5개의 메뉴(a,b,c,d,e)중 2개의 메뉴를 순서대로 먹는 경우의 수는 몇가지가 있을까요? 먼저 첫번째로 먹을 메뉴를 정하려면 이때 첫번째 메뉴가 될 수 있는 경우의 수는 5가지 입니다. 그리고 나서 첫번째 메뉴로 지정된 메뉴를 제외한 나머지 4가지의 메뉴로 두번째로 먹을 메뉴를 선택한다고 가정하면 이때의 ..

Tistory

[Algorithm] 알고리즘 시간복잡도에 대하여

시간복잡도란? 시간 복잡도란 특정 알고리즘이 어떤 문제를 해결하는데 걸리는 시간을 의미합니다. 같은 결과를 가져오는 프로그래밍 소스도 어떻게 작성하느냐에 따라 걸리는 시간이 달라질 수 있습니다. 같은 결과를 나타내는 소스라면 최대한 시간이 적게 걸리는 좋은 소스입니다. 그렇기에 더 효율적인 알고리즘을 구성하기 위해서 시간 복잡도의 측면을 고려하고 중요하게 봅니다. 특히 최근 알고리즘 문제 해결에서 대부분 실행시간을 정해놓고 그 시간안에 소스가 돌아가야 정답으로 체크하기에 시간복잡도의 중요성이 더더욱 커졌다고 볼 수 있습니다. [Algorithm] 알고리즘 공간복잡도에 대하여 빅-오 표기법 시간 복잡도에는 여러 개념이 있지만 그중에서 ‘아무리 많이 걸려도 이 시간 안에는 끝날 것‘의 개념이 제일 중요합니다..

Tistory

[Algorithm] 알고리즘 공간복잡도에 대하여

공간복잡도란? 공간복잡도(Space Complexity)란 프로그램의 성능을 분석하는 방법 중 하나로, 작성한 프로그램이 얼마나 많은 공간(메모리)을 차지하느냐를 분석하는 방법입니다. 하지만 최근에는 컴퓨터 성능의 발달로 인해 메모리의 여유 공간이 충분하다못해 넘치기 때문에 공간복잡도의 중요성이 예전에 비해서 많이 낮아졌습니다. 시간복잡도의 경우 알고리즘을 잘못 구성하였을 경우 결과값이 나오지 않거나 현저하게 느린속도가 나오기에 최근에는 공간복잡도보다는 시간복잡도를 우선시하여 프로그램을 작성합니다. [Algorithm] 알고리즘 시간복잡도에 대하여 공간복잡도 계산법 (빅-오) int a = 10; 일반적으로 공간이 하나씩 생성되는것을 1이라고 표현합니다. 위의 공간복잡도는 O(1)입니다. int get_..

Tistory

[Java] 큰 숫자(실수) 다루기 BigDecimal 사용법 & 예제 총정리

BigDecimal을 사용해야 하는 이유 Type 범위 float 1.4E-45 ~ 3.4028235E38 double 4.9E-324 ~ 1.7976931348623157E308 소수점을 저장할 수 있는 타입인 float과 double은 소수점의 정밀도가 완벽하지 않아 값의 오차가 생길 수 있습니다. 특히 소수점 이하의 수를 다룰 때 double과 float은 사칙연산 시 정확한 값을 출력하지 않을 수 있는데요. 그 이유는 내부적으로 수를 저장할 때 이진수의 근사치를 저장하기 때문입니다. 그렇기에 미세한 숫자의 변동도 허용하지 않는 특히 돈과 소수점을 다룬다면 BigDecimal을 사용하셔야 합니다. BigDecimal은 속도는 느리지만 숫자가 어긋날 가능성을 미연에 방지할 수 있습니다. BigDeci..

Tistory

[수학] 순열, 조합 공식 총정리

팩토리얼 ( ! ) 팩토리얼이란 서로 다른 n개를 나열하는 경우의 수를 의미합니다. 기호로는 n! 이렇게 쓰고 계산은 n부터 1씩 줄여나가면서 1이 될때까지의 모든 수를 곱합니다. 순열 ( nPr ) 순열이란 서로 다른 n개중에 r개를 선택하는 경우의 수를 의미합니다. (순서 상관 있음) 조합 ( nCr ) 조합이란 서로 다른 n개중에 r개를 선택하는 경우의 수를 의미합니다. (순서 상관 없음) 중복 순열 ( nπr ) 중복 순열이란 중복 가능한 n개중에서 r개를 선택하는 경우의 수를 의미합니다. (순서 상관 있음) 중복 조합 ( nHr ) 중복 조합이란 중복 가능한 n개중에서 r개를 선택하는 경우의 수를 의미합니다. (순서 상관 없음) 같은 것이 있는 순열 순열이 같은 것이 포함된 원소들을 나열하는 ..

Tistory

[Java] PriorityQueue(우선순위 큐) 클래스 사용법 & 예제 총정리

우선순위 큐(Priority Queue)란? 일반적으로 큐는 데이터를 일시적으로 쌓아두기 위한 자료구조로 스택과는 다르게 FIFO(First In First Out)의 구조 즉 먼저 들어온 데이터가 먼저 나가는 구조를 가집니다. PriorityQueue는 먼저 들어온 순서대로 데이터가 나가는 것이 아닌 우선순위를 먼저 결정하고 그 우선순위가 높은 엘리먼트가 먼저 나가는 자료구조입니다. 우선순위 큐는 힙을 이용하여 구현하는 것이 일반적입니다. 데이터를 삽입할 때 우선순위를 기준으로 최대힙 혹은 최소 힙을 구성하고 데이터를 꺼낼 때 루트 노드를 얻어낸 뒤 루트 노드를 삭제할 때는 빈 루트 노드 위치에 맨 마지막 노드를 삽입한 후 아래로 내려가면서 적절한 자리를 찾아서 옮기는 방식으로 진행됩니다. Priori..

Tistory

[Java] 큰 숫자(정수) 다루기 BigInteger 사용법 & 예제 총정리

BigInteger를 사용해야 하는 이유 Type 범위 int -2,147,483,648 ~ 2,147,483,647 long -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 int는 메모리 크기는 4byte로 표현할 수 있는 범위는 -2,147,483,648 ~ 2,147,483,647이고 long은 메모리 크기는 8byte로 표현할 수 있는 범위는 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807입니다. 그 범위를 넘어서게 되면 모두 0으로 출력이 됩니다. 숫자의 범위가 저 범위를 넘을 경우는 잘 없겠지만 프로그램 개발 특히 돈과 관련된 개발이나 알고리즘 문제를 풀 때 항상 최악의 상황을 고려해야 하므로..

Tistory

[Java] 자바 Stack 클래스 사용법 & 예제 총정리

Stack이란? 자료 구조 중 하나인 Stack의 사전적 정의는 '쌓다', '더미'입니다. 상자에 물건을 쌓아 올리듯이 데이터를 쌓는 자료 구조라고 할 수 있습니다. Stack의 가장 큰 특징은 나중에 들어간 것이 먼저 나오는 (Last In First Out)의 형태를 띈다는 것입니다. 이 방식을 가진 자료구조인 Stack을 활용하여 다양한 문제를 해결할 수 있습니다. 자바에서 Stack은 java.util.Stack을 import하면 바로 사용할 수 있습니다. Stack의 특징 1. 먼저 들어간 자료가 나중에 나옴 LIFO(Last In First Out) 구조 2. 시스템 해킹에서 버퍼오버플로우 취약점을 이용한 공격을 할 때 스택 메모리의 영역에서 함 3. 인터럽트처리, 수식의 계산, 서브루틴의 복..

Tistory

[Java] 자바 Queue 클래스 사용법 & 예제 총정리

Queue란? Queue의 사전적 의미는 무엇을 기다리는 사람, 차량 등의 줄 혹은 줄을 서서 기다리는 것을 의미하는데 이처럼 줄을 지어 순서대로 처리되는 것이 큐라는 자료구조입니다. 큐는 데이터를 일시적으로 쌓아두기 위한 자료구조로 스택과는 다르게 FIFO(First In First Out)의 형태를 가집니다. FIFO 형태는 뜻 그대로 먼저 들어온 데이터가 가장 먼저 나가는 구조를 말합니다. Enqueue : 큐 맨 뒤에 데이터 추가 Dequeue : 큐 맨 앞쪽의 데이터 삭제 Queue의 특징 1. 먼저 들어간 자료가 먼저 나오는 구조 FIFO(First In FIrst Out) 구조 2. 큐는 한 쪽 끝은 프런트(front)로 정하여 삭제 연산만 수행함 3. 다른 한 쪽 끝은 리어(rear)로 정..

Tistory

[Algorithm] 유클리드 호제법 - 최대공약수(GCD) 구하기

유클리드 호제법이란? 유클리드 알고리즘(Euclidean algorithm)은 2개의 자연수의 최대공약수를 구하는 알고리즘입니다. 비교대상의 두 개의 자연수 a와 b에서(단 a>b) a를 b로 나눈 나머지를 r이라고 했을때 GCD(a, b) = GCD(b, r)과 같고 "r이 0이면 그때 b가 최대공약수이다."라는 원리를 활용한 알고리즘입니다. ex) GCD(24,16) -> GCD(16,8) -> GCD(8,0) : 최대공약수 = 8 구현 (C / C++) 재귀 함수 활용 int GCD(int a, int b) { if(b==0)return a; else return GCD(b,a%b); } 반복문 활용 int GCD(int a,int b){ while(1){ int r = a%b; if(r==0) r..

Tistory

[Algorithm] 에라토스테네스의 체 - 소수 구하기 (범위)

에라토스테네스의 체란? 고대 그리스의 수학자 에라토스테네스가 만들어 낸 소수를 찾는 방법이며 이 방법은 마치 체로 치듯이 수를 걸러낸다고 하여 '에라토스테네스의 체'라고 부릅니다. 특정 숫자의 배수는 소수가 아니라는 법칙에 착안하여 2 ~ N까지의 숫자에서 숫자들의 배수를 모두 제거한 뒤 제거되지 않은 숫자를 소수로 판별하는 방식이며 일종의 노가다 방식이라 상당히 무식한 방법이지만 이 방식이 프로그래밍에서는 상당히 효율적인 방법론이 됩니다. 에라토스테네스의 체는 반대로 2부터 배수들을 지워나가는 방식이기 때문에 숫자마다 일일이 약수가 있는지 검사할 필요가 전혀 없고, 이미 지워진 숫자는 바로 건너뛰면 되니 실행시간이 매우 짧습니다. 특정 범위에서의 모든 소수를 찾을때 가장 효율적인 알고리즘 에라토스테네스..

Tistory

[C++] STL vector 사용법 & 예제 총정리

vector란? vector는 C++ 표준 라이브러리(Standard Template Library)에 있는 컨테이너로 사용자가 손쉽게 사용하기 위해 정의된 class입니다. vector의 가장 큰 장점은 동적으로 원소를 추가할 수 있으며 크기가 자동으로 늘어난다는 점입니다. 쉽게 말해 크기가 가변적으로 변하는 배열이라고 할 수 있습니다. 속도적인 측면에서는 배열에 비해 떨어지지만 메모리를 효율적으로 관리할 수 있다는 장점이 있어 굉장히 많이 사용합니다. vector는 배열과 마찬가지로 원소들이 하나의 메모리 블록에 연속하게 저장됩니다. 그렇기에 원소가 추가되거나 삽입될 때 메모리 재할당이 발생할 수 있고 상당한 부하가 발생하게 된다는 점은 단점으로 꼽히고 있습니다. vector 구조 vector를 생성..

Tistory

[C++] STL stack 사용법 & 예제 총정리

stack이란? 자료 구조 중 하나인 stack의 사전적 정의는 '쌓다', '더미'입니다. 상자에 물건을 쌓아 올리듯이 데이터를 쌓는 자료 구조라고 할 수 있습니다. stack은 나중에 들어간 것이 먼저 나오는 (Last In First Out)의 형태를 띠는 자료구조입니다. 이 방식이 stack의 가장 큰 특징이자 스택을 사용하는 이유라고 할 수 있습니다. stack은 C++ 표준 라이브러리(Standard Template Library)에 있는 정의되어 있어 필요할 때마다 만들어 사용하지 않고 include 하여 사용하시면 편리합니다. stack의 특징 1. 먼저 들어간 자료가 나중에 나옴 LIFO(Last In First Out) 구조 2. 시스템 해킹에서 버퍼오버플로우 취약점을 이용한 공격을 할 ..

Tistory

[C++] STL queue 사용법 & 예제 총정리

queue란? queue의 사전적 의미는 무엇을 기다리는 사람, 차량 등의 줄 혹은 줄을 서서 기다리는 것을 의미하는데 이처럼 줄을 지어 순서대로 처리되는 것이 큐라는 자료구조입니다. 큐는 데이터를 일시적으로 쌓아두기 위한 자료구조로 스택과는 다르게 FIFO(First In First Out)의 형태를 가집니다. FIFO 형태는 뜻 그대로 먼저 들어온 데이터가 가장 먼저 나가는 구조를 말합니다. queue는 C++ 표준 라이브러리(Standard Template Library)에 있는 정의 되어 있어 필요할 때마다 만들어 사용하지 않고 include 하여 사용하시면 편리합니다. Enqueue : 큐 맨 뒤에 데이터 추가 Dequeue : 큐 맨 앞쪽의 데이터 삭제 queue의 특징 1. 먼저 들어간 자료..

Tistory

[C언어/C++] 문자열 비교 strcmp, strncmp 함수 사용법 & 예제 + 구현

두 개의 문자열이 같은지 비교하고 싶다면 strcmp, strncmp함수를 사용하면 됩니다. strcmp함수는 비교대상 문자열인 string1 string2이 같은지 비교합니다. strncmp는 문자열을 비교한다는 것에서 일정 길이만큼 비교할 수 있는 옵션이 추가된 함수입니다. 위의 두 함수는 널로 끝나는 스트링에서 작동합니다. 그렇기에 함수에 대한 스트링 인수는 스트링 끝을 나타내는 널 문자(\0)를 포함해야 합니다. strcmp() : 두 문자열이 같으면 0을, 같지 않으면 0이 아닌 값을 반환합니다. strncmp() : 두 문자열의 원하는 길이만큼 같으면 0을, 같지 않으면 0이 아닌 값을 반환합니다. 두 함수의 리턴값은 비교 대상의 어떤 문자열이 더 크냐에 따라 달라지게 되는데 문자열의 크기는 ..

Tistory

[C++] STL 정렬 sort 함수 사용법 & 예제 (오름차순 , 내림차순)

정렬이 필요할때마다 직접 만들어서 사용할수도 있겠지만 매번 만들어서 사용하기는 번거롭습니다. 간편하게 정렬을 하고 싶다면 직접구현보다는 헤더를 include하여 그 안에 있는 sort()함수를 사용하시면 간편하게 정렬을 할 수 있습니다. sort() 함수는 C++ STL에서 제공하는 함수로써 각종 알고리즘 문제를 풀 때도 활용할 수 있어 자주 쓰이는데, 이 함수의 시간 복잡도는 nlogn입니다. 이 함수는 intro sort라는 정렬 방식을 바탕으로 구현되어 있는데 이 방식은 quick sort를 기반으로 heap sort와 insertion sort를 섞은 방식으로 최악의 경우 n^2의 시간 복잡도를 가지는 quick sort와는 달리, 최악의 경우에도 nlogn을 보장하는 정렬 알고리즘입니다. 배열의..

Tistory

[C언어/C++] 문자열 자르기 (strtok, strtok_s) 함수 사용법 & 예제 +구현

C언어 혹은 C++에서 자신이 원하는 문자열을 잘라낼 때 사용하는 함수로 strtok라는 함수가 있습니다. 이 함수는 string token의 약자로 인자 값으로 전달받은 매개변수를 구분자로 하여 문자열을 잘라내어 return 합니다. 만약 더 이상 자를 문자열이 없다면 NULL을 반환합니다. 문자열을 자르는 방식 M Y N A M E I S T O M \0 M Y \0 N A M E I S T O M \0 M Y \0 N A M E \0 I S T O M \0 M Y \0 N A M E \0 I S \0 T O M \0 C언어 또는 C++에서 문자열은 \0으로 종료가 되게 되어있습니다. 그렇기에 인자로 받은 문자열에서 구분자가 있는 위치를 널 포인트로 치환해줌으로써, 문자열을 끊기게 만듭니다. 예를 들..

Tistory

[C언어,C++] 문자열 합치기 strcat, strncat 함수 사용법 & 예제 +구현

strcat와 strncat 함수는 두 문자열을 이어 붙여주는 기능을 합니다. 첫 번째 주소에 저장된 문자열에 두 번째 주소에 저장된 문자열을 붙여서 반환합니다. 두 함수는 문자열을 이어 붙인다는 형태는 동일하며 strncat는 일정 길이만큼 추가할 수 있는 옵션이 추가된 함수입니다. 위의 두 함수는 널로 끝나는 스트링에서 작동합니다. 그렇기에 함수에 대한 스트링 인수는 스트링 끝을 나타내는 널 문자(\0)를 포함해야 합니다. strcat() :문자열A에 원하는 문자열B를 문자열A 뒤쪽에 이어 붙이는 함수 strncat() :문자열A에 원하는 문자열B의 n개를 문자열A 뒤쪽에 이어 붙이는 함수 strcat(s2, s1)과 같이 strcat 함수에 최종 결과가 나올 문자열과 붙일 문자열을 넣습니다. 위의 ..

Tistory

[C언어/C++] 문자열 입출력 gets, puts함수 사용법 & 예제

문자열을 입력받을 때 gets, puts 함수는 문자열 입출력 함수입니다. gets는 문자열을 입력받고 puts는 문자열을 출력할 때 쓰이는 함수입니다. 특히 gets나 puts를 사용하면 Enter단위로 문자열을 입력받기때문에 한줄씩 입력받을 수 있습니다. gets 함수 사용법 gets(str); str : 입력받을 문자형 배열 gets는 문자열을 입력을 받는 함수입니다. 문자열만 입력받을 수 있고, 개행을 기준으로 입력받습니다. 작동방식은 사용자로부터 문자열을 입력받아 함수의 인자로 명시한 주소의 메모리에 저장한 뒤 입출력 버퍼가 비어있는지 확인하고 비어있다면 문자 혹은 문자열을 입력받아 입출력 버퍼에 저장합니다. ※ 최근에는 gets대신에 gets_s를 사용하라고 권장하는 추세입니다. gets는 버..

Tistory

[C언어/C++] 문자열 길이 구하기 strlen 함수 사용법 & 예제 + 구현

strlen은 의 헤더 파일 안에 있는 함수로써(c++일 경우 cstring) const char* 타입의 문자열을 받아서 해당 문자열의 길이를 반환하는 함수입니다. 여기서 문자열의 길이라고 하는 것은 문자열을 구성하는 문자의 개수를 의미하며 문자열 마지막에 붙어 있는 종료 NULL문자인 \0을 제외한 문자 개수입니다. (공백 포함) 위와 같이 10의 크기를 가진 배열안에 있는 Hello라는 문자열은 5의 길이를 리턴하게 됩니다. strlen 함수 형식 size_t strlen(const char *str); 인자값 : const char* 타입의 문자열 리턴값 : 문자열의 길이(양수) ※ size_t는 해당 시스템에서 어떤 객체나 값이 포함할 수 있는 최대 크기의 데이터를 표현하는 타입으로 반드시 un..

Tistory

[C언어/C++] 문자열 복사하기 strcpy, strncpy 함수 사용법 & 예제 + 구현

C언어에서 문자열을 복사하고 싶다면 strcpy이나 strncpy함수를 사용하시면 됩니다. 두 함수의 차이는 복사할 문자열의 길이를 설정하느냐만 다를 뿐 기본적으로 문자열을 복사한다는 것은 같습니다. strcpy() : 대상 문자열 전체를 복사한다. strncpy() : 대상 문자열을 일정 길이만큼 복사한다. strcpy, strncpy 함수 형식 char* strcpy(char * dest, const char* src); char* strncpy(char* dest, const char* src, size_t num); dest : 복사를 받을 대상의 시작 주소 src : 복사를 할 원본의 시작 주소 num : 복사를 할 문자의 개수 ※ size_t는 해당 시스템에서 어떤 객체나 값이 포함할 수 있는..

Tistory

[C언어] scanf 사용법 int형 정수 한글자씩 입력받기

scanf()는 기본적으로 공백(space)이나 개행(enter)을 기준으로 입력을 받기에 공백이나 개행 없이 한 줄로 쭉 입력을 한다면 입력이 정상적으로 이루어지지 않습니다. 하지만 scanf("%1d",&temp)와 같이 %1d를 사용하면 붙어있어도 한 번에 한 개씩 입력받을 수 있습니다. scanf 함수 정수 한글자씩 입력받기 #include int main() { //배열 int arr[10]; //입력 //입력값 : 0123456789 for(int i=0;i

Tistory

[C언어] scanf 사용법 char형 문자 입력 시 공백 무시하기

문자열을 scanf()함수로 입력을 받게 된다면 공백도 하나의 문자로 인식하여 같이 입력을 받게 됩니다. 입력시 공백(space)를 무시하고 싶다면 " %c" 이런식으로 한글자를 띄워서 명시해주셔야 합니다. scanf 함수 char형 문자 입력 시 공백 무시하기 #include int main() { //배열 char arr[10]; //입력 //입력값 a b c d e f g h i j for(int i=0;i

Tistory

[일상] 알고리즘 잡스 수강 후기 -9 (손진호 대표님 특강5)

금일 특강의 주제는 이때까지 진행했었던 알고리즘 문제를 같이 풀어보는것이 아닌 면접 스킬에 대한 강의였다. 알고리즘 잡스 대표님께서 삼성에서 면접관으로 수행하셨던 경험이 있으셔서 면접관으로 있었던 썰 듣는게 재미있었다. 면접의 포인트 3가지 기업의 인재상 1. 열정 2. 창의혁신 3. 인간미, 도덕성 기업의 규모가 크면 클 수록 기업의 인재상에 대해 매우 구체화 하고 회사의 임직원들에게 해당 기업의 인재상을 적절하게 주입시키려고 노력한다. 예를들어 삼성의 인재상은 위와 같은데 어떠한 인재를 뽑아야 할것인가를 기준으로 하고 뽑기에 기업의 인재상과 나를 일치시키려고 노력하자 2. 자기소개와 마지막으로 하고 싶은 말 신입일 경우 패기있고 열정적인 말투가 필요 마지막으로 하고싶은말이 없다 -> 열정이 없어보임 ..

Tistory

[일상] 알고리즘 잡스 수강 후기 -10 (마무리)

2020년 8월 24일 총 8주간의 알고리즘 잡스의 몰입캠프가 종료되었다. 두달이라는 짧은시간 동안 내 나름대로 유의미한 성장을 이루었다고 생각된다. 예전에는 엄두도 못내는 문제들도 어떻게 접근해야 하는지 알게되었고 풀 수 있게 되었다. 물론 지금 내 실력으로 명문높은 기업들의 코딩테스트에 단번에 합격할 수 있다 장담은 못하지만 나는 애초부터 알고리즘 잡스를 수강할때 기업의 코딩테스트에 통과하자라기보다는 그냥 순수하게 알고리즘 자체를 잘 하고 싶어 수강을 한 케이스기 때문에 나의 초기 목적은 완벽하게 이루었다고 생각한다. 8주라는 시간동안 확실히 혼자하는것보다는 높은 성과를 얻어낸것 같다. ※ 혹시나 이 글을 보고 알고리즘 잡스의 몰입캠프의 수강을 고민하고 있는 사람이 있다면 추천하고 싶다. 1. 알고리..

Tistory

[일상] 알고리즘 잡스 수강 후기 -7 (LV 20 달성)

알고리즘 잡스에서의 커리큘럼은 크게 3가지 구성되어 있다. 1. 프로그래밍 언어 (if문 for문 배열등등) 2. 자료구조 (자료를 어떻게 저장할 것인가?) 3. 알고리즘 (저장되어 있는 자료들을 활용하여 의미 있는 결과를 만드는 법) Part1 프로그래밍 언어 레벨 1 ~ 레벨 10까지는 프로그래밍 공부한다. 기초적인 배열, 함수, 정렬, 재귀 함수의 활용과 시간 복잡도, 이진 탐색까지 배운다. 거의 1주일 만에 여기까지 진도를 나간 것 같다. 진도가 나가는 속도가 굉장히 빠르기 때문에 만약 알고리즘 잡스 학원을 올 생각이 있다면 기초적인 프로그래밍 언어의 활용 정도는 배우고 오는 것이 좋을 듯하다. Part2 자료구조 레벨 11 ~ 레벨 14까지는 그래프를 제외한 스택, 큐, 트리, 힙 등의 자료구조..

Tistory

[일상] 알고리즘 잡스 수강 후기 -8 (후반기)

지금까지 배운 내용들을 복습한다는 생각으로 단계별로 못 풀고 지나쳤던 문제들을 다 풀어나가고 있다. 이 문제들을 처음 접할 때는 어렵다고 느꼈었는데 지금 다시 풀어보니 가볍게 풀리는 문제들이 많아서 자신감이 생긴다. 알고리즘 잡스를 시작하고 나서 실력이 많이 향상되었음을 느낀다. 예전에는 어떻게 풀어야 할지 감이 잡히지 않는 문제들도 어떻게 해결해야 하는지 알게 되었으며 문제도 풀어나가고 있다. 새로운 과정 추가 학습과정이라는 새로운 과정이 개설되었다. 일단 내 계획은 지금까지 못 풀었던 문제들을 전부 다 Clear하고 추가 학습과정으로 넘어가는 것을 목표로 하고 있다. 요즘은 특별한 일 없이 계속 알고리즘 문제만 풀고 매주 목요일 시험치고 이 패턴을 계속 반복하고 있어 포스팅할 내용이 딱히 없다. 알고..

Tistory

[일상] 알고리즘 잡스 수강 후기 -4 (손진호 대표님 특강2)

7/18 토요일 알고리즘 잡스를 시작한 지 2주일이 되었다. 지난주 토요일 하루만 특별히 알고리즘 잡스 대표님의 특강이 있는 줄 알았는데 알고 보니 매주 토요일마다 특강이 진행되는 듯하다. 오늘도 지난주와 마찬가지로 알고리즘 잡스 대표님의 특강이 있다고 한다. 알고리즘 책을 받고 설계 30분을 한 뒤 온라인 특강을 시작하였다. 특강의 내용은 저번 주와 마찬가지로 문제가 주어졌을 때 어떻게 문제에 접근을 하고, 설계를 하고 풀이를 하는지에 대한 설명이었다. 이번 주 특강 문제는 "회전 탑"이라는 문제이고 저번 주 문제였던 "회전판과 로봇"처럼 다양한 알고리즘이 한 군데 혼합되어있는 문제였다. 손진호 대표님은 이 문제를 풀기 위해서는 한 문제를 여러 개의 문제로 쪼개서 보는 능력을 키워야 한다고 강조하셨다...

Tistory

[일상] 알고리즘 잡스 수강 후기 -5 (손진호 대표님 특강3)

7/25 토요일 이번 주 토요일에도 대표님 특강이 있었기에 저번 주와 마찬가지로 알고리즘 책을 받고 문제를 어떻게 풀지 설계를 30분간 진행하였다. 알고리즘 책은 위와 같이 생겼다. 공기청정기 문제 풀이 오늘 특강 시간에 풀어 볼 문제는 공기청정기라는 문제이다. 이번 문제는 다소 난해하여 어떠한 문제인지 파악하는데만 오랜시간이 걸렸다. 문제의 핵심 부분만 발췌하자면 위와 같다. 오늘 풀어 볼 공기청정기라는 문제를 간략히 설명하자면 2차원 공간에 공기청정기가 있고 그 공기청정기에서 매 초마다 위쪽으로는 시계방향 아래쪽으로는 반시계 방향으로특정 조건을 만족하면 신선한 공기가 확산이 되어 공기의 상태가 변하게 된다. 이렇게 바뀐 공기의 상태값을 기반으로 입력받은 N초 뒤의 모든 공기 상태 값의 총합을 구하는 ..

Tistory

[일상] 알고리즘 잡스 수강 후기 -6 (손진호 대표님 특강4)

8/1 토요일 오늘 특강에서 풀 문제는 밀렵 꾼이라는 문제이다. 밀렵꾼이라는 문제는 지정된 맵 안에 다수의 멧돼지들이 움직이고 있고 손전등을 확인하여 눈앞에 있는 멧돼지들을 포획하고 여러 번 이 동작을 반복하였을 때 잡은 멧돼지들의 무게의 합을 구하는 문제이다. 코치님이 삼성 입사 문제로 나왔던 문제라고 하니 이 정도 문제만 쉽게 풀 수 있다면 알고리즘을 어느 정도 준비가 되었구나 하는 기준이 될 수 있다고 하셨다. 입력값으로 멧돼지들의 위치와 움직이는 방향, 달리는 속력, 돼지의 무게가 주어지고 만약 같은 격자 안에 2마리 이상의 멧돼지가 있을 경우 가장 무게가 많이 나가는 멧돼지가 다른 멧돼지를 잡아먹는다는 옵션도 있다. 문제만 들어서는 그렇게 난이도가 있는 문제인것 같지는 않았지만 문제의 제한시간이..

Tistory

[일상] 알고리즘 잡스 수강 후기 -2 (+ 한국조폐공사 코딩테스트)

정말 오래간만에 공부다운 공부를 하고 있는 것 같다. 딱히 특정 기업에 취업하고 싶다기보다는 그냥 순수하게 알고리즘 자체를 잘하고 또 인정받고싶다. 아직 눈의 띄게 성장한 부분은 없다. 공부를 시작한 지 얼마 되지 않았기도 하고 나에게 알고리즘에 대한 절대적인 공부의 양이 부족하기 때문이다. 부족한 실력을 늘리기 위해 공부의 양을 늘렸다. 공부 시간을 늘릴 수밖에 없었던 것이 개인별로 7/11일 토요일까지 Lv7까지 진도를 나가는 것으로 예정이 되어 있었기에 어떻게든 따라갔어야 했다. 월요일 Lv4에 머물러 있었지만 화요일, 수요일을 활용하여 Lv6까지 먼저 예습을 해왔다. 이대로라면 토요일까지 Lv7까지 나가는 진도에 대한 걱정은 안 해도 될 것 같다. 알고리즘 잡스에서는 매주 목요일, 토요일마다 시험..

Tistory

[일상] 알고리즘 잡스 수강 후기 -3 (손진호 대표님 특강)

7/11 토요일 알고리즘 잡스를 시작한 지 오늘로 꼭 1주일 되는 날이다. 오늘은 알고리즘잡스 대표님의 특강이 있다고 한다. 특강 이전에 알고리즘 책도 주셨다. 알고리즘 잡스에서 만든 알고리즘 책이었는데 안에 내용이 괜찮아 보여 실제로 책을 시중에 낸다 해도 나름 잘 팔릴 거 같은 느낌을 받았다. 특강 방식은 YouTube를 통한 원격 강의였다. 온라인 강의를 많이 본 적이 있기에 나는 오프라인 강의보다 오히려 이러한 강의 방식이 더 귀에 잘 들어오는 것 같다. 가끔씩 이렇게 특강이 있을 듯하다. 특강의 내용은 "회전판과 로봇"이라는 문제를 푸는 것인데 대표님이 문제를 어떻게 접근하는지, 설계를 어떻게 할 것인가와 어떠한 알고리즘이 필요한지, 필요한 알고리즘은 어떻게 구현할 것인지에 대한 설명을 해주셨다..

Tistory

[Web] 간단하게 코드를 짜고 컴파일 할 수 있는 사이트(Tutorialspoint)

개발자나 코딩을 배우는 학생들이라면 알고리즘 연습이나 간단한 코드를 짜고 실행해보고 싶을 때가 종종 있으실겁니다. 이럴때 간단한 코드 한줄을 실행해보기 위해 무거운 프로그램들을 깔기는 시간도 많이 걸리고 환경을 세팅하기도 귀찮습니다. 이럴때 웹 컴파일러를 사용하면 간단하게 코드를 짜고 실행할 수 있습니다. Tutorialspoint(https://www.tutorialspoint.com/) 이곳에서는 거의 모든 언어를 작성하고 컴파일 할 수 있습니다. 그리고 회원가입하면 작성한 코드도 저장할 수 있습니다. 자신이 작성하고 싶은 언어를 클릭한 후 코드를 작성하고 상단에 Execute 버튼을 눌러주면 오른쪽 Result 창에 컴파일 된 결과가 나오게 됩니다. 하지만 대부분의 웹 컴파일러들은 속도가 느리기에 ..

Tistory

[일상] 알고리즘 잡스 수강 후기 -1 (몰입캠프 시작)

언제부터일까? 나의 개발 능력의 발전은 멈춘 것만 같다. 뛰어난 개발자가 되고 싶어 학교에서 공부도 열심히 했고 실무경험도 2년 반이나 쌓았지만 아직도 모르면 도움을 요청해야 하는 그저 그런 개발자 신세에서 벗어나지 못하고 있다. 무엇이 문제였을까? 가만히 생각해보면 지금까지 나는 공부를 하는 척만 해왔지 진짜 공부를 해본 적이 없었던 것 같다. 지금까지 나는 공부라기보다는 돈을 벌기 위한 행위에만 집중해왔던 게 아닐까? 개발자의 길을 걸어가면서 느끼는 것이 있다. 개발자로서 행복하고 싶다면 실력이 있어야 한다는 것을 나 스스로에게 당당해야 한다. 어떻게 보면 개발은 문제가 생기고 그것을 해결해나가는 과정의 연속이라고 볼 수 있다. 그런 면에서 본다면 개발자로서 가져야 할 중요한 역량 중 하나에 문제를 ..

Tistory

[Java] 자바 스트림(Stream) 사용법 & 예제

스트림(Stream)이란? 스트림은 자바8부터 추가된 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자입니다. Iterator와 비슷한 역할을 하지만 람다식으로 요소 처리 코드를 제공하여 코드가 좀 더 간결하게 할 수 있다는 점과 내부 반복자를 사용하므로 병렬처리가 쉽다는 점에서 차이점이 있습니다. [Java] 람다식(Lambda Expressions) -> 사용법 & 예제 Iterator과 Stream의 코드 비교 ArrayList list = new ArrayList(Arrays.asList(1,2,3)); Iterator iter = list.iterator(); while(iter.hasNext()) { int num = iter.next(); System.out.p..

Tistory

[Java] 자바 어노테이션(Annotation) 만들기 & 활용법

어노테이션(Annotation)이란? 자바에서 어노테이션은 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종을 말합니다. 보통 @기호를 앞에 붙여서 사용하며 JDK 1.5 버전 이상에서부터 사용이 가능합니다. 자바 어노테이션은 클래스 파일에 임베디드되어 컴파일러에 의해 생성된 후 자바 가상머신에 포함되어 작동합니다. 어노테이션은 메타데이터라고 볼 수도 있습니다. 메타데이터란 어플리케이션이 처리해야 할 데이터가 아니라 ,컴파일 과정과 실행 과정에서 코드를 어떻게 컴파일하고 처리할것인지를 알려주는 정보입니다. 어노테이션의 사용처 1. 컴파일러에게 코드 문법 에러를 체크하도록 정보를 제공 2. 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보를 제공 3. 실행 시 특정 기..

Tistory

[Java] 스레드(Thread) 안전하게 종료 시키는법 (interrupt)

스레드는 자신의 run()메소드가 모두 실행되면 자동으로 종료됩니다. 하지만 경우에 따라서는 실행중인 스레드를 종료할때도 있을텐데요. 스레드를 즉시 종료시키기 위해서 stop() 메소드를 제공하고 있는데, 이는 실제로 잘 사용하지 않습니다. 그 이유는 stop() 메소드는 쓰레드가 사용 중이던 자원들이 불완전한 상태로 남겨지기 때문입니다. interrupt() 메서드를 활용하여 스레드(Thread)안전하게 종료하기 가장 안전하게 스레드를 정상 종료시키려면 interrupt() 메소드를 사용하면 됩니다. interrupt() 메소드는 스레드가 일시 정지 상태에 있을 때 InterruptedException 예외를 발생시키는 역할을 합니다. 여기서 주목할 점은 interrupt() 메소드를 이용하기 위해서는..

Tistory

[Java] 데몬 스레드(보조 스레드) 사용법 & 예제

스레드의 종류 스레드는 일반 스레드(Normal Thread)와 데몬 스레드(Daemon Thread) 두 가지 종류로 나눠집니다. 데몬 스레드란? 데몬 스레드는 주 스레드의 작업을 돕는 보조적인 역할을 수행하는 스레드입니다. 주 스레드가 종료되면 데몬 스레드는 강제적으로 자동종료됩니다. 그 이유는 주 스레드의 보조 역할을 수행하는데 주 스레드가 종료되면 데몬 스레드의 존재가 의미 없어지기 때문입니다. 이 점을 제외하면 데몬 스레드는 일반 스레드와 크게 차이는 없습니다. 이처럼 데몬 스레드는 간단히 말해 자신을 만드는 스레드의 종속되어있는 스레드라고 생각하면 되며 데몬 스레드를 만들려면 Thread 클래스의 setDaemon()에 true 값을 넣어 주면 됩니다. 간단한 예제 import java.awt..

Tistory

[Java] 제네릭(Generic) 사용법 & 예제 총정리

제네릭을 사용해야하는 이유 제네릭 타입을 사용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있기 때문입니다. 자바 컴파일러는 코드에서 잘못 사용된 타입 때문에 발생하는 문제점을 제거하기 위해 제네릭 코드에 대해 강한 타입 체크를 합니다. 실행 시 타입 에러가 나는것보다는 컴파일 시에 미리 타입을 강하게 체크해서 에러를 사전에 방지하는 것이 좋습니다. 또 제네릭 코드를 사용하면 타입을 국한하기 떄문에 요소를 찾아올 때 타입 변환을 할 필요가 없어 프로그램 성능이 향상되는 효과를 얻을 수 있습니다. ArrayList list = new ArrayList(); //제네릭을 사용하지 않을경우 list.add("test"); String temp = (String) list.get(0)..

Tistory

[Java] 멀티 스레드의 우선순위 결정하기 (setPriority)

멀티 스레드란? 멀티스레드란 응용 프로그램 실행 시 동시에 다수의 처리를 병행하기 위하여, 여러 개의 처리 단위인 스레드를 생성하여 운영하는 방법을 말합니다. 멀티 스레드는 동시성 또는 병렬성으로 실행됩니다. 동시성이란 머맅 작업을 위해 하나의 코어에서 멀티 스레드가 번갈아가며 실행하는 성질을 말하고 병렬성은 멀티 작업을 위해 멀티 코어에서 개별 스레드를 동시에 실행하는 성질을 말합니다. 싱글 코어 CPU를 이용한 멀티 스레드 작업은 병렬적으로 실행되는 것처럼 보이지만 사실은 번갈아가며 실행하는 동시성 작업입니다. 멀티 스레드의 우선순위 정하기 멀티스레드의 순서를 정하는 것을 스레드 스케줄링(thread scheduling)이라고 합니다. 스레드 스케줄링 방식에는 우선순위(priority)방식과 순환 할..

Tistory

[Java] 스레드(Thread)를 잠시 일시정지 시키는 법 (sleep)

실행중인 스레드를 잠시 멈추게 하고 싶다면 Thread 클래스의 정적 메소드인 sleep() 메소드를 사용하면 됩니다. Thread.sleep()메소드를 호출한 스레드는 주어진 시간 동안 일시 정지 상태가 되고 다시 실행 대기 상태로 돌아갑니다. 사용법 (Thread.sleep) try{ Thread.sleep(1000); }catch(InterruptedException e){ e.printStackTrace(); } 매개값에는 얼마 동안 일시 정지 상태로 있을것인지 밀리세컨드 (1/1000) 단위로 시간을 알려주면 됩니다. 위와 같이 1000이라는 값을 주면 스레드는 1초동안 일시 정지 상태가 됩니다. 일시 정지 상태에서 주어진 시간이 되기전에 interrupt() 메소드가 호출되면 Interrupt..

Tistory

[Windows] 윈도우10 로그인 암호(비밀번호) 변경 방법

윈도우10에서는 보안을 위해 설치시 로그인 패스워드 등록을 의무화 하고 있습니다. 로그인 암호만 설정해줘도 모르는 사람들이 내PC를 사용한다던지 PC를 확인하는등의 불상사를 예방할 수 있습니다. 모든 암호는 오래 사용하면 보안에 취약해지므로 주기적인 패스워드 변경은 필수입니다. 그렇기에 로그인 암호도 생각날때마다 주기적으로 교체해주는것이 좋습니다. 이번 포스팅에서는 윈도우10 로그인 패스워드 변경방법에 대해 알아보려합니다. 로그인 패스워드 변경 방법 1. [Windows Key] + [I]를 눌러 WIndows 설정창에 들어간 뒤 계정 버튼을 누릅니다. 2. 좌측탭에서 로그인 옵션탭을 클릭하고 비밀번호의 변경 버튼을 클릭합니다. 3. 현재 설정되어있는 로그인 암호를 입력한 뒤 다음을 누릅니다. 4. 자신..

Tistory

[Windows] 윈도우10 로그인 암호(비밀번호) 설정 방법

윈도우를 설치할 때 패스워드를 등록하는 절차를 그냥 건너뛰게 되면 PC에 로그인 암호가 걸리지 않습니다. 로그인 암호가 걸려있지 않으면 타인이 내 PC를 자유롭게 사용할 수 있습니다. 보통 편의를 위해 카카오톡, 네이버아이디등 각종 ID를 자동 로그인으로 설정해두고 많이들 사용하는데 이럴 경우 여러 가지 사고가 발생할 가능성이 높습니다. 그렇기에 여러사람이 같이 사용하는 공간에 있는 PC라면 로그인 암호를 설정하는 것이 좋습니다. 이번 포스팅에서는 윈도우10에서 로그인 암호를 설정하는 방법에 대해 알아보려 합니다. 윈도우10 로그인 암호(비밀번호) 설정 방법 1. [Windows Key] + [I] 키를 눌러 Windows 설정에서 계정을 클릭합니다. 2. 좌측탭에서 로그인 옵션을 클릭하고 비밀번호 추가..

Tistory

[Windows] 윈도우10 화면 녹화 방법 (윈도우 자체 내장기능)

가끔 자신이 플레이하는 게임 영상을 찍고 싶거나 자신이 만든 파워포인트 PPT 발표자료를 영상으로 만들고 싶을 때가 종종 있습니다. 이럴 때 자신이 보고 있는 컴퓨터(PC) 화면을 영상으로 만들어야 하는데요. PC 화면을 녹화하려면 프로그램을 다운받아야 했지만 윈도우10에서는 화면을 녹화할 수 있는 기능이 자체적으로 내장되어 있습니다. 자주 자신의 PC화면을 영상화시켜야 하는 상황이 아니라면 이 기능을 활용하여 영상을 만드는 것이 편리합니다. 좀더 전문적인 녹화를 위해 프로그램을 사용하고싶다면 아래 글을 참고해주세요. [Windows] 무료 화면 녹화 프로그램 OBS Studio 설치 & 초기세팅 윈도우 10 화면 녹화 방법 녹화 화면 설정 1. [ Windows Key ] + [ I ]를 눌러 Wind..

Tistory

[Windows] 윈도우10 로그인 암호(비밀번호) 제거하는 방법

윈도우10에서는 보안설정을 위해서 로그인 시 암호 등록을 의무화하고 있습니다. 이러한 보안설정이 필요한 부분이 맞지만 부팅할 때마다 매번 암호를 입력하는 것은 다소 번거로운 부분이 있습니다. 특히 자취방등과 같은 나 혼자만 사용이 가능한 장소에 있는 PC는 본인 외에는 사용할 수 있는 사람이 없기에 굳이 로그인 암호를 걸어둘 필요가 없고 로그인 암호는 그저 컴퓨터 부팅에 있어 하나의 절차만 추가되는 꼴이 되어버립니다. 이런 경우에는 그냥 로그인 암호를 제거하고 사용하는 것이 편리합니다. 이번 포스팅에서는 윈도우10에서 로그인 암호를 제거하는 방법에 대해서 알아보도록 하겠습니다. 자동 로그인 설정으로 패스워드 입력절차 생략하기 암호는 해제하지 않고 자동 로그인 설정으로 암호 입력 화면을 스킵하는 방법입니다..

Tistory

[Windows] PC최적화 프로그램 고클린 설치 / 다운로드 & 사용법

PC를 사용하다 보면 각종 광고 프로그램들과 액티브 프로그램 등이 설치되어 컴퓨터가 엉망이 되어버리곤 합니다. 이때 가장 좋은 해결책은 포맷을 하는 것이겠지만 포맷을 하게 되면 자료도 백업해야 하고 필수 유틸리티들도 새로 깔아야 하고 그렇게 만만한 일이 아니죠. 그렇기에 오늘은 포맷대신 사용할 수 있는 간단한 프로그램을 추천하고자 합니다. 바로 고클린이라는 PC 최적화 프로그램입니다. 고클린은 하드디스크 최적화 기능을 포함해서 익스플로러 최적화, 액티브 프로그램 삭제, 컴퓨터 사용시간 체크 등 다양한 기능을 갖춘 컴퓨터 관리 프로그램입니다. 고클린은 개인, 기업, 공공기관 모두 무료로 사용 가능합니다. PC 최적화 프로그램 고클린 설치 / 다운로드 방법 1. 아래 링크를 클릭하고 고클린 설치 파일을 다운..

Tistory

[Windows] 무료 화면 녹화 프로그램 OBS Studio 설치 & 초기세팅

OBS Studio란? OBS Studio는 방송과 녹화를 둘 다 할 수 있는 프로그램입니다. 아프리카TV나 트위치로 개인방송을 BJ들이 실제로 많이 사용하시고 있습니다. OBS Studio는 자유 소프트웨어로 되어 있기 때문에 소스 코드를 자유롭게 고쳐 쓸 수도 있어 자기 마음대로 커스터마이징을 할 수 있고 플러그인도 많습니다. 플러그인을 추가하면 해상도, 서버 선택 등 방송 관련 설정을 할 수 있고 게임화면 구석에 웹캠 화면이나 광고 이미지 등의 삽입도 할 수 있는등 굉장히 다양한 설정을 지원합니다. 반디캠으로도 녹화 및 방송을 할 수 있긴 하지만 고사양 게임을 녹화 시 반디캠 보다는 OBS Studio의 싱크가 안정적이므로 반디캠보다는 OBS Studio를 사용하시는것을 추천드립니다. 화면 녹화프로..

Tistory

[Windows] 윈도우10 절전 모드, 화면보호기 시간 변경 & 해제 방법

윈도우10에는 장기간 사용이 없으면 전력 소모를 아끼기 위해 자동으로 모니터 화면 절전모드나 화면 보호기 기능에 들어가게끔 되어 있습니다. 전력 소모면에서만 본다면 굉장히 좋은 기능이겠지만 굳이 전력을 아낄 필요가 없는 PC인데 절전모드로 넘어가는 텀이 너무 짧으면 굉장히 불편합니다. 경우에 따라서는 아예 절전모드나 화면보호기를 없애버리는 것이 좋을 때도 있을 것입니다. 이번 포스팅에서는 윈도 10에서 화면 절전모드로 넘어가는 시간의 조절 방법과 절전모드로 아예 안 넘어가도록 하는 방법에 대해 소개하려 합니다. 윈도우10 화면 절전 모드 시간 세팅 / 해제 방법 1. 바탕화면 오른쪽 클릭 -> 개인설정을 클릭합니다. [Windows Key] +[ i ] 키를 눌러 Windows 설정 -> 개인설정으로 들..

Tistory

[Windows] 라인(LINE) PC버전 설치 / 다운로드 방법

라인은 네이버에서 출시한 라인(LINE)은 NHN(네이버 + 한게임)이라는 회사에서 2011년 6월 23일에 출시한 모바일 메신저입니다. 현재는 네이버와 한게임이 서로 분할함에 따라 네이버 측에서 사업을 영위해가고 있습니다. 대한민국에서 서비스는 2011년 8월 31일부터 시작했으며 현재 국내에는 카카오톡에 밀려 조그마한 시장점유율을 가지고 있지만 해외시장을 포함한 점유율은 라인이 카카오톡 보다 훨씬 앞서있습니다. 라인도 카카오톡과 마찬가지로 PC와 연동해서 사용할 수 있습니다. 이번 포스팅에서는 PC라인의 설치방법에 대해 알아보려 합니다. 라인(LINE) PC버전 설치 / 다운로드 방법 1. 아래 링크에 들어가 Windows버전 다운로드하기 버튼을 클릭합니다. https://line.me/ko/down..

Tistory

[Windows] 무료 압축 프로그램 반디집 설치 / 다운로드 방법

PC를 사용하다 보면 내가 가지고 있는 파일을 제3의 공간으로 전송을 해야 할 때가 종종 있습니다. 이럴 때 파일을 통째로 보내면 시간이 굉장히 많이 들지만 파일을 압축해서 보낸다면 전송시간을 많이 아낄 수 있습니다. 압축 프로그램중 알집이 가장 유명하지만 사용 시 몇 가지 문제점이 있습니다 우선 4G 이상의 고용량 압축은 EGG라는 이스트소프트에서 자체 제작한 확장자로 압축할 수밖에 없게 강제하고 있습니다. 이렇게 되면 해당 압축파일을 해제할 때는 알집이 아니고서는 다시 풀 수가 없게 됩니다. 그리고 위의 도표와 같이 압축/압축해제 시간이 다른 프로그램에 비해 빠른편도 아닙니다. 또한 알집은 가정에서는 무료이지만 회사에서는 유료인 프로그램입니다. 사용하다가 라이선스 문제가 발생하면 난처한 상황에 처할 ..

Tistory

[블로그] 티스토리 블로그 애드센스 수익 월 100만원 달성 후기

2020년 5월 기준 티스토리 블로그 "코딩팩토리"를 시작한 지 약 2년 반 만에 애드센스만으로 월 수익 100만원을 달성하였습니다. 지금까지 저는 연말마다 블로그 결산 및 애드센스 수입 공개라는 글을 쓰면서 블로그 수익을 공개하여 왔습니다. [블로그] 2018년 블로그 결산 및 애드센스 수입공개 [블로그] 2019년 블로그 결산 및 애드센스 수입 공개 수익이 크지 않았을 때는 저의 수익을 공개하는 부분이 크게 어렵지 않았으나 수익이 조금씩 늘어남에 따라 수익금을 공개하기가 조금 꺼려지게 되는 것이 사실입니다. 아마 이 블로그의 수익을 공개하는 글은 이 글이 마지막이 되지 않을까 싶습니다. 그럼에도 불구하고 이렇게 마지막으로 수익금을 공개하는 이유는 최근 직장인들 부업 열풍과 함께 티스토리 블로그로 돈을..

Tistory

[블로그] 티스토리 블로그 일일 방문자 (1만명, 2만명, 3만명)에 따른 수익변화

티스토리를 하다 보면 가장 크게 착각하시는 부분이 하나 있습니다. 방문자수가 늘어나면 광고단가가 급격히 상승하여 블로그 수익이 정비례로 늘어나지 않고 기하급수적으로 늘어날 것이라는 착각입니다. 많은 분들이 방문자가 늘어나면 수익이 기하급수적으로 증가할 것이라는 왼쪽 그래프로 생각합니다. 하지만 실제 방문자 대비 애드센스 수익 추이는 방문자가 늘어남에 따라 수익이 정비례하게 늘어나는 오른쪽 그래프가 정답입니다. 방문자별 애드센스 수익 티스토리를 하다 보면 가장 먼저 목표로 세우는 것이 일일 방문자 천명입니다. 단도직입적으로 말하자면 일일 방문자 천명일 때 평균적으로 1달러 ~ 2달러 정도를 벌어들일 수 있습니다. 이렇게 생각하면 방문자만 명의 블로그 2만 명의 블로그 혹은 그 이상의 블로그도 그 수익을 쉽..

Tistory

[Java] 자바 HashMap 사용법 & 예제 총정리

HashMap 이란? HashMap은 Map 인터페이스를 구현한 대표적인 Map 컬렉션입니다. Map 인터페이스를 상속하고 있기에 Map의 성질을 그대로 가지고 있습니다. Map은 키와 값으로 구성된 Entry객체를 저장하는 구조를 가지고 있는 자료구조입니다. 여기서 키와 값은 모두 객체입니다. 값은 중복 저장될 수 있지만 키는 중복 저장될 수 없습니다. 만약 기존에 저장된 키와 동일한 키로 값을 저장하면 기존의 값은 없어지고 새로운 값으로 대치됩니다. HashMap은 이름 그대로 해싱(Hashing)을 사용하기 때문에 많은 양의 데이터를 검색하는 데 있어서 뛰어난 성능을 보입니다. 위 그림과 같이 HashMap은 내부에 '키'와 '값'을 저장하는 자료 구조를 가지고 있습니다. HashMap은 해시 함수..

Tistory

[Java] 자바 TreeMap 사용법 & 예제 총정리

TreeMap이란? TreeMap은 이진트리를 기반으로 한 Map 컬렉션입니다. 같은 Tree구조로 이루어진 TreeSet과의 차이점은 TreeSet은 그냥 값만 저장한다면 TreeMap은 키와 값이 저장된 Map, Etnry를 저장한다는 점입니다. TreeMap에 객체를 저장하면 자동으로 정렬되는데, 키는 저장과 동시에 자동 오름차순으로 정렬되고 숫자 타입일 경우에는 값으로, 문자열 타입일 경우에는 유니코드로 정렬합니다. 정렬 순서는 기본적으로 부모 키값과 비교해서 키 값이 낮은 것은 왼쪽 자식 노드에 키값이 높은 것은 오른쪽 자식 노드에 Map.Etnry 객체를 저장합니다. TreeMap은 일반적으로 Map으로써의 성능이 HashMap보다 떨어집니다. TreeMap은 데이터를 저장할 때 즉시 정렬하기..

Tistory

[Java] 자바 HashSet 사용법 & 예제 총정리

HashSet이란? HashSet은 Set 인터페이스의 구현 클래스입니다. 그렇기에 Set의 성질을 그대로 상속받습니다. Set은 객체를 중복해서 저장할 수 없고 하나의 null 값만 저장할 수 있습니다. 또한 저장 순서가 유지되지 않습니다. 만약 요소의 저장 순서를 유지해야 한다면 JDK 1.4부터 제공하는 LinkedHashSet 클래스를 사용하면 됩니다. Set 인터페이스를 구현한 클래스로는 HashSet과 TreeSet이 있는데 HashSet의 경우 정렬을 해주지 않고 TreeSet의 경우 자동정렬을 해준다는 차이점이 있습니다. Set의 가장 큰 장점은 중복을 자동으로 제거해준다는 점입니다. 만약 한 편의점에서 오늘 방문한 손님의 총숫자를 계산하고 싶을 경우도 있을 것입니다. 이럴 경우 오늘 하루..

Tistory

[Java] 자바 TreeSet 사용법 & 예제 총정리

TreeSet이란? JDK 1.2부터 제공되고 있는 TreeSet은 HashSet과 마찬가지로 Set 인터페이스를 구현한 클래스로써 객체를 중복해서 저장할 수 없고 저장 순서가 유지되지 않는다는 Set의 성질을 그대로 가지고 있습니다. 하지만 HashSet과는 달리 TreeSet은 이진 탐색 트리(BinarySearchTree) 구조로 이루어져 있습니다. 이진 탐색 트리는 추가와 삭제에는 시간이 조금 더 걸리지만 정렬, 검색에 높은 성능을 보이는 자료구조입니다. 그렇기에 HashSet보다 데이터의 추가와 삭제는 시간이 더 걸리지만 검색과 정렬에는 유리합니다. TreeSet은 데이터를 저장할 시 이진탐색트리(BinarySearchTree)의 형태로 데이터를 저장하기에 기본적으로 nature ordering..

Tistory

[Java] 자바 Vector 사용법 & 예제 총정리

Vector란? Vector는 ArrayList와 동일한 내부구조를 가지고 있습니다. ArrayList와 마찬가지로 Vector내부에 값이 추가되면 자동으로 크기가 조절되며 그다음 객체들은 한 자리씩 뒤로 이동됩니다. 하지만 모든 것이 다 똑같은 것은 아니고 Vector와 Arraylist의 한가지 다른 점이 있는데 Vector는 동기화된 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 이 메소드들을 실행할 수 없고, 하나의 스레드가 실행을 완료해야만 다른 스레드들이 실행할 수 있습니다. 그래서 멀티 스레드 환경에서 안전하게 객체를 추가하고 삭제할 수 있습니다. Vector의 단점 (ArrayList와의 비교) 벡터는 항상 동기화되는 장점이자 단점을 가지고 있습니다. 스레드가 1개일때도 동기화를 하기..

Tistory

[Java] 자바 ArrayList 사용법 & 예제 총정리

ArrayList란? ArrayList는 List 인터페이스를 상속받은 클래스로 크기가 가변적으로 변하는 선형리스트입니다. 일반적인 배열과 같은 순차리스트이며 인덱스로 내부의 객체를 관리한다는점등이 유사하지만 한번 생성되면 크기가 변하지 않는 배열과는 달리 ArrayList는 객체들이 추가되어 저장 용량(capacity)을 초과한다면 자동으로 부족한 크기만큼 저장 용량(capacity)이 늘어난다는 특징을 가지고 있습니다. ArrayList 사용법 ArrayList 선언 ArrayList list = new ArrayList();//타입 미설정 Object로 선언된다. ArrayList members = new ArrayList();//타입설정 Student객체만 사용가능 ArrayList num = n..

Tistory

[Java] 자바 LinkedList 사용법 & 예제 총정리

LinkedList란? 연결 리스트(LinkedList)는 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식의 자료구조입니다. 데이터를 담고 있는 노드들이 연결되어 있고, 노드의 포인터가 이전 노드와 다음 노드와의 연결을 담당합니다. Node는 LinkedList에 객체를 추가하거나 삭제하면 앞뒤 링크만 변경되고 나머지 링크는 변경되지 않습니다. 중간에 데이터를 추가나 삭제하더라도 전체의 인덱스가 한 칸씩 뒤로 밀리거나 당겨지는 일이 없기에 ArrayList에 비해서 데이터의 추가나 삭제가 용이하나, 인덱스가 없기에 특정 요소에 접근하기 위해서는 순차 탐색이 필요로 하여 탐색 속도가 떨어진다는 단점이 있습니다. 그러므로 탐색 또는 정렬을 자주 하는 경우엔 배열을 사용하고 데이터의 추가/삭제..

Tistory

[Java] 자바 배열 정렬하기(오름차순, 내림차순) Arrays.sort()

자바에서 배열이나 리스트를 정렬하려고 한다면 java.util.Arrays 클래스의 sort() 메서드를 사용하시면 따로 정렬 로직을 짜지 않아도 한번의 메소드 호출로 간편하게 배열이나 리스트를 정렬할 수 있습니다. Arrays클래스는 배열의 복사, 항목 정렬, 검색과 같은 배열을 조작 기능을 가지고 있습니다. 배열의 오름차순 정렬 Arrays.sort()메서드의 매개값으로 기본 타입 배열이나 String배열을 지정해주면 자동으로 오름차순 정렬이 됩니다. 기본타입 배열 오름차순 정렬 import java.util.Arrays; public class Sort{ public static void main(String[] args) { int arr[] = {4,23,33,15,17,19}; Arrays.s..

1 2 3 4 5 6 7 8 9 10