1. 배열과 리스트의 관계 배열은 인덱스를 통해 데이터를 순차적으로 저장할 수 있다. 그리고 JVM은 배열이 생성될 때, 크기를 반드시 알아야만 하기 때문에 초기 생성 시, 반드시 크기를설정해주어야 한다. ArrayList는 특정 타입의 값들을 인덱스를 통해 순차적으로 저장되있는 컬렉션이다. ArrayList는 크기 지정에 한계가 없으므로, ArrayList를 사용하기 전에 크기를 반드시 지정할 필요가 없다. ArrayList의 기본 크기는 10이고, ArrayList 크기의 50% 씩 증가한다. (10, 15, 22 ...) 그렇다면 ArrayList는 어떻게 동적으로 계속해서 크기를 늘릴 수 있을까?! 기존에 ArrayList에 저장된 데이터를 복제할 때, 크기를 50% 증가시킨 ArrayList의 ..
1. 절차지향 프로그래밍 vs 객체지향 프로그래밍 절차지향 프로그래밍은 순차적인 처리가 중요하며, 프로그램 전체가 유기적으로 연결되도록 구현하는 프로그래밍 기법이다.컴퓨터가 작업을 처리하는 방식과 비슷하기 때문에 객체지향 언어로 구현된 프로그램보다 처리속도가 빠르다는 장점을 가지고 있습니다.하지만, 절차지향 프로그래밍에서는 순서가 중요하기 때문에 변경 및 수정에는 많은 어려움이 있습니다. 반면 객체지향 프로그래밍은 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들이 서로 메세지를 전달받으며 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다. 각각의 모듈들이 분할되었기 때문에 유지보수 및 코드의 재사용성 가능하다. 캡슐화, 상속, 추상화, 다형성(캡! 상추다)..
1. Java 구현 import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringBuilder sb = new StringBuilder(); int n = Integer.parseInt(br.readLine()); for(int i = 0; ..
1. Java 구현 package Q1024; import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); String[] input = br.readLine().split(" "); int N = Integer.parseInt(input[0]); int L = Integer.parseInt(input[1]); boolean f..
1. Java 구현 package Q1094; import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); int n = Integer.parseInt(br.readLine()); System.out.println(getResultByStack(n));..
1. Java 구현 import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); int n = Integer.parseInt(br.readLine()); List list = new ArrayList(); list.add("1"); list.add("2..
스트트래티지 패턴은 알고리즘 군을 정의하고 각각을 캡슐화여 교환하고 재사용할 수 있도록 만드는 전략이다. 스트래티지 패턴을 활용하면 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다. 이 내용만 봐서는 다소 이해하기 힘들 수 있다. 아래 다이어그램을 보자! 현재 Duck 클래스가 있고, Duck 클래스를 상속받는 MallardDuck, RedheadDuck 두 클래스가 존재한다. 두 클래스는 Duck 의 특성과 동일하기 때문에 상속을 통해구현이 되어 있다. 상속을 사용했기 때문에 상위 클래스의 메소드를 그대로 사용할 수 있어, 코드의 중복성 제거 및 코드의 재사용을 기대할 수 있다.그러나 만약에 아래 다이어그램과 같이 고무오리에 해당하는 RubberDuck 클래스가 새로 추가가 된다면, 어떻게 될까? ..
1. Java 구현 package Q2178; import java.io.*; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; public class Main { /* 문제 : 미로탐색 url : https://www.acmicpc.net/problem/2178 재풀이 : O */ private static boolean isComplete = false; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter ..
1. Java 구현 package Q2606; import java.io.*; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; public class Main { /* 문제 : 다이얼 url : https://www.acmicpc.net/problem/5622 재풀이 : X */ public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWrit..
옵저버 패턴은 한 객체(Subject)의 상태가 변할 때, 그 객체에 의존하는 다른 객체들에 자동으로 데이터가 갱신되는 1 : n 의 의존성 관계를 갖는 형태를 의미한다. 아래 클래스 다이어그램을 보자 주제 인터페이스는 옵저버를 등록, 삭제, 상태 변경을 옵저버에게 전달하는 메소드를 추상메소드로 가지고 있다. 그렇기 때문에 주제 클래스를 구현해야 사용할 수 있다. 옵저버 클래스도 인터페이스이를 구현해야만 옵저버로서 사용이 가능하다.그 이유는, 주제 클래스는 옵저버 인터페이스를 구현하고 있는 클래스만을 옵저버로 인식하고 등록할 수 있기 때문이다. 옵저버 인터페이스만 구현한다면 어떤 객체든 옵저버가 될 수 있다. 이 부분이 정말 중요하다! 주제 객체가 옵저버에 대해 아는 정보는 오직, 옵저버 인터페이스를 구..