728x90

전체 글 39

[백준 / BOJ] 14003 가장 긴 증가하는 부분 수열 5

분류: DP, LIS, BS 문제: www.acmicpc.net/problem/14003 14003번: 가장 긴 증가하는 부분 수열 5 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (-1,000,000,000 ≤ Ai ≤ 1,000,000,000) www.acmicpc.net DP를 활용한 LIS(Longeset Increasing Subsquence)로 해결했다. O(nlogn)을 구현하기 위해 이분 탐색으로 풀었고 이때 C++의 lower_bound를 활용하였다. LIS를 추적하기 위해 LIS 배열을 선언하여 dp벡터의 인덱스(LIS의 길이)를 저장했고 LIS배열을 오른쪽부터 읽으며 최장 부분 수열을 추적해나가는 ..

[WIL] 2주 차 회고

2주 차 알고리즘 공부에 대한 회고 배운 점 알고리즘 문제를 다시 복습해서 풀면서 예전에 풀었던 방식보다 효율적인 풀이를 활용하게 되었다. 한 가지 방식에 의존하는 것이 아닌 여러 방식으로 접근해보는 것이 도움이 되었다. 느낀 점 한 번 풀었던 문제들을 다시 푸는 것보다 새로운 것을 푸는 것이 무조건 좋을 것이라 생각했지만, 오랜 시간이 지난 후 다시 풀어보니 이전에 보이지 않던 방법들이 떠올라 좋은 경험이었고 핵심적인 알고리즘에 대한 정리가 되었다. 이전에 풀었던 코드를 살펴보니 비효율적이고 체계적이지 못한 코드들이 자주 보였다. 당시엔 어떻게든 풀면 되는 거라 생각했었는데, 이제 와서 비교해보니 실력이 성장한 것을 알 수 있게 되었다. 재작년부터 꾸준히 해왔고 지금도 진행 중인 알고리즘 공부이기에 크..

Retrospective 2021.03.14

[WIL] 1주 차 회고

1주 차 웹사이트 프로젝트를 진행한 후 배운 점에 대한 회고를 해보고자 한다. 배운 점 기본 뼈대인 html, 꾸며주는 css, 동적으로 작동시키는 JavaScript에 대해 알게 되었고 이를 활용해서 웹 사이트의 UI를 만들어 보았다. JS의 라이브러리 중 하나인 AJAX(Asynchronous Javascript And XML)에 대해 알게 되었다. AJAX는 말 그대로 비동기식 자바스크립트와 XML의 약자인데, 전체 페이지를 새로 고치지 않고도 일부 데이터만을 로드할 수 있는 기법이다. 쉽게 말하자면 자바스크립트를 통해서 서버에 데이터를 요청하는 것이다. API(Application Parogramming InterFace, 응용 프로그램 프로그래밍 인터페이스)에 대해 알게 되었다. 공공데이터 포털..

Retrospective 2021.03.07

[Project] 실시간 중고거래 플랫폼

1. 프로젝트 제목 & 설명 "항해샵 (Hanghae#)" 실시간으로 중고물품 거래가 가능한 웹사이트입니다. 판매자가 게시글을 올리고 구매자는 검색한 물품 중 마음에 드는 물품을 구매할 수 있으며, 찜하기 기능을 통해 마음에 드는 품목을 저장해 놓을 수 있습니다. 2. 와이어프레임 3. 개발해야 하는 기능 & API 설계 로그인/회원가입 기능 [필수 포함 사항] 쿠키/세션 방식으로 로그인을 구현하고 → JWT 인증 방식으로 바꿔보기 (등장하게 된 배경은?) Jinja2 템플릿 엔진을 이용한 서버사이드 렌더링 (어떤 장점이 있을까?) 검색 기능 게시판 기능 찜하기 기능 API 설계 기능 Method URL Request Response 회원가입 POST /user/register {‘id’: id, ‘pa..

Project 2021.03.01

[스터디 5주차] 자바 클래스

학습할 것 클래스 정의하는 방법 객체 만드는 방법 (new 키워드 이해하기) 메소드 정의하는 방법 생성자 정의하는 방법 this 키워드 이해하기 1. 클래스 정의하는 방법 클래스를 이해를 하기전에 객체지향 프로그래밍에 대한 이해가 필요하다. # 객체지향 프로그래밍(OOP, Object-Oriented Programming)이란? 실제 존재하는 모든 것들을 '객체'로 취급하여 프로그래밍하는 방법이다. 실세계를 모델링하기 위해 나온 것으로 캡슐화, 정보은닉, 추상화, 상속성, 다형성의 특성을 가지고 있다. * 캡슐화: 속성(데이터)와 메소드(데이터를 처리하는 함수)를 하나로 묶은 것을 말한다. 캡슐화된 객체들은 재사용이 용이하다. * 정보은닉: 캡슐화를 통해 가능해지는 개념으로 외부로부터 정보를 은닉하는 기..

Java 2020.12.23

[스터디 4주차] 자바 제어문

학습할 것선택문반복문제어문(Control Flow Statement)제어문이란, 프로그램 실행 흐름을 개발자가 원하는 방향으로 바꿀 수 있도록 해주는 것이다.제어문의 종류조건문 : if, switch문반복문 : for문, while문분기문 : break, continue, return1. 선택문변수에 일치하는 경우의 값에 따라 실행문을 제어한다.자바에는 if, switch문을 제공한다.if-else 문법if(조건절) 문장1;else 문장2; if-else if 문법수행해야할 경우의 수가 셋 이상인 경우에 사용한다.자신보다 상단에 있는 조건을 만족하지 않으면서 자신의 조건을 만족하는 경우 수행된다. switch 문법경우의 수가 많아질 수록 if문보다는 switch문을 사용하는 것이 효과적이다.만족하는 ca..

Java 2020.12.10

[스터디 3주차] 자바 연산자

목표자바가 제공하는 다양한 연산자를 학습한다. 학습할 것산술 연산자비트 연산자관계 연산자논리 연산자instanceofassignment(=) operator화살표(->) 연산자3항 연산자연산자 우선순위(optional) Java 13. switch 연산자 1. 산술 연산자산술 연산을 할 수 있는 사칙연산(+, -, *, /)과 나머지 연산자(%)들을 말한다.2. 비트 연산자데이터를 비트 단위로 연산한다.기능에 따라 비트 이동 연산자, 비트 논리 연산자로 구분한다. 1) 비트 이동 연산자(shift) 차이점 :>>는 좌측의 빈자리를 최상위 부호 비트와 같은 값으로 채우고>>>는 좌측의 빈자리를 0으로 채운다.(결괏값은 무조건 양수로만 나타나게 됨) 2) 비트 논리 연산자 XOR은 두 비트가 다른 경우만 1..

Java 2020.11.28

[스터디 2주차] 자바 데이터 타입, 변수 그리고 배열

목표 자바의 프리미티브 타입, 변수, 그리고 배열을 사용하는 방법을 익힌다. 학습할 것 프리미티브 타입 종류와 값의 범위 그리고 기본 값 프리미티브 타입과 레퍼런스 타입 리터럴 변수 선언 및 초기화하는 방법 변수의 스코프와 라이프타임 타입 변환, 캐스팅 그리고 타입 프로모션 1차 및 2차 배열 선언하기 타입 추론, var 프리미티브 타입 종류와 값의 범위 그리고 기본 값 정수형 : bytes, short, int, long, char 소수형 : float, double 논리형: boolean 프리미티브 타입과 레퍼런스 타입 1) Primitive Type(기본형 타입) 프리미티브 타입은 정수, 실수, 문자 등 총 9가지 타입을 미리 정의하여 제공한다. 기본값이 있기에 Null이 존재하지 않는다. 넣고 싶..

Java 2020.11.21

[스터디 1주차] JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가.

학습할 것 JVM이란 무엇인가 컴파일 하는 방법 실행하는 방법 바이트코드란 무엇인가 JIT 컴파일러란 무엇이며 어떻게 동작하는지 JVM 구성 요소 JDK와 JRE의 차이 1. JVM이란 무엇인가 Java Virtual Machine의 약어로 플랫폼에 독립적으로(OS와는 다르다) Java를 실행시킬수 있게 해준다. bytecode가 JVM위에서 실행되기 때문이다. 2. 컴파일 하는 방법 컴파일이란, 사람이 작성한 코드를 컴퓨터가 이해할 수 있도록 변환해주는 과정을 말한다. 컴파일을 하는 장치는 컴파일러라고 한다. 자바는 javac.exe를 사용해서 컴파일을 한다. 3. 실행하는 방법 java.exe를 사용하여 클래스파일을 실행시킨다. 4. 바이트코드란 무엇인가 JVM이 이해할 수 있는 코드를 말한다. 이러..

Java 2020.11.21
728x90