본문 바로가기

분류 전체보기43

Optimistic Update vs. Pessimistic Update UI 는 어느 시점에 업데이트하는 것이 좋을까? Pessimistic Update 현재 다니고 있는 회사의 프로젝트에서 게시글 목록 중에 조회해본 게시글과 조회해보지 않은 게시글을 구별하기 위해 처음 게시글을 조회할 경우 처음 조회했음을 알리는 api를 호출한 다음, 게시글 목록 중의 안 읽은 게시글의 개수를 종합하여 보여주는 기능이 있다. 클릭 후 서버에 데이터가 실제로 전송되고, 그리고 다시 데이터를 호출해서 실제 계산해본 후의 결과값을 기반으로 UI를 업데이트하는 방식이다. 이렇게 실제 데이터 전송과 호출을 기다렸다가 실제 데이터를 기반으로 UI를 업데이트하는 것을 Pessimistic Update라 한다. 단어 그대로 비관적인 관점에서 데이터가 제대로 전송되었을지, 적용되었을지 의심하다가 실제 .. 2023. 11. 23.
UI/UX 란 무엇인가 UI : User Interface 의 약자UX: User Experience 의 약자 우선, 여기서 비교적 낯선 단어를 Interface에 대해 좀 더 알아보자.Interface : "서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면"예를 들어, 인간이 컴퓨터를 사용할 경우 인간과 컴퓨터 사이의 접점이 필요하다. 이 접점의 역할을 하는 것이 모니터와 마우스, 키보드이다. 정보나 신호를 받기 위해 모니터를 사용하고, 반대로 주기 위해 키보드와 마우스를 사용한다. 이렇게 모니터, 마우스, 키보드의 영역을 Interface를 의미한다. 하지만 이 Interface의 개념은 넓은 의미로도, 좁은 의미로도 다양하게 쓰인다. 자바나 C#과 같은 객체 지향 프로그래밍 언어 문.. 2023. 11. 22.
No7662 이중 우선순위 큐 https://www.acmicpc.net/problem/7662 7662번: 이중 우선순위 큐 입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 Q에 적 www.acmicpc.net 두개의 PriorityQueue를 활용해서 하나는 최대값을 앞에 하나는 최소값을 앞에 두는 queue를 활용하면 될 것 같았다. 그래서 입력 값을 받으면 두 queue에 넣고 최대값을 빼라는 명령이 있으면 최대값queue는 poll을 최소값queue는 remove 메소드를 쓰면 될 것 같았다. 코드는 아래와 같다. package com.yuk; import java.io.BufferedRead.. 2022. 11. 23.
No7576 토마토 (너비 우선 탐색) 너비 우선 탐색을 이용한 문제풀이다. 전에 사용해봤던 방식은 토마토 박스의 모든 공간를 좌표를 key, 토마토 객체를, value 값으로 하여 HashMap에 넣었다. 하루가 지날 때마다 박스의 모든 공간을 검색하여 그날 익어야 할 토마토를 찾아놓은 후 익게 하는 방식으로 풀어보았다. 하지만 매일마다 모든 토마토를 검색해야 하기에 시간 초과를 피할 수 없었다. https://6cessfuldev.tistory.com/17 No7576 토마토 (HashMap의 Custom key 만들어 풀어보기) 너비우선탐색 문제이다. 그런데 문제는 지금까지 풀었던 너비우선탐색 문제에서 탐색을 시작해야 하는 시작점이 하나였다면 이 문제는 시작점이 여러 개 일 수 있다는 문제이다. 문제를 읽고 6cessfuldev.tist.. 2022. 11. 21.
No1260 DFS와 BFS(그래프 이론: 너비우선탐색, 깊이우선탐색) 백준 7576 번(토마토)를 풀기 전에 먼저 전에 풀었던 깊이 우선 탐색(Depth First Search)과 너비 우선 탐색(Breadth First Search) 기본 문제인 이 문제의 문제풀이를 기록하면서 두 가지 알고리즘을 정리해보고자 한다. 1. 깊이 우선 탐색(DFS) 간선들로 연결된 점들을 이차원 배열(int[][])로 표현한 후 i와 j 사이를 연결하는 간선이 있을 경우 arr[i][j], arr[j][i]의 값을 1로, 없을 경우 0으로 표현한다. 이후 탐색할 때 i와 연결된 점들을 찾을 때 arr[i]의 값들을 검색하면 된다. 한번 검색한 곳을 다시 지나치지 않기 위해 visit(boolean[]) 배열 하나를 만들어 i번째 점을 검색한 후 visit[i]는 true값으로 변경한다. 검.. 2022. 11. 18.
No2630 색종이 만들기 (분할 정복) 종이를 4분할 하여 1분면, 2분면, 3분면, 4분면 각각의 결과에 따라 멈추거나 다시 4분할하여 재귀 함수를 실행하는 알고리즘이다. 구현하는 방식은 어렵지 않다. package com.yuk; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class No2630 { static int n; static int[][] arr; static int one; static int zero; static void dq(int x, int y, int num) { boolean flag = true; int first = arr[x][y]; loop : for (int i = x; .. 2022. 11. 15.
No1931 회의실 배정 (그리디 알고리즘) 본 문제는 그리디 알고리즘을 사용하여 매 선택마다 최적의 답을 구하는 문제이다. 아래 블로그의 글을 참고하였다. https://hongjw1938.tistory.com/172 알고리즘 - 그리디 알고리즘(Greedy Algorithm) 1. 그리디 알고리즘(Greedy Algorithm)이란? 간단히 설명해, 그리디 알고리즘은 "매 선택에서 현재 당장 최적인 답"을 선택해 전체 적합한 결과를 도출하자는 알고리즘 기법이다. 즉, 백트래킹을 통해 hongjw1938.tistory.com 시작 시간과 종료 시간을 가지고 있는 여러 회의들을 시간이 겹치기 않고 가장 많이 담을 때 총 개수를 구하는 문제이다. 핵심은 1. 다음 단계의 회의를 선택할 때 .조건은 전 회의 종료 시간보다 다음 단계의 회의 시작 시간이.. 2022. 11. 8.
No1389 케빈 베이컨의 6단계 법칙(플로이드 와샬 알고리즘) 2차원 배열로 두 점 사이의 간선의 유무를 입력. 플로이드 와샬 알고리즘을 통해 몇 번을 건너 도달할 수 있는지를 배열에 입력하여 답을 구하는 문제 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int N = Integer.parseInt(st.nextToken()); int M = Integer.parseInt(st.nextToken()); int[][] map = new int[N][N]; boolean[] visit = new boolean[N]; //map 초기화 //자기 자신을 가리키는 경우 0, 초기값 최대로.. 2022. 11. 2.
Class2 돌파! 이 맛에 백준한다. 2022. 10. 27.