분류 전체보기 189

📑 알고리즘[Greedy]_백준_13305

도로는 수평방향으로 일직선 상위에 있다. 인접한 도시간의 거리는 다를 수 있다. 가장 처음위치에서는 반드시 기름을 채워야 한다. 키로당 1리터의 거리 이동(연비똥이네,,,) 주유소는 도시마다 한 개이고, 기름 가격은 다르다. 기름가격이 싼 곳에서 적절히 기름을 구매해서 최종적으로 소요되는 기름의 가격을 최소화 시켜라 기름 가격이 가장 싼곳에서 최대한 많이 사야한다. 변수의 최댓값을 생각했을 때, int형이 아닌 Long형을 사용해야 한다. 다음과 같이 입력예제로 예를 들어보자. 4 2 3 1 5 2 4 1 첫 번째 도시는 기름 가격이 5원으로 비싸지만, 기본적으로 이동해야 하기 때문에 최소한으로 삽니다. (5 * 2) = 10 두번째 도시는 기름가격이 저렴하기 때문에 구매하는데, 이때 다음 도시의 가격을..

📑 HTML_FORM_TAG_국비_DAY42

오늘은 HTML Forms와 관련된 태그를 배웠습니다. 대표적으로 브라우저에서 가장 자주 볼 수 있는 회원가입 또는 검색등의 작업을 이 태그를 이용하여 만들 수 있습니다. 브라우저에서 사용자가 요청하는 데이터를 서버로 전송하는 용도로 사용합니다. 사용자의 요청 또는 입력을 하나의 논리적인 그룹으로 묶어서 서버로 전송합니다. 지난시간에 서버에 두 가지 종류를 보면서 각각의 역할을 살펴보았습니다. HTTP서버는 전방에서 사용자의 요청을 필터링하고, WAS는 실질적으로 사용자가 요청한 데이터를 연산 하는 서버라고 했습니다. 그러면 어떤 방식으로 클라이언트가 보는 브라우저에서 서버로 데이터를 전송하는지를 알아보겠습니다. 데이터를 서버로 전송하는 방식으로는 다음의 두 가지 방식이 있습니다. [get] URL에 요..

📑 HTML_국비_DAY41

태그 설명 Ordered List, 순서 있는 리스트 [블록요소] Unordered List, 순서 없는 리스트 [블록요소] style="list-style: decimal;"속성을 사용하여 모양 결정 가능 리스트 각 행의 데이터를 정의 [블록요소] Dictionary List Dictionary Table, 리스트의 용어 또는 이름을 정의 Dictionary Data, 리스트의 용어 및 이름의 설명 또는 값을 정의 Defines bold text, 강조체 Defines important text, 강조체 테이블을 정의 Table Header, 테이블의 컬럼명을 정의. 기본적으로 Bold, Center속성이 있음 테이블에서 한 행을 정의 각 행마다 셀에 데이터를 정의, th에 맞는 데이터를 정의 행 합치..

📑 자료구조[queue]_백준_11866

출력형식만 맞춰주고, 큐를 이해하고 있다면 기본적인 개념으로 간단하게 풀이할 수 있는 문제입니다. [문제 분석] 환형큐에 대한 문제가 나왔습니다. 환형 큐 또한 기본 큐를 기준으로 만든것이기 때문에 값을 넣고 빼는 메커니즘은 동일합니다. 환형큐 내부가 요소로 가득찬 경우, front에 있는 값을 poll or remove하면 front의 위치가 한 칸 이동하기 때문에, 새로운 값을 offer or add할 때 rear의 위치가 기존에 front가 있던 위치로 이동하게 됩니다. 원활한 이해를 통해 그림을 보겠습니다. 그렇다면 원으로 둘러쌓인(환형큐) 사람들을 탐색하면서 K번째 사람들을 연쇄적으로 배출할겁니다. 이때, 큐의 요소를 중간부터 삭제하고자 하는 것은 기본적인 큐에대한 이해가 부족한 것입니다. 물론..

📑 Tomcat다운로드&환경설정_HTML_국비_DAY40

지난 시간까지 학습했던 JDBC의 핵심은 버튼 혹은 스윙 프로그램이 아닙니다. DB모델을 모듈화는 과정이 중요합니다. 작업을 하는 언어만 자바에서 html로 바뀔 뿐입니다. Dao, Dbservice, vo의 역할과 dao가 sql명령을 처리하는 과정을 정리해서 이해하고 공부해야 합니다. 모듈화 된 기능에 대한 이해와 생각이 필요합니다. 지금까지는 자바와 DB를 연동하여 개인적으로 사용할 수 있는 데스크롭 프로그램을 해왔다면, 앞으로는 불특정 다수의 사용자가 브라우저의 주소만 알고 있다면 누구나 공용으로 이용할 수 있는 웹서버를 사용하여 웹 응요 프로그램을 학습하겠습니다. 기본적인 웹서버와 사용자의 상호작용은 다음 그림과 같습니다. 기본적인 웹 애플리케이션을 만들기 위해서 웹 서버를 구성하는 HTTP S..

📑 2022KAKAO BLIND RECRUITMENT[신고결과받기]_해시LV.1

문제와 예시를 읽어보면 생각보다 복잡하지 않은 문제입니다. 필자는 중복을 제거하기 위해 HashSet을 사용했습니다. 문제를 읽어보고 지켜야할 조건을 분석해보면 다음과 같습니다. 한 번에 한 명의 사용자만 신고할 수 있다. 같은 사람에게 여러 번 신고당한 경우 1이상 count하지 않는다. k번 이상 신고를 당한 사람은 이용이 정지당하며, 이용이 정지당한 사람을 신고한 사람에게 메일을 보낸다. 이때 id_list에 있는 사람들의 각각 메일을 받은 횟수를 count해야 한다. 위의 조건들을 살펴보자면 일단 중복을 제거해야 합니다. 중복의 조건은 신고 당한 사람을 기준으로 해당 사람을 신고한 사람이 중복되면 안됩니다. -> 필자는 이 부분에서 HashSet을 사용하기로 마음먹었습니다. report의 요소를 ..

📑 알고리즘[Greedy]_백준_1931

[문제 분석] 회의시간이 겹치지 않도록 최대한 많은 회의가 진행되어야 합니다. 그렇다면 어떤 회의를 먼저 진행시켜야 할까요? 시작시간이 빠른 회의를 먼저 배치하게 된다면, 회의시간이 얼마나 걸리는지까지 고려해야 하기 때문에, 종료시간을 기준으로 종료시간이 빠를수록 다음 회의를 배치하고 최대한 많은 회의를 진행할 수 있습니다. 주어진 예제 입력값에는 종료시간이 겹치는 경우가 없지만, 문제를 풀기 위해서는 겹치는 경우도 생각해 보아야 합니다. 예를 들어 (2 2), (1 2)이렇게 두 가지의 회의가 있다고 했을 때, 시작시간이 1인 것을 먼저 배치하면, 해당 회의가 끝나자마자 (2 2)회의를 진행할 수 있습니다. 하지만 (2 2)를 먼저 진행하게 되면 회의가 진행되는 시간이 겹치기 때문에 그 뒤에는 (1 2..

📑 시간복잡도

알고리즘 문제를 해결할 때, 가장 좋은 방식은 문제를 이해하고 어떤 자료구조를 사용하여 해결할 것인가에 대한 사고과정이 중요합니다. 알고리즘을 선택하는 기준으로 시간복잡도를 고려해야 하기 때문에 오늘은 이에 대해서 공부해보겠습니다. 자료구조를 알고 사용하는 것이 중요하지만, 각 자료구조마다 사용되는 시간 복잡도가 어느정도인지를 알면 선택에 있어 더 효율적인 방향을 잡을 수 있습니다. 하루 만에 모든 시간복잡도에 대한 공부와 예시를 들기는 어렵기 때문에,,, 기본 개념만 잡아두고, 앞으로 공부를 하면서 해당 복잡도에 관한 알고리즘을 풀게 되면 예시로 들면서 내용을 추가하겠습니다. 1. 시간복잡도 표기법 알아보기 먼저 알고리즘에서 시간 복잡도는 주어진 문제를 해결하기 위한 연산 횟수를 말합니다. 일반적으로 ..

📑 자료구조[큐]_백준_5430

알고리즘 스터디를 하면서 큐에 관련된 문제를 풀었습니다. 순서대로 풀다가 마지막에 이 문제의 정답률을 보고 살짝 겁을 먹은 상태로 문제를 읽었을 때는 생각보다 쉬운데? 하고 풀었지만, 시간 초과로 몇 번이나 실패를 했습니다. 사실 아직은 시간 복잡도의 개념을 잘 몰라서 문제에서 제시되는 입력값의 범위를 고려하지 않았는데 디버그를 몇 번을 돌려보고 해 봐도 모르겠어서 포기하려던 와중,,, 문제 밑에 "덱을 활용하여 시간 복잡도를 해결하는 문제"라는 문구를 보고 다시 다른 방법을 생각해보게 되었습니다. 문제에 제시된 대로, 조건과 에러 처리를 충분히 했는데 왜 시간 초과가 날까 생각하면서 코드를 봤더니 결국 시간이 걸릴만한 코드는 배열의 순서를 뒤집는 거였던 것 같아서 그 부분만 수정했더니 코드가 제출되었습..

📑 자료구조[Greedy]_백준_11047

그리디 알고리즘을 적용하는 첫 번째 문제입니다. 오름차순으로 입력된 동전의 가치를 위에서부터 차례대로 사용합니다. 동전을 사용하면서 매번 조합해야 하는 금액을 넘지 않는지 체크를 해주어야 합니다. 기본적으로 입력의 조건을 보면, 다음 원소는 이전 원소의 배수라는 조건이 있습니다. 여기를 확인해보시면 동전 교환에서는 탐욕 알고리즘으로 최적해를 구하지 못하는 경우의 수가 있지만, 문제 자체에서 배수 조건을 줌으로써 문제 형태를 매트 로이드로 만들었습니다. 따라서 알고리즘만 구현하면 풀 수 있는 쉬운 문제입니다. 핵심 알고리즘은 다음과 같습니다. 1 2 3 4 5 6 7 8 //동전의 가치가 가장 큰 것부터 비교를 시작합니다. for(int i=N-1; i>=0; i--) { //몫 연산자가 0보다 커야 그 ..

📑 Greedy 알고리즘

탐욕 알고리즘이란 선택의 순간마다 당장 눈앞에 보이는 최적의 상황만을 쫓아 최종적인 해답에 도달하는 방법입니다. 최적해를 구하는 데에 사용되는 근사적인 방법입니다.(언제나 최적해를 구하진 못하지만, 최적에 근사한 값을 구함) 현재 상태에서 볼 수 있는 선택지 중에 최선의 선택을 하는 알고리즘입니다. 동적 계획법보다 구현이 쉽고, 시간복잡도가 우수한 장점이 있지만 항상 최적해를 보장하지 못합니다. 여러 경우의 수 중에서 하나를 결정해야 할 때마다 그 순간에 최적이라고 생각되는 것을 선택해 나가는 방식입니다. 단, 순간마다 하는 선택은 그 순간에 대해서 지역적으로는 최적이지만, 이러한 지역적으로 최적인 선택을 수집하여 최종적인 해답을 만들었다고 해서, 이 방법이 전역적으로 최적이라는 보장은 없습니다. 하지만..

📑 자바 컬렉션 프레임워크

자바에서 컬렉션 프레임워크란 일정 타입의 데이터들이 모여 쉽게 가공할 수 있도록 지원하는 자료구조들의 기본 틀을 이야기합니다. 틀이라고 하니까 생각나는 것이 있나요? 인터페이스를 떠올렸다면 아주 이해가 쉬울 것 같습니다. 자바의 JDK는 프로그램 개발에 필요한 기초적인 자료구조들을 거의 대부분 컬렉션으로 만들어서 제공하기 때문에, 아주 중요합니다. 컬렉션은 제네릭이라는 기법으로 구현됩니다. 즉, 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것입니다. 컬렉션은 고정 크기의 배열이 가지는 단점을 극복하고, 요소라고 불리는 객체들의 삽입, 삭제, 검색 기능을 갖춘 가변 크기의 컨테이너 입니다. 컬렉션의 특징 1. 제네릭으로 구현된다. 컬렉션의 클래스나 인터페이스에..