반응형

자료구조

    Java의 거대 정수를 담을 수 있는 BigInteger

    대학교 학창시절에 BigInteger만들기를 자료구조 시간에 C로 만들어 본적이 있다. 그리고 실질적으로 실무에서는 Long값을 벗어난 데이터를 담아서 사용해본적이 없어 자바의 BigInteger라는 객체가 존재하는지 몰랐다. 매주 진행하는 알고리즘 스터디에서 문제를 풀다가 Long값 이상의 데이터가 필요해서 찾다가 사용하게 되었다. 몇 가지 정리해보자. BigInteger 객체 생성 방법 팩토리 메서드와 기존 constant 객체로써 제공하는 방법으로 BigInteger객체를 만들 수 있다.12345678910// ConstantBigInteger zero = BigInteger.ZERO;BigInteger one = BigInteger.ONE;BigInteger ten = BigInteger.TEN;..

    Java List 인터페이스 중 CopyOnWriteArrayList 소개

    자바에는 크게 4개의 List 인터페이스를 구현한 클래스가 있다. - Vector, ArrayList, LinkedList, CopyOnWriteArrayList 그 중 가장 생소한 이름이 있는데 CopyOnWriteArrayList이다. CopyOnWriteArrayList는 그냥 ArrayList랑 다르길래 화려한 이름을 가지고 있는걸까? ArrayList vs CopyOnWriteArrayList 일반 ArrayList의 경우 스레드에 안전하게 설게되어 있지 않기때문에 만약 스레드 처리가 필요한 List의 경우에 Vector를 사용하거나 ArrayList에 synchroized를 사용하여 처리하였다. 하지만 자바 1.5부터 있던 CopyOnWriteArrayList를 쉽게 이문제를 해결할 수 있다...

    Deque를 직접 구현해보기

    큐는 삽입과 삭제가 리스트의 한쪽 방향에서만 이루어지지만 deque는 리스트의 양쪽 끝 모두에서 이루어질 수 있다. 따라서 양쪽 방향 모두 삽입과 삭제가 이루어질 수 있으므로 기존의 큐나 스택으로 사용할 수 있어 유연하게 사용할 수 있다. 사진출처 : https://dh00023.github.io/algorithm/ds/2018/04/25/algorithm-10/ 이런 Deque를 직접 구현해 보자. 우선 Deque의 기능을 정리한 인터페이스이다.1234567891011121314151617181920212223package practice3; public interface Deque { public void addFirst(T item); public void addLast(T item); public..

    규칙 55 - 신중하게 최적화하라

    모든 프로그래머가 알아둬야 하는 최적화에 관련된 격언이 있다. 1. 맹목적인 어리석음을 비롯한 다른 어떤 이유보다도, 효율성이라는 이름으로 저질러지는 죄악이 더 많다. 2. 97%는 효율성을 잊어버려라. 섣부른 최적화는 모든 악의 근원이다. 그리고 프로그램을 작성하면서 기준을 삼아야 할 내용에 대해 소개한다. [기준] 빠른 프로그램을 만들려고 처음부터 노력하지말고, 좋은 프로그램을 만들려 노력하라. -> 좋은 구조를 가진 프로그램은 빠른게 변경하는데 어렵지 않다. -> 정보은닉의 원칙을 지키는 것이 좋은 구조를 갖는것에 첫 번째 항목이다. 설계를 할 떄는 성능을 제약할 가능성이 있는 결정들을 피하라. -> 특히 통신 API, 프로토콜 정의서는 변경하기 어렵기 때문에, 신중하게 코딩해야한다. API를 설계..

    Stack을 이용한 문장 완성도 판별 프로그램

    개발을 진행하다보면 기본에 대해 잊어갈때가 있다. 잊지 않기위해 오늘 부터 매주 하나씩 자료구조를 이용한 문제를 풀어봐야겠다. 오늘은 Stack 첫번째 시간으로 문장의 완성도를 확인하는 프로그램을 작성하여 보자. [제약사항] - {[(에 대한 괄호들이 정상적으로 닫혀있어야 한다. - 주석 //, /* 안에 포함된 내용은 무시한다. - "" double quote에 들어있는 내용을 무시한다. 간단한 프로그램이라 설명은 생략한다. - Text를 읽고 판별을 진행하는 Main 클래스 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686..

    Stack - 후위 표기법으로 된 식 계산

    1 3 + 4 * 와 같이 후위 표기되어있는 식을 계산하는 프로그램을 stack을 이용해서 만들어라 주의사항 - 피연산자가 너무 많으면 오류를 발생시켜라. - 피연산자가 적어도 오류를 발생시켜라 - 연산자가 사칙연산 이외의 것이 나오면 예외를 발생시켜라 - 결과는 소수점 둘째까지 반올림해서 표현하라. - 예외는 이 프로그램을 위한 예외를 새로 만들어라 구성 - 파일을 읽는 메서드가 담긴 util 클래스 - 동작이 진행되는 Main 클래스 - 이 프로그램의 예외 OperatorException 클래스 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626..

반응형