본문 바로가기

전체글118

MySQL Replication 구조 Replication 두 개 이상의 데이터베이스를 Master, Slave 구조로 활용하여 Master 노드의 데이터를 Slave 노드로 복제, 동기화하는 기술이다. Write 쿼리(INSERT, UPATE, DELETE)는 Master 노드에서 처리하고, Read 쿼리(SELECT)는 Slave 노드에서 처리한다. MySQL 8.0부터는 Master/Slave를 Source, Replica로 명명하고 있다. 사용 목적 부하 분산: Read/Write 쿼리에 따라 Master, Slave의 부하를 분산하고, 쿼리의 약 80%가 읽기 작업이기 때문에 Slave를 Scale-Out하여 읽기 성능을 높일 수 있다. 데이터 백업: Slave로 데이터가 복제되기 때문에 Master에 문제가 발생했을 때 피해를 최.. 2024. 1. 31.
[Programmers-Java] 혼자서 하는 틱택토 https://school.programmers.co.kr/learn/courses/30/lessons/160585 접근 행, 열, 대각선의 o와 x의 개수를 센다. 각각의 개수 중 3이 있으면 해당 표시가 승리한다. 게임이 불가능한 경우 o, x 둘 다 승리 o가 승리했지만 o 개수가 x 개수보다 한 개 더 많지 않음 x가 승리했지만 x 개수가 o 개수와 같지 않음 o 개수와 x 개수의 차이가 0 또는 1이 아님 풀이 class Solution { public int solution(String[] board) { int[] o = new int[8]; // (1) int[] x = new int[8]; int oCnt = 0; int xCnt = 0; for (int i = 0; i < board.l.. 2024. 1. 29.
[Programmers-Java] 무인도 여행 https://school.programmers.co.kr/learn/courses/30/lessons/154540 접근 무인도를 bfs 탐색한다. 탐색할 때 무인도 칸에 적힌 숫자를 합한다. 합을 리스트에 추가한 후 오름차순 정렬한다. 풀이 import java.util.*; class Solution { private List date = new ArrayList(); private int[] direction = {1, 0, -1, 0}; private int n; private int m; private boolean[][] visited; public int[] solution(String[] maps) { this.n = maps.length; this.m = maps[0].length(); .. 2024. 1. 28.
[Programmers-Java] 과제 진행하기 https://school.programmers.co.kr/learn/courses/30/lessons/176962 접근 중간에 멈춘 과제는 가장 최근에 멈춘 과제부터 다시 시작하기 때문에 스택에 저장한다. 과제를 시작 시간 순으로 오름차순 정렬한다. 과제를 하나 꺼내서 시작 시간과 소요 시간을 더한 후 다음 과제의 시작 시간과 비교한다. 현재 과제를 다음 과제 시작 전에 마치지 못할 경우 남은 소요 시간을 변경하고 멈춘 과제에 저장한다. 마칠 수 있으면 끝낸 과제에 저장하고 마지막에 멈춘 과제를 꺼낸다. 멈춘 과제를 이어서 진행할 경우 이전 과제를 마친 시간부터 진행한다. 풀이 import java.util.*; class Solution { public String[] solution(String[].. 2024. 1. 26.
[Programmers-Java] 두 원 사이의 정수 쌍 https://school.programmers.co.kr/learn/courses/30/lessons/181187 접근 하나의 사분면에서 점의 개수를 구해서 4를 곱한다. 원의 중심이 (0, 0)이기 때문에 원의 방정식은 x2 + y2 = r2이다. 따라서 x = (r2 - y2)1/2로 x값을 구할 수 있다. x2의 소수점을 내림, x1의 소수점을 올림하고 x2 - x1 + 1 연산하면 임의의 y 좌표에서 두 원 사이에 있는 정수 x 좌표의 개수가 된다. 풀이 class Solution { public long solution(int r1, int r2) { long answer = 0; for (int y = 1; y 2024. 1. 26.
[Programmers-Java] 광물 캐기 https://school.programmers.co.kr/learn/courses/30/lessons/172927 접근 돌 곡괭이로 광물을 5개씩 캐서 피로도를 구하고 우선순위 큐에 삽입한다. 피로도가 큰 것부터 꺼내면서 다이아몬드 -> 철 -> 돌 곡괭이 순으로 광물을 캔다. 풀이 import java.util.*; class Solution { private static final int[][] PICK_FATIGUE = { { 1, 1, 1 }, { 5, 1, 1 }, { 25, 5, 1 } }; // (1) public int solution(int[] picks, String[] minerals) { int pickCnt = Arrays.stream(picks).sum() * 5; if (pi.. 2024. 1. 26.
[Programmers-Java] 주사위 고르기 https://school.programmers.co.kr/learn/courses/30/lessons/258709 접근 n은 최대 10이다. n개의 주사위 중 n / 2개를 뽑는 조합 nCn/2 = 252 뽑은 n / 2개의 주사위로 얻을 수 있는 점수의 개수 6n/2 = 7,776 A와 B의 점수를 비교하여 나올 수 있는 승패 결과의 개수 7,7762 = 6n = 60,466,176 252 * 60,466,176 = 약 152억이기 때문에 시간복잡도를 줄여야 한다. A가 몇 번 이기는지를 이분 탐색으로 구하면 252 * 7,776 * log7,776 = 약 25,474,176으로 시간 내에 해결할 수 있다. 풀이 import java.util.*; class Solution { private int .. 2024. 1. 25.
[Programmers-Java] 가장 많이 받은 선물 https://school.programmers.co.kr/learn/courses/30/lessons/258712 접근 친구마다 인덱스를 부여한다. 2차원 배열에 선물을 주고 받은 기록을 저장한다. 각각의 선물 지수는 선물을 줄 때 마다 +1, 받을 때마다 -1한다. 풀이 import java.util.*; class Solution { public int solution(String[] friends, String[] gifts) { int n = friends.length; Map friendIdx = new HashMap(); for (int i = 0; i < n; i++) { friendIdx.put(friends[i], i); // (1) } int[][] giftLog = new int[n.. 2024. 1. 25.
[Programmers-Java] 도넛과 막대 그래프 https://school.programmers.co.kr/learn/courses/30/lessons/258711 접근 생성한 정점은 들어오는 간선이 없고 나가는 간선이 2개 이상있다. 도넛의 모든 정점은 들어오는 간선과 나가는 간선이 1개씩 있다. 막대의 마지막 정점은 나가는 간선이 없다. 8자의 정점 중 한 개는 나가는 간선이 2개있다. 생성한 정점과의 간선을 포함하여 특징을 정리하면 다음과 같다. in 간선 out 간선 생성한 정점 0 > 1 도넛 (모든 정점) >= 1 1 막대 (마지막 정점) >= 1 0 8자 (한 정점) >= 2 2 풀이 import java.util.*; class Solution { public int[] solution(int[][] edges) { Map out = n.. 2024. 1. 25.
[Programmers-Java] 석유 시추 https://school.programmers.co.kr/learn/courses/30/lessons/250136 접근 석유를 bfs 탐색해서 덩어리마다 숫자로 라벨링한다. Map에 덩어리의 석유량을 저장한다. 열마다 시추관을 설치하고 만날 수 있는 덩어리의 숫자를 저장한다. 덩어리의 석유량을 합한다. 풀이 import java.util.*; class Solution { private int n; private int m; private Map oilAmount = new HashMap(); private int[] directions = new int[] {1, 0, -1, 0}; public int solution(int[][] land) { this.n = land.length; this.m =.. 2024. 1. 25.