전체 글

전체 글

    [BJ] 백준 3052 나머지 (JAVA)

    [BJ] 백준 3052 나머지 (JAVA)

    문제 https://www.acmicpc.net/problem/3052 풀이 방법 단순한 1차열 배열 문제다. 10개의 수를 입력받고, 각 수를 42로 나눈 나머지의 값을 계산해준다. 그리고 나서 미리 만들어둔 boolean 배열에서 나머지의 값과 동일한 인덱스를 가진 곳을 true로 변경해준다. 30이라는 수가 있다면 42로 나눈 나머지의 값이 30이므로 check[30]의 값이 true로 바뀔 것이다. 그리고나서 마지막에 true의 개수를 세서 출력해준다. 조금더 시간을 줄일려면 check 배열의 값이 true면 countiue를 해줄 순 있겠지만 큰 차이가 없을 것 같아서 그냥 작성하지 않았다. 제출 코드 import java.io.BufferedReader; import java.io.IOExce..

    [JAVA] JDBC사용하기 (Factory 패턴과 PreparedStatement)

    [JAVA] JDBC사용하기 (Factory 패턴과 PreparedStatement)

    공부하는 입장이기 때문에 혹시 글에 잘못된 점이 있다면 댓글로 알려주시면 감사하겠습니다! 저번에 작성했던 글에 이어서 오늘은 JDBC를 작성하는데 사용되는 Factory 패턴과 PreparedStatment에 대한 글을 적으려고 한다. PreparedStatement 저번에 작성했던 글을 보면 SQL문을 보낼 Statement 객체는 3가지 종류가 있다. Statement : SQl을 보내기 위한 통로. 인자가 없음. PreparedStatement : Statement와 동일한데 차이점은 인자값으로 SQL을 받기 때문에 특정한 SQL에 대한 통로라고 생각하면 된다. CallableStatement : PL/SQL을 호출할 때 사용 이 중에서 마지막 statement는 아직 PL/SQL을 배우지 않았기 ..

    [노마드코더] NextJS 시작하기 #1

    [노마드코더] NextJS 시작하기 #1

    [노마드코더] NextJS 시작하기 #1 [노마드코더] NextJS 시작하기 #2 [노마드코더] NextJS 시작하기 #3 [노마드코더] NextJS 시작하기 #4 [노마드코더] NextJS 시작하기 #5 NextJS의 가장 기초를 배우기 위해서 강의를 들으려고 한다. NextJS 시작하기 – 노마드 코더 Nomad Coders The React Framework for Production nomadcoders.co 우선 명령어를 사용해서 원하는 위치에 next프로젝트를 생성해준다. cmd나 vscode의 터미널에 입력해주면 된다. npx create-next-app@latest 그런 다음 이제 pages안에 있는 파일을 모두 지워준다. 우선 라이브러리와 프레임워크의 차이점을 알아보자. react는 언제..

    [BJ] 백준 2193 이친 수 (JAVA)

    [BJ] 백준 2193 이친 수 (JAVA)

    문제 https://www.acmicpc.net/problem/2193 풀이 방법 이 문제도 dp문제다. 0과 1로만 이루어진 수를 이진수라고 하며, 다음과 같은 성질을 만족하는 수를 이친수라고 한다. 1. 0으로 시작하지 않는다. 2. 1이 연속해서 두번 나타나지 않는다. N자리 이친수의 개수를 구하면 된다. 2차원 dp배열을 사용해서 풀이했다. dp[N][0]에는 N자리 수이며 마지막 수가 0인 이친수의 개수, dp[N][1]에는 N자리 수이며 마지막 수가 1인 수의 개수를 저장해줬다. 그리고 이제 반복문을 돌면서 끝자리가 0인 경우에는 1과 0 모두 다 올 수 있으므로 dp[i+1][0], dp[i+1][1] 에 모두 dp[i][0]의 값을 더해줬다. 그리고 끝자리가 1인 경우에는 연속으로 1이 두..

    [Next] NextJS의 getInitialProps, getStaticProps, getStaticPaths, getServerSideProps 함수

    [Next] NextJS의 getInitialProps, getStaticProps, getStaticPaths, getServerSideProps 함수

    Next 프로젝트를 처음 생성하고, 초기 세팅되어있던 페이지들을 하나씩 뜯어보면서 구조를 파악하는 중이다. 그러다가 pages/users/[id].tsx에서 다음과 같은 함수를 발견했고, 아마 데이터를 가져오는데 있어서 build time에 가져오도록 하는 그런 함수인듯 싶어서 찾아봤다. 들어가기 전 CSR : 첫 렌더시에는 페이지 로드만 수행, 다시 렌더링할 때 데이터를 불러온다. 그래서 데이터가 검색엔진에 걸리지 않는다. 대신에 데이터를 한번에 가져오기 때문에 페이지 이동시에는 속도가 빠르다. SSR : 첫 렌더시에 데이터도 같이 가져온다. 렌더를 한번만 수행하기 때문에 초기 로딩 속도가 빠르고, 검색 엔진에 데이터가 걸린다. 그러나 페이지를 이동할때마다 매번 데이터를 불러오기 때문에 페이지 이동 시..

    [JAVA] JDBC란? 자바에서 JDBC 사용하기 (JAVA + MYSQL)

    [JAVA] JDBC란? 자바에서 JDBC 사용하기 (JAVA + MYSQL)

    공부하는 입장이기 때문에 혹시 글에 잘못된 점이 있다면 댓글로 알려주시면 감사하겠습니다! 이번주에는 계속해서 DB와 관련해서 공부하고 있다. 처음에는 MySql을 사용하면서 쿼리문을 작성하는 연습을 했고, 오늘은 이제 자바와 MySQL을 연결해서 데이터를 가져와보려고 한다. JDBC란? JDBC란 Java DataBase Connectivity 의 약어로 Java와 DB연결을 위한 표준 API이다. 조금더 자세하게 설명하면 자바에서 DB를 연결하고, 그 안에 있는 데이터를 가져오기 위해서 사용하는 API이다. 이 글에서는 자바는 Eclipse, DB는 MySQL을 사용할 예정이다. 우선 전체적인 구조를 보면 크게 4가지로 나뉜다. 자바와 DB를 연결하기 위해서는 두 단계를 거쳐야한다. JDBC API는 ..

    [BJ] 백준 11057 오르막 수 (JAVA)

    [BJ] 백준 11057 오르막 수 (JAVA)

    문제 https://www.acmicpc.net/problem/11057 풀이 방법 한창 DP 문제를 풀 때의 문제들을 올리고 있어서 아마 한동안은 DP문제들만 게시할 것 같다.. 문제를 간단하게 리뷰하면 오르막수는 수가의 자리가 오름차순으로 이루어진 수를 말한다. 이때, 같은 수인 경우에도 오름차순으로 생각한다. 예를들어 1123, 3456, 249 등의 수가 있다. 수의 자리수 N이 주어지면 이 오름차순인 N자리 수의 개수를 구하면 되는 문제다. 이 문제도 DP를 사용해서 풀이했다. 바로 직전의 문제와 동일하게 dp[N][10] 의 2차원 배열을 선언해주고, N은 몇자리 수인지, 그리고 뒤에 0~9는 마지막 자리라고 생각해줬다. 예를 들어 2135 인 숫자는 dp[4][5] 에 포함이 되어있을 것이다..

    [BJ] 백준 10844 쉬운 계단 수 (JAVA)

    [BJ] 백준 10844 쉬운 계단 수 (JAVA)

    문제 https://www.acmicpc.net/problem/10844 풀이 방법 dp를 사용하는 문제다. dp는 왜 항상 해도해도 새로울까... 인접한 모든 자리의 차이가 1인 수를 계단 수라고 한다. N이 주어지고 N자리 숫자에서 계단수가 총 몇개 있는지 구하면 되는 문제이다. dp는 2차원 배열로 선언해주고, dp[N][m] : N자리 숫자이고 마지막 자리의 수가 m인 숫자의 개수를 넣어준다고 생각하면 된다. 그래서 반복문 N번 돌면서 j : 0부터 10까지 반복문을 돌린다. j는 마지막 자리 숫자이다. 만약 2343라는 수는 dp[4][3]에 포함이 되는 숫자이다. 어쨌든 반복문을 돌면서 마지막 자리수에 -1, +1을 하는 경우가 0~9사이에 존재한다면 [n+1][j+1] 또는 [n+1][j-1..

    [BJ] 백준 2116 주사위쌓기(JAVA)

    [BJ] 백준 2116 주사위쌓기(JAVA)

    문제 https://www.acmicpc.net/problem/2116 풀이 방법 구현문제로 브루투포스 알고리즘을 사용하면 된다. 우선 나는 문제에 있는 ABCDEF을 보고 각 마주보는 면의 인덱스를 미리 저장해뒀다. 다음과 같은 순서로 구현했다. 1. 맨 아래에 올 주사위의 윗면을 정해준다. (6면 전부 다 구해보기) 2. 윗면이 정해졌으면 옆면중에서 가장 큰값을 고른다. 3. 윗면의 값과 위에서 골랐던 옆면 중 가장 큰값을 가지고 주사위를 쌓으러 간다. //재귀함수 시작 (아래서 2번째 주사위부터 쌓아올리는 함수) 1. 아래에 있는 주사위의 윗면에 해당하는 값을 현재 주사위에서 찾는다. => 자동으로 윗면의 인덱스가 정해진다. 2. 옆면중에서 가장 큰값을 고른다. 3. 그 다음 주사위를 쌓으러 간다...

    [WEB] Next.js + Typesctipt + StyledComponents 프로젝트 생성하기

    [WEB] Next.js + Typesctipt + StyledComponents 프로젝트 생성하기

    이번에 새로운 사이드프로젝트를 진행하면서 기술 스택들이 정해졌고, 해당 스택들을 사용해서 프로젝트를 생성하려고 한다. react와 scss로 작업해본 경험이 있어서 이번엔 크게 next.js (react를 했으니 그래도 좀 수월하지 않을까라는 생각) 와 typescript, styled-component를 사용해보려고 한다. next 프로젝트 생성하기 with Typescript $ npx create-next-app --example with-typescript [프로젝트 이름] typescript와 같이 next프로젝트를 생성해주는 명령어이다. 실행이 끝나면 cd 를 사용해서 프로젝트로 이동해준다. $ npm install npm install를 사용해서 필요한 패키지들을 설치해준다. 설치가 다 되면..

    [BJ] 백준 11463 1로 만들기(JAVA)

    [BJ] 백준 11463 1로 만들기(JAVA)

    문제 https://www.acmicpc.net/problem/1463 풀이 방법 문제는 간단하다. 1. x가 3으로 나누어떨어지면, 3으로 나누기 2. x가 2로 나우어 떨어지면, 2로 나누기 3. 1를 빼기 위 세개의 연산을 적절히 사용해서 1을 만드는데 연산을 사용하는 횟수의 최소값을 구하는 문제이다. 이 문제는 dp를 사용해서 풀면 된다. dp[N]에는 N이 1이 될때까지의 최소 연산 횟수를 가지고 있다. 우선 N이 2또는 3으로 나누어떨어지는지 확인한다. 만약 나누어 떨어진다면 2로 나눴을 때와 3으로 나눴을때 어떤 수가 더 최소연산 횟수를 가지는지 비교해서 더 작은 값을 dp에 넣는다. 그리고 항상 -1를 했을 경우의 연산의 최소값을 구해서 기존의 dp값과 비교 후, 더 작은 값을 dp에 넣어..

    [SWEA] D4 1251 하나로 (JAVA)

    [SWEA] D4 1251 하나로 (JAVA)

    문제 저작권 문제로 인해 링크만 첨부합니다. https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15StKqAQkCFAYD&categoryId=AV15StKqAQkCFAYD&categoryType=CODE&problemTitle=1251&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 풀이 방법 프림 알고리즘에 대한 개념을 배우고 풀어본 문제다. 우선 입력값을 이요해서 인접 행렬을 만들어주고, 만들면서 각 섬 사이의 거리 값도 저장해줬다. 그 후 이제 프림 알고리즘을 수행했다. 아직 방문하지 않은 섬들중에서 가장 최소 거리..

    [BJ] 백준 1753 최단경로(JAVA)

    [BJ] 백준 1753 최단경로(JAVA)

    문제 https://www.acmicpc.net/problem/1753 풀이 방법 이 문제는 다익스트라를 이용하는 문제였던걸로 기억한다. 시작 위치에서부터 가장 최소인 경로를 출력하면 된다. 나는 우선 정점과 가중치를 저장하기 위한 클래스를 하나 선언해줬고, 우선 순위큐를 사용했다. 우선순위 큐에는 현재 시작점으로 부터 가장 가중치가 작은걸 우선으로 정렬하도록 선언했다. 우선순위 큐에서 하나씩 꺼내면서 꺼낸걸 방문 체크해주고, 꺼낸걸 기준으로 꺼낸 점접의 인접 점들을 보면서 꺼낸 것을 경유지로 간다면 더 작은 경로인 경우들만 경로를 업데이트 해주고, 우선순위 큐에다가 넣어주는 식으로 구현했다. 제출 코드 import java.io.*; import java.util.*; import sun.securit..

    [SWEA] D4 3289 서로소 집합 (JAVA)

    [SWEA] D4 3289 서로소 집합 (JAVA)

    문제 저작권 문제로 인해 링크만 첨부합니다. https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWBJKA6qr2oDFAWr&categoryId=AWBJKA6qr2oDFAWr&categoryType=CODE&problemTitle=3289&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 풀이 방법 문제를 간단하게 정리하면 각 원소가 초기에 자기자신만 가지고 있는 집합을 가지고 있고, 입력에 따라서 합집합과 같은 집합인지 확인하는 계산을 수행한다. 첫번째 원소가 0이면 합집합을 수행하고, 1이면 같은 집합인지 확인하는 연산을 ..

    [BJ] 백준 10158 개미(JAVA)

    [BJ] 백준 10158 개미(JAVA)

    문제 https://www.acmicpc.net/problem/10158 풀이 방법 문제를 간단하게 이해하면 t초후 개미의 위치를 구하면 되는 문제다. 이동은 45도로 이동을 하기 때문에 물론 이동 방향을 사용해서 하면 어려운 문제는 아니다. 하지만 이 문제에서 그런식으로 문제를 푼다면 시간초과가 난다. 시간을 단축시킬 수 있는 다른 방법을 찾아야한다. 나도 처음엔 위와 같은 방식으로 문제를 풀었는데 시간초과가 났고, 어떤 식으로 풀어야할 지 계속해서 고민을 한 것 같다. 몇시간을 고민하면서 시도를 했었는데 도저히 풀리지가 않아서 힌트를 조금 얻어서 풀었다. 내가 본 힌트는 x와 y좌표를 따로 구해보라 였다. 그래서 어떻게 따로 구하지 생각을 하다가 x좌표만 가지고 보니 좌표가 열 길이의 2배만큼 이동을..

    [네트워크] TCP와 UDP의 비교

    [네트워크] TCP와 UDP의 비교

    두 개 다 데이터를 보내기 위해 사용하는 프로토콜이다. TCP Transmission Control Protocol, 전송제어 프로토콜 인터넷을 통해 종단 간에 신뢰성 있는 바이트 스트림을 전송하도록 설계되었다. TCP서비스는 송신자, 수신자 모두가 소켓이라고 부르는 종단점을 생성함으로써 이루어진다. TCP에서 연결 설정은 3-way handshake를 통해 이루어진다. 연결 해제는 4-way handshaking을 통해 이루어진다. 흐름 제어 및 혼잡 제어 기능을 수행한다. UDP User Datagram Protocol, 사용자 데이터그램 프로토콜의 약자로 비연결형 프로토콜이다. IP 데이터그램을 캡슐화하여 보내는 방법과 연결 설정을 하지 않고 보내는 방법을 제공한다. 흐름제어, 오류제어 또는 손상된..

    [SWEA] D4 1238 Contact (JAVA)

    [SWEA] D4 1238 Contact (JAVA)

    문제 저작권 문제로 인해 링크만 첨부합니다. https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15B1cKAKwCFAYD&categoryId=AV15B1cKAKwCFAYD&categoryType=CODE&problemTitle=1238&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 풀이 방법 이 문제는 인접배열을 사용해서 풀었다. 우선 입력값을 활용해서 인접 배열을 만들고, 나장 나중에 연락을 받는 사람 중에서 가장 큰 번호를 가진 사람을 찾아야하기 때문에 BFS를 사용했다. 시작원소를 queue에 넣고 while문을 ..

    [BJ] 백준 10163 색종이(JAVA)

    [BJ] 백준 10163 색종이(JAVA)

    문제 https://www.acmicpc.net/problem/10163 풀이 방법 이 문제는 서브태스크로 채점이되는 문제이다. 서브태스크 문제는 약간 예외를 생각하기 좋은 것 같다. 문제를 간단하게 설명하자면 여러장의 색종이를 순서대로 놓는데 겹쳐서 놓을 수가 있다. 출력값으로 색종이를 다 놓았을 때 각각의 색종이가 보이는 면적을 출력해야한다. (https://yoon990.tistory.com/33 이 문제가 생각이 났다.) 그래서 위에서 언급한 문제를 응용해서 이번에는 무조건 1로만 채우는 것이 아니라 색종이의 번호를 넣어주는 식으로 생각을 했다. 첫번째 색종이 면적은 1로, 2번째면 2로 .. 이런식으로 N번째 색종이까지 다 채운 후, 마지막에 1부터 N까지 map에 자신에 해당하는 번호가 몇 개..

    [BJ] 백준 2628 종이자르기 (JAVA)

    [BJ] 백준 2628 종이자르기 (JAVA)

    문제 https://www.acmicpc.net/problem/2628 풀이 방법 우선 행과 열의 크기에 맞게 1차원 배열을 선언해줬다. 그리고 그 배열에는 입력에 따라서 자른 점선 번호이면 1로 배열 값을 수정해줬다. 문제와 같은 예시로 설명을 하자면 num 1 2 3 4 5 6 7 8 9 cutM 0 0 0 1 0 0 0 0 0 num 1 2 3 4 5 6 7 cutN 0 1 1 0 0 0 0 이런식으로 값이 들어가게 된다. 그 후 이제 각각 배열을 돌면서 temp 길이를 1을 하나씩 추가하다가 1을 만나면(잘려진 선을 만났으므로) 최대 길이와 비교해서 필요시 최대길이를 업데이트해주고 temp는 다시 0으로 설정해준다. (새로운 길이 시작) 열과 행을 같은 방법으로 구현 후, 각각의 max값을 곱해주..

    [SWEA] D4 7465 창용 마을 무리의 개수 (JAVA)

    [SWEA] D4 7465 창용 마을 무리의 개수 (JAVA)

    문제 저작권 문제로 인해 링크만 첨부합니다 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWngfZVa9XwDFAQU&categoryId=AWngfZVa9XwDFAQU&categoryType=CODE&problemTitle=7465&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 풀이 방법 서로소 집합에 대해서 공부한 뒤 풀어본 문제였다. 사람 사이의 관계를 입력받아서 총 무리가..

    [BJ] 백준 15686 치킨배달 (JAVA)

    [BJ] 백준 15686 치킨배달 (JAVA)

    문제 https://www.acmicpc.net/problem/15686 풀이 방법 문제를 보고서 어떤식으로 문제를 풀어야할 지 순서를 생각해봤다. 1. 우선 치킨집에서 어떤 치킨집을 남겨둘 것인지에 대한 조합 만들기 2. 골라진 치킨집들을 가지고 치킨거리를 구하기 3. 치킨 거리를 구하면서 최소값 저장하기 순서로 구현했다. 제출 코드 import java.io.*; import java.util.*; public class BJ_15686_치킨배달 { public static int N, M, minDist; public static int[] chickenDist; public static int[][] map; public static int[][] selectChicken; public stati..

    [Spring] 인프런 스프링 입문 강의 정리 #1

    [Spring] 인프런 스프링 입문 강의 정리 #1

    [무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com 글에서 나오는 모든 코드와 사진들은 김영한님의 인프런 스프링 입문 강의에서 가져온 것임을 미리 알립니다. 오늘은 알고리즘도 하기 싫고 cs도 하기 싫어서 그냥 스프링 강의를 들었다. (아무것도 안하면 불안한 취준생이라...) 그 유명한 김영한 님의 스프링 강의! 처음 듣는 거라서 우선 무료 강의를 들어봤다. 강의를 들으면서 정리해야하는 내용들과 나중에 공부할 때 도움이 될만한 내용들을 적을 예정이다. 글에서 나오는 모든 코드와 사진들은 김영한님..

    [CS] Caching이란?

    [CS] Caching이란?

    Cashing 캐싱이란 저장한다는 뜻을 가지고 있다. 오랜 시간이 걸리는 작업의 결과를 저장해서 시간과 비용을 줄이는 기법을 의미한다. 캐싱은 고성능 애플리케이션을 만드는데 가장 중요한 요소 중에 하나다. 캐싱과 비슷한 예) 같은 사진을 여러번 사용하려고 할 때, 매번 다운로드 받는것이 아니라 로컬 파일에 저장했다가 사용하고 싶을 때 로컬에 저장된 이미지를 사용한다. CPU는 연산의 결과를 빠르게 저장하기 위해서 메인메모리보다 빠른 캐쉬 메모리를 사용해서 빠르게 작업을 처리한다. 그냥 한마디로 말하자면 원래 있던 장소보다 더 가까운 곳에 저장해놓고 매번 가져다 쓰는거라고 생각하면 된다. 문제 미리 저장해 놓는다고 좋은 것만은 아니다. 만약 원본이 있던 곳에서 원본 데이터가 변경이 되었을 경우엔 자동으로 ..

    [네트워크] HTTP의 GET과 POST의 차이점

    [네트워크] HTTP의 GET과 POST의 차이점

    GET과 POST는 둘다 HTTP 프로토콜을 이용해서 서버에 무엇인가를 요청할 때 사용하는 방식이다. GET GET 방식은 요청하는 데이터가 HTTP Request Message의 Header 부분에 url이 담겨서 전송된다. 그렇기 때문에 URL에 ? 뒤에 데이터가 붙어 request를 보낸다. 예시로 www.hello.com?type=test&id=text 이런 형태를 띈다. GET방식은 url에 정보가 담겨가기 때문에 전송할 수 있는 데이터의 크기가 제한적이다. 또한 보통 클라이언트에서 서버측에 요청을 보낼 때 GET과 POST를 사용하는데 패스워드나 개인정보가 url에 담겨서 전송이 된다면 보안적으로 위험할 수 있다. 그래서 GET방식은 주로 서버에서 데이터를 가져올 때 사용한다. 단순한 조회 기..