참고: https://www.acmicpc.net/problem/2133 2133번: 타일 채우기 3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자. www.acmicpc.net DP로 해결할 수 있는 문제입니다. 따라서 점화식을 세워야 합니다. 최종 점화식은 아래와 같습니다. DP[N] = DP[N-2] * 3 + DP[N-4] * 2 + ... + DP[0] * 2 ( N >= 4인 짝수) 점화식을 이해하기 위해서 N을 1에서 부터 대입하여 직접 그림을 그려 보아야 할 것입니다. 1. N = 1 3 * 1 크기의 타일을 채워야 하지만, 주어진 1 * 2 와 2 * 1 타일로 채울 수 없습니다. 2. N = 2 3. N = 3 3 * 3 크기의 타일을 채울 수 있는 경우의 ..
스트림이란? 스트림은 자바 8 API에 추가된 기능이다. 스트림을 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있다. 그리고 스트림을 이용하면 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다. // 기존 코드 List lowCaloricDishes = new ArrayList(); for (Dish dish : menu) { if (dish.getCalories() < 400) { lowCaloricDishes.add(dish); } } Collections.sort(lowCaloricDishes, new Comparator() { public int compare(Dish dish1, Dish dish2) { return dish1.getCalories().compareTo..
뷰 템플릿 뷰의 템플릿은 HTML, CSS 등 의 마크업 속성과 뷰 인스턴스에서 정의한 데이터 및 로직들을 연결하여 사용자가 브라우저에서 볼 수 있는 형태의 HTML로 변환해 주는 속성이다. 라이브러리 내부적으로 template 속성에서 정의한 마크업과 뷰 테이너를 가상 돔 기반의 render() 함수로 변환한다. 변환된 render() 함수는 최종적으로 사용자가 볼 수 있게 화면을 그리는 역할을하고, 변환 과정에서 뷰의 반응성이 화면에 더해진다. 템플릿 속성을 사용하는 첫 번째 방법은 template 속성을 활용한 방법이다. 지금까지 예제로 사용했다. 두 번째는 싱글 파일 컴포넌트 체계의 코드를 활용하는 방법이다. // 1 new Vue({ ... template: ` Hello Vue.js! ` })..
뷰 라우터 라우팅 라우팅은 웹 페이지간의 이동방법을 말한다. 현대 웹 앱 형태 중 하나인 싱글 페이지 애플리케이션(Single Page Application, SPA)에 주로 사용된다. 라우팅을 이용하면 화면이 매끄럽게 전환되어 사용자 경험을 상승시킬 수 있다. 프론트엔드 프레임워크(뷰, 리액트 등)를 사용하거나, 순수 자바스크립트의 라이브러리(router.js 등)를 이용하여 라우팅을 통한 페이지 이동이 가능하다. 싱글 페이지 애플리케이션 페이지를 이동할 때마다 웹 페이지를 요청하여 새로 갱신하는 것이 아니라, 미리 해당 페이지르 받아놓고 페이지 이동 시에 클라이언트의 라우팅을 이용하여 화면을 갱신하는 패턴을 적용한 애플리케이션 뷰 라우터 뷰 라우터는 뷰에서 라우팅 기능을 구현할 수 있도록 지원하는 공..
동작 파라미터화를 이용하면 더 유연하고 재상용할 수 있는 커드를 만들 수 있다. 그리고 익명 클래스를 사용하여 다양한 동작을 구현할 수 있지만 코드가 깔끔하지 않았다. 람다 표현식을 사용하면 좀 더 깔끔한 코드를 작성할 수 있다. 람다 표현식은 익명 클래스 처럼 이름 없는 함수면서 메서드를 인수로 전달할 수 있다. 람다란 무엇인가? 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이다. 람다의 특징은 아래와 같다. 익명: 보통 메서드와 달리 이름이 없다. 함수: 람다는 메서드 처럼 특정 클래스에 종속되지 않으므로 함수이다. 전달: 람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다. 간결성: 익명 클래스처럼 부가적인 코드가 필요없다. 사과의 무게를 기준으로 오름차순하는 코드를 익..
뷰 인스턴스 뷰 인스턴스는 뷰로 화면을 개발하기 위해 필수적으로 생성해야 하는 기본단위이다. 1. 뷰 인스턴스 생성 new Vue()로 뷰 인스턴스를 생성한다. 인스턴스 내부 el 속성으로 뷰 인스턴스가 그려질 지점을 지정 data 속성에 message 값을 정의하여 {{ message }}에 연결 Vue를 생성자라고한다. Vue 생성자는 뷰 라이브러리를 로딩하고나면 접근할 수 있다. 뷰로 개발할 때 필요한 기능들을생성자에 미리 정의해 놓고 사용자가 그 기능을 재정의하여 편리하게 사용하기위해 생성자를 사용한다. 2. 뷰 인스턴스 옵션 속성 뷰 인스턴스 속성은 인스턴스를 생성할 때 재정의할 el, data, template 등의 속성을 의미한다. 3. 뷰 인스턴스 유효 범위 뷰 인스턴스를 생성하면 HTML..
Vue.js란 무엇인가? Vue.js란? Vue.js는 웹 페이지 화면을 개발하기위한 프론트엔드 프레임 워크이다. 뷰 코어 라이브러리는 화면단 데이터 표현에 관한 기능들을 중점적으로 지원한다. 하지만 프레임워크의 기능인 라우터, 상태 관리, 테스팅 등을 쉽게 결합할 수 있는 형태로도 제공한다. 즉, 라이브러리 뿐 아니라 프레임 워크의 역할도 수행할 수 있다는 것이다. 따라서 뷰를 점진적 프레임워크(Progressive framework)라고 한다. Vue의 특징 1. MVVM 패턴의 뷰 모델 - View: 사용자에게 보이는 화면 - DOM: HTML 문서에 들어가는 요소(태그, 클래스, 속성 등)의 정보를 담고 있는 데이터 트리 - DOM Listener: 돔의 변경 내역에 대해 즉각적으로 반응하여 특정..
참고: https://www.acmicpc.net/problem/2631 2631번: 줄세우기 KOI 어린이집에는 N명의 아이들이 있다. 오늘은 소풍을 가는 날이다. 선생님은 1번부터 N번까지 번호가 적혀있는 번호표를 아이들의 가슴에 붙여주었다. 선생님은 아이들을 효과적으로 보호하기 www.acmicpc.net 옮겨지는 아이의 최소한의 수를 구하는 문제입니다. 옮길 아이의 최소라는 것은, 옮기지 않을 아이의 최대라고도 할 수 있습니다. 현재 문제는 아이들의 순서 번호를 오름차순으로 정렬해야하기 때문에, 옮기지 않을 아이의 최대 수는 증가하는 부분 수열을 구하는 문제와 동일합니다. 즉, 증가하는 부분 수열의 최대 길이를 구할 수 있다면 최소한으로 옮길 아이들의 수를 구할 수 있을 것입니다. 이렇게 정렬되어..
사용자의 요구사항은 계속 바뀐다. 따라서 우리는 기능을 수정하거나 새로운 기능을 추가해야하며, 여기에 드는 엔지니어링 비용이 최소화 되기를 원한다. 그뿐 아니라 새로 추가한 기능은 구현이 쉬워야 하고 장기적인 관점에서 유지보수가 쉬워야한다. 동작 파라미터화를 이용하면 이를 해결할 수 있다. 동작 파라미터화란 아직은 어떻게 실행할 것인지 결정하지 않은 코드 블력을 의미한다. 즉, 코드 블럭의 실행이 나중으로 미뤄지고 이러한 코드는 메서드의 인수로 전달될 수도 있다. 동작 파라미터화 덕분에 수행할 수 있는 주요 기능은 아래와 같다. - 리스트의 모든 요소에 대해서 '어떤 동작'을 수행할 수 있음 - 리스트 관련 작업을 끝낸 다음 '어떤 동작'을 수행할 수 있음 - 에러가 발생하면 '정해진 어떤 다른 동작'을..
참고: https://www.acmicpc.net/problem/5557 5557번: 1학년 상근이가 1학년 때, 덧셈, 뺄셈을 매우 좋아했다. 상근이는 숫자가 줄 지어있는 것을 보기만 하면, 마지막 두 숫자 사이에 '='을 넣고, 나머지 숫자 사이에는 '+' 또는 '-'를 넣어 등식을 만들며 놀 www.acmicpc.net 주어진 수들의 연산(+, -) 결과가 배열의 마지막 수가 되는 경우의 수를 구하는 문제입니다. 일단 문제에서 주어진 단서들을 나열합니다. 수의 범위는 0이상 20이하이고, 배열의 크기는 3이상 100 이하 입니다. 그리고 올바른 등식의 개수의 범위가 2^63 - 1까지 입니다. 여기서 얻을 수 있는 힌트는 배열의 크기가 그리 크지 않으므로 이중 for문 정도는 사용할 수 있고, 정답..