스도쿠의 값이 입력으로 주어지고 결과값을 출력해내는 문제입니다. 비트마스킹을 사용해서 각 가로, 세로, 사각형 부분에 어떤 값이 더 들어올 수 있는지 체크하였습니다. 체크되어있는 값들만 브루트포스 방식으로 전부 시도해보았습니다. 모든 값들이 적절히 들어갔을 때 스도쿠의 상태를 출력해주었습니다. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.ArrayList; import java.util.StringTokenizer; public class Main { static int[][] map; ..
브루트포스 문제입니다. 퀸을 서로가 공격 할 수 없게 놓을 수 있는 경우의 수를 구해야 합니다. 퀸은 직선과 대각선에 있으면 공격할 수 있으므로 퀸의 직선과 대각선에 다른 퀸이 존재하지 않게 두어야합니다. 비트를 사용해서 아래와 같이 처리했습니다. 1은 왼쪽 대각선 2는 직선 4는 오른쪽 대각선 비트 값을 확인하여 다음 줄에 놓을 수 있는지 체크합니다. 체크가 안 된 위치에 퀸을 두고 다음 줄을 확인합니다. 위의 과정을 반복하여 마지막 줄까지 퀸을 둘 수 있는 경우를 카운팅해서 출력해 주었습니다. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.Output..
문자열 문제입니다. (100+1+ | 01)+ 의 규칙을 가졌는지 확인하면 됩니다. 위의 규칙을 가졌을 경우 YES 가지지 않았을 경우 NO를 출력합니다. 단일 숫자는 해당 숫자가 존재하는지를 나타냅니다. 10 => 10이라는 숫자가 있어야함 1+ => 1이라는 숫자가 N개 존재 10+1 => 1과 1사이에 0이 N개 존재함 (1+ | 01)+ (1이 N개 있거나 0다음 1이 M개 있음)이 P개 있음 위와 같이 규칙이 존재합니다. 그렇다면 (100+1+ | 01)+ 의 경우에는 (100+1+ 또는 01+)가 N개 존재하는 경우 100+1+는 1 0 (0이 N개) (1이 M개) 있는 경우 01는 01이 있는 경우 if문을 잘 설정해서 위의 경우에 해당하는지 찾으면 됩니다. import java.io.Buf..
서버 사이드 렌더링의 이해 서버 사이드 렌더링 vs 클라이언트 사이드 렌더링 브러우저 렌더링이란? 서버로부터 요청해 받은 내용을 브라우저 화면(view)에 표시해주는 작업. 즉, 브라우저가 서버로부터 HTML, CSS, JavaScript 문서를 전달받아 브라우저 엔진이 각 문서를 해석해 브라우저 화면을 그려주는 것 클라이언트 사이드 렌더링(Client Side Rendering)이란? 클라이언트 사이드 렌더링은 클라이언트인 브라우저가 렌더링을 처리하는 방식. 즉, 서버에서 받은 데이터를 통해 클라이언트인 브라우저가 화면(View)을 그리는 주체가 되는 것 장점 네이티브 앱과 비슷한 빠른 인터렉션을 구현할 수 있음 View 렌더링을 브라우저에게 담당시킴으로서 서버 트래픽을 감소시키고, 사용자에게 더 빠른..
리액트로 프로젝트를 생성하고 배포했을 시 웹팩이라는 도구가 별도의 설정없이 모든 자바스크립트 코드와 CSS 파일을 하나의 파일(main)로 합칩니다. 이 말은 여러 컴포넌트 중 하나의 컴포넌트만 보여진다고 해도 다른 컴포넌트도 자연스래 저장이 된다는 뜻입니다. 이는 파일의 크기를 키우고 로딩이 오래걸려 사용자 경험을 안좋게 할 뿐만 아니라 트래픽도 증가시킬 것 입니다. 이를 해결해 줄 수 있는 방법이 바로 코드 비동기 로딩입니다. 자바스크립트 함수 비동기 로딩 일반 자바스크립트 함수를 스플리팅해 보겠습니다. notify.js export default function notify() { alert('안녕하세요!'); } src/App.js //... function App() { const onClick..
투포인터 문제입니다. N개의 수가 있을 때 좋은 수의 개수를 찾아야합니다. 좋은 수는 해당 수를 제외한 2개의 수의 합으로 만들어질 경우 좋은 수라고 합니다. 입력받은 수의 배열을 정렬해줍니다. for문을 통해서 차례대로 좋은수인지 체크합니다. 투포인터로 두 개의 합을 구하고 값이 클 경우 right -1, 값이 작을 경우 left + 1 을 해줍니다. 만약 두 개의 값이 같은 경우 찾는 수와 인덱스가 같은지 확인해주고 둘 다 다를 경우 좋은 수로 카운팅해줍니다. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; impor..
작업환경 설정 리액트 프로젝트를 생성한다. redux와 react-redux 라이브러리를 설치한다. yarn add redux react-redux UI 준비하기 리액트에서 리덕스를 사용할 때 가장 많이 사용하는 패턴 → 프레젠테이셔널 컴포넌트와 컨테이너 컴포넌트를 분리하는 것이다. 프레젠테이셔널 컴포넌트 : 주로 상태 관리가 이루어지지 않고, props만 받아와서 화면에 UI만 보여주는 컴포넌트 컨테이너 컴포넌트 : 리덕스와 연동이 되어있는 컴포넌트 이러한 패턴이 필수는 아니지만, 이 패턴을 사용하면 코드의 재사용성도 높아지고, 관심사의 분리가 이루어져 편리하다. 2개의 컴포넌트를 만드는 실습을 진행 리덕스 관련 코드 작성하기 보통 actions, constants, reducers 각각의 폴더를 만들..
리덕스 가장 많이 사용되는 리액트 상태 관리 라이브러리 모든 state를 store라는 중앙 상태 저장소를 사용하여 저장하고 reducer 함수를 통해 수정. 컴포넌트의 상태 업데이트 관련 로직을 다른 파일로 분리하여 효율적으로 관리할 수 있게 해줌. 컴포넌트끼리 똑같은 상태를 공유해야 할 때도 다른 컴포넌트를 거치지 않고 손쉽게 상태 값을 전달하거나 업데이트 가능. 전역 상태를 관리할 때 효과적. Context API를 통해서도 똑같은 작업을 수행할 수 있지만 프로젝트 규모가 클 경우에는 리덕스를 사용하는 편이 좋음. (상태를 더욱 체계적으로 관리) 장점 1. props drilling 방지 - props drilling이란 컴포넌트가 특정값을 사용하기 위해 여러 상위 컴포넌트에서 props를 정의하고..