Computer Sciences(236)
-
2. Decorator Pattern
문제 커피 주문 시스템에서 각 커피에 대한 첨가물이 추가해달라는 요구사항이 들어왔다. 이를 해결해보자. 상속 위처럼 상속을 이용해서 설계를 하면 첨가물과 커피가 늘어날 때마다 클래스를 만들어서 상속해야 한다. 이는 엄청난 복잡도를 유발하게 될 것이다. 인스턴스 변수와 슈퍼 클래스 상속 이렇게 하면 어떨까? 이 역시 문제가 많다. 첨가물 가격이 바뀔 때마다 기존 코드를 수정해야 한다. 첨가물 종류가 늘어날 경우 그에 따른 메서드를 추가해야 한다(ex.시럽). 첨가물이 들어가지 않는 음료의 경우에도 불필요한 메서드를 상속받는다(ex.아이스티). 중복된 첨가물에 대한 표현이 불가능하다(ex.더블 모카). 해결 방법 객체에 추가적인 조건을 동적으로 추가해야 하는 문제는 데코레이터 패턴을 통해 해결할 수 있다. ..
2021.09.06 -
1. Observer Pattern
문제 인터넷 기반 기상정보스테이션을 구축해달라는 요청이 들어왔다. 현재의 기상 조건(기온, 습도, 기압)을 화면에 표시하는 기능의 프로그램이다. 그래서 우리 팀은 다음과 같이 데이터를 관리하는 클래스를 작성했다. public class WeatherData { public void measurementsChanged() { float temp = getTemperature(); float humidity = getHumidity(); float pressure = getPressure(); currentConditionsDisplay.update(temp, humidity, pressure); statisticsDisplay.update(temp, humidity, pressure); forecastDi..
2021.09.06 -
[Baekjoon] 1339번: 단어 수학
1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net 이 문제는 문자의 합이 최대일 경우를 계산하는 그리디 알고리즘 문제였습니다. 저는 이 문제를 다음과 같이 분석했습니다. 각 문자에 해당하는 자릿수(예제 2의 경우 G = 100, C = 10, F = 1)의 값을 int[26]의 알파벳 배열에 저장한다 저장된 배열을 크기순으로 정렬한다 9부터 0까지 내려가며 정렬된 배열의 값과 곱한 값들을 더한 뒤 결과를 출력한다 예제 2를 활용하여 예를 들어보겠습니다. 두 문자열 GCF, ACDEB 가 있습니다. 먼저 G..
2021.07.10 -
18. System Aspects of SQL
How SQL fits into a complete programming environment? SQL/Host Language Interface(Embedded SQL) 프로그래밍 언어에 SQL을 다루는 문법을 추가한 방식 Pro*C(Oracle) ecpg(PostgreSQL) 최근에는 많이 사용되지는 않음 Call-Level Interface 프로그래밍 언어 수준에서 DB와 커넥션하기 위한 API를 표준화한 방식 SQL/CLI(ANSI SQL) JDBC(Sun) ADO.NET(ODBC, ADO, OLEDB) (Microsoft) Persistent Stored Modules PL/pgSQL(PostgreSQL) PL/SQL(Oracle) Transact-SQL(Microsoft) 표준화가 잘 안 되어..
2021.06.07 -
[Baekjoon] 2751번: 수 정렬하기 2
2751번: 수 정렬하기 2 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 이 문제는 시간 복잡도가 n log n 이하인 알고리즘을 적용하여 풀어야 하는 문제였습니다. 저는 병합 정렬을 사용하여 해결하였습니다. 처음에는 계속 시간 초과가 나오길래 뭔가 싶었는데 res 배열을 MergeTwoArea에서 만들어서 나온 것이었습니다. static으로 선언하니 해결되었습니다. 인스턴스 변수로 선언하면 1,000,000 과 같은 큰 크기의 배열을 계속 만들어내서 발생한 문제였던 것 같습니다. import java.io.Buffere..
2021.06.02 -
[Baekjoon] 7568번 : 덩치
7568번: 덩치 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩 www.acmicpc.net 브루트 포스 문제 중 하나입니다. 첫 번째 인원부터 모든 인원과 비교해가면서 몸무게와 키가 모두 크다면 순위를 증가시킨 뒤 출력하면 됩니다. // javascript const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); const input = []; rl.on('line', (l..
2021.05.30