Algorithm/개념 정리

    [알고리즘 문제 해결 전략] 알고리즘 분석

    알고리즘의 시간 복잡도 분석 좀더 빠른 알고리즘을 만들기 위해선 알고리즘의 속도를 측정할 수 있어야 한다. 두 알고리즘의 속도를 비교하는 직관적인 방법은 해당 알고리즘으로 프로그램을 구현한 뒤 수행시간을 측정하는 것이다. 이 경우 외부요인(하드웨어, OS, Compiler, 문자열 구현방식, 함수 인자의 전달방식)으로 정확하게 측정할 수 없다. 그렇다면 수행시간을 측정하는 방법은 무엇이 있을까? 반복문이 지배한다. 수행시간을 반복문으로 비교 할 수 있다. for문 O(N) | 이중 for문 -> O(N^2) | 3중 for문 O(N^3) 등등 선형 시간 알고리즘 입력크기에 비례해 시간이 선형으로 증가하는 알고리즘 O(N^2) Example Codes 더보기 n부터 m까지 순회하면서 value를 찾는 코드..

    [알고리즘 문제 해결 전략] 1. 문제 해결 시작하기

    1. 문제 해결과 프로그래밍 대회 프로그래밍에서의 문제해결과 프로그래밍 대회 및 참고 사이트에 다룹니다. 더보기 - 프로그래밍은 문제 해결이다. 프로그래밍을 하기 위해선 많은 것을 알아야한다. 자신이 사용하는 언어의 특성, 프로그램이 동작할 하드웨어와 운영체제에 관한 지식, 사용하고 있는 라이브러리들에 대한 유의사항, 프로그램이 사용할 수 있는 최대 메모리와 사용자가 답답하지 않게 하기 위한 시간 제한, 재사용성이 높은 간결한 코드를 작성하기 위한 노력등이 필요하다. 이런 제약 조건과 요구사항을 이해하고 최선의 방법을 찾아내는 능력은 분야를 막론하고 좋은 프로그래머가 되기 위해 필수적이다. 이 책에서는 이런 능력을 문제 해결 능력 이라고 부른다. 하지만 문제 해결 능력을 훈련하기란 굉장히 어렵다. 추상적..

    [알고리즘 문제 해결 전략] 시작하기

    https://book.algospot.com/ 알고리즘 문제 해결 전략 프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략, 구종만 지음, 인사이트, ISBN 978-89-6626-054-6 새 소식 책 소개 은 새로운 알고리즘 책입니다. 종이에 적힌 의사코드 book.algospot.com 알고리즘 서적중에서 매우 좋은책이라고 샀다가 어려워서 고이 모셔뒀던 책을 다시 꺼냈다. 알고리즘은 참으로 어렵지만 좋은 개발자가 되기 위한 필수 사항이라고 생각한다. 현업에서도 어떤 문제를 접했을때 문제의 본질을 알고 이에 적합한 솔루션을 제공하기 위해서, 당연한 얘기지만 알고리즘을 모르는 것 보다는 아는것이 낫다고 생각한다. 프로그래머스 4단계나 leetcode hard단계, 백준 2~30% 정답률의 문제들을 풀..

    클래스란?

    클래스란? 클래스(class)는 서로 다른 여러 데이터형을 자유로이 조합하여 만들 수 있는 자료구조입니다. 클래스에서 배열 구현하기 // 신체검사 데이터용 클래스 배열에서 평균 키와 시력의 분포를 구함 import java.util.Scanner; class PhysicalExamination { static final int VMAX = 21; // 시력의 분포(0.0부터 0.1 단위로 21개) static class PhyscData { String name; // 이름 int height; // 키 double vision; // 시력 //--- 생성자(constructor) ---// PhyscData(String name, int height, double vision) { this.name =..

    배열 복제하기

    배열 복제하기 배열 복제는 다음처럼 clone메서드를 호출하여 간단하게 수행할 수 있습니다. 더보기 배열 이름.clone() // 배열의 복제 다음은 배열을 복제하는 프로그램의 예입니다. // 배열의 복제 배열을 만듭니다. import java.util.Arrays; class CloneArray { public static void main(String[] args) { int[] a = {1, 2, 3, 4, 5}; int[] b = a.clone(); // b는 a를 복제한 배열을 참조 b[3] = 0; // 한 요소만 따로 변경 System.out.println("a = " + Arrays.toString(a)); System.out.println("b = " + Arrays.toString(b)..

    소수 나열하기

    소수 나열하기 어떤 정수 이하의 소수를 모두 나열하는 알고리즘 소수는 자신과 1이외의 어떤 정수로도 나누어 떨어지지 않는 정수이다. 예를 들어 13은 2, 3, ..., 12 가운데 어떤 정수로도 나누어 떨어지지 않습니다. 그러므로 어떤 정수 n이 다음의 조건을 만족하면 소수임을 알 수 있습니다. 더보기 2부터 n - 1 까지의 어떤 정수로도 나누어 떨어지지 않습니다. 만약 나누어 떨어지는 정수가 하나 이상 존재하면 그 수는 합성수(composite number)입니다. 다음은 1,000 이하의 소수를 나열하는 프로그램입니다. // 1,000 이하의 소수를 나열(버전 1) class PrimeNumber1 { public static void main(String[] args) { int counter ..