분류 전체보기

    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를 ..

    SSR Response, Response Body

    SSR Response, Response Body

    도입 서버의 개발자가 사용자에게 페이지를 구상하여 보여주는 것을 SSR(Server Side Rendering)이라고 한다. 여러가지 종류가 있지만 나는 주로 Thymeleaf를 사용하여 처리한다. 이번에 공부한 내용은 동적인 웹페이지를 위해 SpringMVC에서 데이터를 넘겨주는 방법과 Response Body를 알아보겠다. View로 데이터 넘겨주는 방법 Thymeleaf로 데이터를 넘겨주는 다양한 방법을 알아보고자 한다. @RequestMapping("/response-view-v1") public ModelAndView responseViewV1(){ ModelAndView mav = new ModelAndView("response/hello") .addObject("data","hello!");..

    [Backjoon_10971] 외판원 순회 2

    [Backjoon_10971] 외판원 순회 2

    문제링크 https://www.acmicpc.net/problem/10971 10971번: 외판원 순회 2 첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 10) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 j www.acmicpc.net 문제설명 더보기 더보기 문제 외판원 순회 문제는 영어로 Traveling Salesman problem (TSP) 라고 불리는 문제로 computer science 분야에서 가장 중요하게 취급되는 문제 중 하나이다. 여러 가지 변종 문제가 있으나, 여기서는 가장 일반적인 형태의 문제를 살펴보자. 1번부터 N번까지 번호가 매겨져 있는 도시들이 있..

    Tistory 블로그 글 쓰면 자동으로 GitHub에 올리기

    Tistory 블로그 글 쓰면 자동으로 GitHub에 올리기

    동기 만들게된 계기.. 오늘 Git을 열심히 꾸며주었다. 😊 꾸미면서 엄청난 사람들의 Git을 많이 구경하였는데 TIL이 눈에 들어왔다. 나도 TIL쓰고 싶다는 생각에 바로 Repository부터 만들었다. Tistory에 공부한 자료도 올리고 TIL로 깃헙에 까지 매일 작성하면, 너무 귀찮다고 생각하여 생산성있게 Tistory로 올리면 자동으로 깃헙으로 넘어가는 프로그램을 만들어보자고 생각했다. 구현 방법 사용한 방법은 rss와 git Actions를 사용하는 것이다. rss란? 쉽게 말하면 최근의 작성된 기사 혹은 블로그 글을 하나의 파일로 모아둔 것이다. rss는 비교적 옛날 글과 같은 것들은 따로 모아두지 않는다. git Actions를 사용하면 git에서의 간단한 동작을 처리할 수 있다. Pyt..