분류 전체보기

    [BOJ_11724] 연결요소 (java)

    [BOJ_11724] 연결요소 (java)

    문제링크 https://www.acmicpc.net/problem/11724 11724번: 연결 요소의 개수 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주 www.acmicpc.net 문제설명 더보기 더보기 문제 방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가..

    DNS(Domain Name Service)란 무엇인가?

    DNS(Domain Name Service)란 무엇인가?

    도입 웹 브라우저로 통신을 할 때 인터넷프로토콜(Internet Protocol)을 사용한다. 웹서버로 Request를 하면 그에 대한 Response가 넘어오며 웹 브라우저를 구성하게 된다. 이때 우리는 통신을 위해 웹서버의 IP를 필요하게된다. 하지만 우리가 웹서버에 요청을 할때는 도메인만 입력을 하게 된다. 호스트를 IP로 변경해주는 역할을 수행해주는 역할을 수행하는 DNS에 대하여 알아보도록 하자. DNS란? DNS는 웹서버에 대한 전화번호부라고 비유되며 도메인에 대한 IP와 라우팅 정보를 제공해주는 DB이다. URL의 host부분을 보고 매칭되는 IP정보를 주게 된다. 클라이언트(사용자)는 IP를 몰라도 도메인 명만 알고 있으면 편리하게 웹서버에 요청하여 웹페이지를 구성할 수 있게 된다. 과거의..

    URI? URL? URN?

    URI? URL? URN?

    도입 URI, URL, URN에 대하여 알아보자. URI(Uniform Resource Identifier) 리소스를 식별할 때 다른 항목과 구분하는데 필요한 정보로 리소스가 있는 위치(Location) 혹은 이름(Name)이 있을 수 있다. URL(Uniform Resource Locator) 리소스를 식별하는데 위치(Location)으로 필요한 정보를 구분하는 방법이다. URL을 만드는 방법은 아래와 같다. scheme - scheme은 프로토콜로 자원을 접근하는 방법을 의미한다. - http, https, mailto, ftp 등등이 있다. - http://username:password@www.google.com:80/search?q=hello#20 userinfo - 사용자의 인증정보를 포함해서..

    Queue와 Deque(큐와 덱)

    Queue와 Deque(큐와 덱)

    도입 기본 자료구조인 Queue와 Dequeue에 대하여 알아보자. Queue Queue는 선입 선출의 자료구조이다. 데이터를 넣는 부분과 빼는 부분이 다르다. push(x) : 데이터를 넣는 연산 pop(x) : 데이터를 빼는 연산 C++은 STL의 queue를 Python은 collections의 deque를 사용하면 된다. 자바를 사용하는 경우 java.util.Queue의 Queue를 사용하면 된다. 삽입과 삭제 Queue에서 삽입을 한 경우이다. Queue의 뒷 부분에 20이 삽입되는 것을 알 수 있다. Queue에서 pop을 수행한 경우는 앞 부분에 43가 나오는 것을 알 수 있다. 위 삽입과 삭제 과정에서 주목해야할 점은 데이터가 들어가는 방향과 나오는 방향이 다르다는 점이다.(Queue의 ..

    www.google.com url을 검색하면 일어나는 일

    www.google.com url을 검색하면 일어나는 일

    도입 이번에는 www.google.com을 검색하면 어떻게 우리에게 구글 웹 브라우저를 보여주게 되는지 알아보도록 하겠다. 웹 페이지를 가져오는 과정 URL 주소를 검색한다. www.google.com을 입력한다. 호스트명을 DNS 서버에서 검색한다. DNS 서버에서 해당 호스트명에 대한 IP 주소를 찾아 전달한다. HTTP Request를 생성하고 TCP 프로토콜을 사용하여 인터넷을 거쳐 해당 IP 주소로로(웹 서버) 전송한다. 전송받은 HTTP Request 메시지를 받는다. 사용자로부터 받은 HTTP Request 메시지를 웹서버가 처리하며 필요한 데이터가 없는지 확인한다 HTTP Request에서 요구한 데이터를 전달한다. 해당 데이터를 활용해 HTTP Response를 생성하고 사용자 IP로 응..

    [BOJ_2156] 포도주 시식 (java)

    [BOJ_2156] 포도주 시식 (java)

    문제링크 https://www.acmicpc.net/problem/2156 2156번: 포도주 시식 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규 www.acmicpc.net 문제설명 더보기 더보기 문제 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규칙이 있다. 포도주 잔을 선택하면 그 잔에 들어있는 포도주는 모두 마셔야 하고, 마신 후에는 원래 위치에 다시 놓아야 한다. 연속으로 놓여 있는 3잔을 모두 마실 수는 없다...

    [backjoon_11057] 오르막 수 (Java)

    [backjoon_11057] 오르막 수 (Java)

    문제링크 https://www.acmicpc.net/problem/11057 11057번: 오르막 수 오르막 수는 수의 자리가 오름차순을 이루는 수를 말한다. 이때, 인접한 수가 같아도 오름차순으로 친다. 예를 들어, 2234와 3678, 11119는 오르막 수이지만, 2232, 3676, 91111은 오르막 수가 아니다. 수 www.acmicpc.net 문제설명 더보기 더보기 문제 오르막 수는 수의 자리가 오름차순을 이루는 수를 말한다. 이때, 인접한 수가 같아도 오름차순으로 친다. 예를 들어, 2234와 3678, 11119는 오르막 수이지만, 2232, 3676, 91111은 오르막 수가 아니다. 수의 길이 N이 주어졌을 때, 오르막 수의 개수를 구하는 프로그램을 작성하시오. 수는 0으로 시작할 수..

    [backjoon_2225] 합분해 (Java)

    [backjoon_2225] 합분해 (Java)

    문제링크 https://www.acmicpc.net/problem/2225 2225번: 합분해 첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 문제설명 더보기 더보기 문제 0부터 N까지의 정수 K개를 더해서 그 합이 N이 되는 경우의 수를 구하는 프로그램을 작성하시오. 덧셈의 순서가 바뀐 경우는 다른 경우로 센다(1+2와 2+1은 서로 다른 경우). 또한 한 개의 수를 여러 번 쓸 수도 있다. 입력 첫째 줄에 두 정수 N(1 ≤ N ≤ 200), K(1 ≤ K ≤ 200)가 주어진다. 출력 첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다. 제한사항 제한시간 메모리제한 2초 128MB * 출처 : https://www.acmicpc.ne..

    PRG Post/Redirect/Get

    PRG Post/Redirect/Get

    도입 물건을 주문하는 서비스를 개발하거나 회원을 등록하는 서비스를 개발할 때 HTTP의 Post 메소드를 주로 사용한다. 이 때, Post로 상품을 주문하도록 하고, 웹페이지를 바로 랜더링했다고 생각하면 매우 끔찍한 일이 벌어진다. 왜냐면 최종적인 HTTP가 Post이기 때문에 만약 사용자가 결제 후 랜더링된 페이지에서 새로고침을 누르면 중복해서 결제가 진행되기 때문이다. Post - Redirect - Get PRG를 사용해야하는 이유는 도입부분에서 매우 자세하게 설명이 되어있다. 클라이언트가 form tag에 데이터를 입력하고 주문을 하면 Post로 데이터가 넘어와 서버에서 해당 부분을 처리하게 된다. 이렇게 처리가 된 경우 최종적인 HTTP입력이 Post이므로 새로고침시 계속해서 Post가 실행되는..

    [backjoon_15990] 1,2,3 더하기 5(Java)

    [backjoon_15990] 1,2,3 더하기 5(Java)

    문제링크 https://www.acmicpc.net/problem/15990 15990번: 1, 2, 3 더하기 5 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. www.acmicpc.net 문제설명 더보기 더보기 더보기 문제 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 3가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 단, 같은 수를 두 번 이상 연속해서 사용하면 안 된다. 1+2+1 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, ..

    Server Side Rendering (Thymeleaf)

    Server Side Rendering (Thymeleaf)

    도입 서버 개발자가 웹페이지를 구성하여 보여주는 기능을 SSR이라고 한다. SSR은 여러가지 방법으로 구현될 수 있는데 그 기술 중 네츄럴 템플릿인 Thymeleaf를 알아보도록 하자. SSR(Server-Side Rendering) 서버 개발자가 보여주고 싶은 웹페이지를 구성하여 보여주는 방법을 SSR이라고 한다. 서버를 활용하여 웹페이지를 랜더링하기 때문에 CSR(Client-Side Rendering) 보다는 페이지를 생성하여 보여주는 것보다 느리지만, 데이터를 가져와 웹페이지의 콘텐츠를 모두 추가하여 보여주는 면에서는 더 빠르다. Thymeleaf SSR을 구성하는 방법 중 하나로 Thymeleaf가 있다. 이 기술의 특징은 네츄럴 템플릿 이라는 점이다. Html의 tag안에 동적으로 서버에서 처..

    [Backjoon_11052] 카드 구매하기(Java)

    [Backjoon_11052] 카드 구매하기(Java)

    문제링크 https://www.acmicpc.net/problem/11052 11052번: 카드 구매하기 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000) www.acmicpc.net 문제설명 더보기 더보기 문제 요즘 민규네 동네에서는 스타트링크에서 만든 PS카드를 모으는 것이 유행이다. PS카드는 PS(Problem Solving)분야에서 유명한 사람들의 아이디와 얼굴이 적혀있는 카드이다. 각각의 카드에는 등급을 나타내는 색이 칠해져 있고, 다음과 같이 8가지가 있다. 전설카드 레드카드 오렌지카드 퍼플카드 블루카드 청록카드 그린카드 그레이카드 카드는 카드팩의 형태로만 구매할..

    다이나믹 프로그래밍

    다이나믹 프로그래밍

    다이나믹 프로그래밍은 큰 문제를 작은 문제로 나누고 효율적으로 푸는 방법이다. 효율적으로 풀기 위해서는 중복되는 작은문제에 대한 처리를 Memorization을 통해 간단히 해결할 수 있다. 다이나믹 프로그래밍 다이나믹 프로그래밍은 큰 문제를 작은문제로 바꾸어 푸는 것이다. 다이나믹 프로그래밍으로 문제를 해결하기 위해서는 Overlapping Subproblem과 Optimal Substructure라는 두가지 조건을 만족해야한다. 그리고 위의 조건에 의해 불필요하게 중복처리해야하는 문제들이 있다. 이를 해결하기 위해 Memorization을 사용한다. 다이나믹 프로그래밍의 대표적인 예로 피보나치 수열이 있으며 다이나믹 프로그래밍의 두가지 조건과 효율적으로 해결하기 위한 Memoriation을 알아보도록..

    차가운 학교의 시간은 멈춘다(상,하)

    차가운 학교의 시간은 멈춘다(상,하)

    책 소개 저자 : 츠지무라 미즈키 저/ 이윤정 역 출판사 : 손안의 책 장르 : 미스테리, 소설 *이 글은 책 내용에 대한 스포일러가 포함될 수 있음. 책을 읽은 계기 나는 심심할 때 독서를하는것을 즐긴다. 위 책은 최근 교보문고 책방을 놀러가 책을 구경하다가 친구의 추천으로 읽게 되었다. 느낀점 어느 학생의 자살로 인하여 미스테리한 사건이 벌어지는 내용이다. 작가의 묘사력이 매우 뛰어나고, 한명씩 죽으면서 점점 잊혀진 기억을 되찾게 되는데 책 내용이 굉장히 매력적이고 몰입이 잘 되는 책이다. 미스테리한 장르에서 마지막에 반전된 결과를 보여주는 책을 좋아하는 사람들은 한번쯤 읽는것을 추천한다. 포스팅을 마치며 최근에는 퇴근하고나서 운동하고 취업준비를 하느라 정신이 없이 보냈다. 그래도 조금의 여유가 있는..

    [Backjoon_14391] 종이조각 (Java)

    [Backjoon_14391] 종이조각 (Java)

    문제링크 https://www.acmicpc.net/problem/14391 문제설명 더보기 더보기 더보기 문제 영선이는 숫자가 쓰여 있는 직사각형 종이를 가지고 있다. 종이는 1×1 크기의 정사각형 칸으로 나누어져 있고, 숫자는 각 칸에 하나씩 쓰여 있다. 행은 위에서부터 아래까지 번호가 매겨져 있고, 열은 왼쪽부터 오른쪽까지 번호가 매겨져 있다. 영선이는 직사각형을 겹치지 않는 조각으로 자르려고 한다. 각 조각은 크기가 세로나 가로 크기가 1인 직사각형 모양이다. 길이가 N인 조각은 N자리 수로 나타낼 수 있다. 가로 조각은 왼쪽부터 오른쪽까지 수를 이어 붙인 것이고, 세로 조각은 위에서부터 아래까지 수를 이어붙인 것이다. 아래 그림은 4×4 크기의 종이를 자른 한 가지 방법이다. 각 조각의 합은 4..

    [Backjoon_1182] 부분수열의 합(Java)

    [Backjoon_1182] 부분수열의 합(Java)

    문제링크 https://www.acmicpc.net/problem/1182 1182번: 부분수열의 합 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. www.acmicpc.net 문제설명 더보기 더보기 더보기 문제 N개의 정수로 이루어진 수열이 있을 때, 크기가 양수인 부분수열 중에서 그 수열의 원소를 다 더한 값이 S가 되는 경우의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 ..

    비트마스크 알고리즘

    비트마스크 알고리즘

    도입 비트마스크 알고리즘은 비트연산자를 활용해 간단하게 집합을 표현하는 알고리즘이다. 비트마스크를 사용하면 하나의 정수로 여러가지 집합을 표현할 수 있다. 하지만 여러가지 제약사항이 있으므로 사용에 있어 주의해야하며 주로 다이나믹 프로그래밍에서 주로 사용한다. 비트연산 | 연산 : or연산으로 둘 중 하나가 1이면 1이다. &연산 : and연산으로 둘 다 1이어야 1이다. ^연산 : xor연산으로 두개의 연산자가 서로 다른 값이어야 1이다. ~연산 : not연산으로 1을 0으로 0을 1로 변경하여준다. -shift연산- >> 연산은 비트를 오른쪽으로 미는 연산으로 2의 n승을 나누는 것과 동일한 결과가 나온다.

    HTTP Message Converter

    HTTP Message Converter

    도입 HTTP의 바디에 값을 넘겨줄 때 view를 활용하여 html을 생성해서 보내줄 수도 있고 간단하게 json이나 String 형식으로 넘겨줄 수 있다. json이나 String형식으로 넘겨줄때는 HTTP Message Converter를 사용하면 편리하게 넘겨줄 수 있다. 오늘은 HTTP Message Converter를 알아보도록 하겠다. HTTP Message Converter HttpMessageConverter는 requset로 넘어온 body 데이터 값을 받아오거나 혹은 response로 데이터를 body에 보낼 때 적절하게 변환해주는 역할을 수행한다. 예를들어 @ResponseBody annotation이 붙어있는 메소드가 실행이 될 때 적절한 HTTP Message Converter를 ..