본문 바로가기

전체 글669

백준 17232 생명 게임 (JAVA 자바 풀이) | 누적합 배열 백준 17232 생명 게임 (JAVA 자바 풀이) 초기 제출 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { private static final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); public static void main(String[] args) throws IOException { StringTokenizer stringTokenizer = new StringTok.. 2023. 7. 3.
데이터 모델과 트랙잭션 디자인 / 개별 프로세스 운영 관리 및 배포 시스템 디자인 패스트 캠퍼스(The Red: 4천만 MAU를 지탱하는 서비스 설계와 데이터 처리 기술 by 카카오페이지 기술전략이사 윤진석) 필기록입니다. 서버 개발자들은 반드시 영속화 레벨의 데이터에 대해서 문제를 해결하는 일을 마주치게 된다. 논리적 데이터 아키텍처 -> 데이터 스키마 또는 논리적 데이터 모델이라고 함 논리적 데이터 모델은 흔히 (1) 객체 기반의 개체-관계 ER모델 -> Object-based logical models (2) 행 기반의 관계형 모델을 사용 -> Record-based logical models NoSQL 데이터 모델은 모두 (3) nested key value pairs 다차원 모델을 사용한다. -> object도 아니고 record 기반도 아니다 객체지향의 프로그래밍 모델에서는.. 2023. 7. 3.
코드 유지보수성과 확장성을 높이는 디자인 패턴 패스트 캠퍼스 (The Red: 4천만 MAU를 지탱하는 서비스 설계와 데이터 처리 기술 by 카카오페이지 기술전략이사 윤진석) 필기록입니다. 코드레벨에서의 확장성에 대해 알아보자. 프로그래밍 패러다임 절차적 프로그래밍 -> 구조적 프로그래밍 -> 객체지향 프로그래밍 디자인 패턴이란? 베스트 프랙티스(best practice, 모범사례)의 일반화된 디자인 유형 문제를 푸는 것을 패턴화했다고 할 수 있다. 객체 지향 프로그래밍 이후의 점점 복잡해지는 소프트웨어를 해결하기 위해 등장. Object Composition 객 체 합성 구조를 통해 확장성 획득 "Client"는 동기화 서비스인 SyncService 인터페이스만 바라보도록 한다. 환경이나 요구사항에 동기화 메커니즘을 결정할 수 있도록 구체 클래스를.. 2023. 7. 3.
백준 19951 태상이의 훈련소 생활 (JAVA 자바 풀이) 백준 19951 태상이의 훈련소 생활 (JAVA 자바 풀이) https://www.acmicpc.net/problem/19951 문제에서 설명하듯이 주어지는 조교의 쿼리를 모두 다 받아놓고 한번에 연산을 해주어야 한다. 문제에서 N, M의 조건이 최대 10만이기 때문에 반복문 두번이면 O(n^2)으로 1초를 넘어서게 될 것이 분명하다. 누적합을 이용해 풀이해야 한다. 문제는 누적합을 어떻게 설계할 것이냐이다. 만약 누적합이라고 하여, 또 M번의 쿼리를 그대로 모든 배열에 넣는 방식을 사용하면 N이 10만 건으로 주어질 경우 배열의 10만 개의 칸을 순회해야 한다. 즉, 앞에서 모든 계산을 받자마자 그대로 하는 것과 다를 바가 없어진다. 따라서 이 부분의 시간 복잡도를 O(M)으로 유지할 수 있어야 한다... 2023. 7. 2.
백준 10811 바구니 뒤집기 (JAVA 자바 풀이) 백준 10811 바구니 뒤집기 (JAVA 자바 풀이) 1차원 배열을 연습하는 문제로서 지난 문제 10813 공바꾸기를 좀 더 응용한 문제이다. swap과 reverse를 수행해주면 된다. reverse는 새로운 배열을 만들어서 전체를 새롭게 할당하는 방법도 있지만 처음과 끝을 하나씩 바꿔주는 방식으로 수행할 수도 있다. 이때 while문과 for문 방식 두가지 모두 사용할 수 있다. 둘다 반복 횟수는 길이 + 1를 2로 나눈 몫으로 구한다. while문을 사용하면 별도의 카운트 변수를 두어 처음과 끝에서부터 증감을 표현해준다. for문을 사용하면 i 변수를 사용할 수 있다. 💡 코드 구현 import java.io.BufferedReader; import java.io.IOException; import.. 2023. 7. 2.