java

    Riot Data Pipeline 구축하기 #2 - Spring boot 프로젝트 생성 및 Riot API 사용해보기

    지난번 글에서 Riot API를 위한 Product 등록까지 마쳤고 며칠 내로 승인되어 Approved 상태가 되었습니다. 그래서 Java Spring을 이용해서 간단한 API 사용을 해봤습니다. Spring boot 시작하기 Spring 프로젝트를 만들기 위해서 start.spring.io 사이트에 접속해 아래와 같이 여러가지 설정을 해줬습니다. 이렇게 설정을 해주고 아래에 "Generate" 버튼을 눌러주면 zip 파일 하나가 다운로드되는데, 해당 파일을 압축 해제하면 프로젝트 관련 파일들을 확인할 수 있습니다. 프로젝트 파일을 확인 후 저는 IntelliJ를 사용하여 코딩을 진행했습니다. Riot API 확인하기 Riot Developer 페이지에서 내 Product 페이지에 들어가면 사용할 수 있..

    [Algorithm][투 포인터] 백준 1806 - 부분합

    알고리즘 분류 투 포인터 시간 복잡도 \( O(N) \) 문제 링크 https://www.acmicpc.net/problem/1806 이번 문제의 알고리즘 종류는 투 포인터입니다. 주어진 배열에서 조건을 만족하는 연속된 수들 중 가장 짧은 길이를 알아야 합니다. 문제의 제목은 부분합이지만 실제로 이 문제를 푸는데 지난번에 다뤘던 부분합 알고리즘이 사용되진 않습니다. 왜냐하면 부분합 알고리즘은 각 지점마다 누적된 합을 구해놓고 특정 구간의 합만 구하면 되지만 이번 문제는 조건을 만족하는 모든 구간을 알아봐야하기 때문입니다. 투 포인터의 핵심은 "배열이 끝날 때까지 크면 줄이고 작으면 늘린다"입니다. 투 포인터는 배열을 처음부터 탐색하게 되는데 특정 구간의 시작점을 나타내는 S와 끝 지점을 나타내는 E가 있..

    [Algorithm][BFS] 백준 13549 - 숨바꼭질 3

    알고리즘 분류 BFS (너비 우선 탐색) 시간 복잡도 \( O(V + E) \) 문제 링크 https://www.acmicpc.net/problem/13549 해당 문제는 대표적인 BFS 문제입니다. 현재 위치 N에서 목적지 K까지 가는데 가장 최소 시간을 구해야 합니다. 이처럼 탐색을 하는 데 있어 최소 시간을 구하는 문제는 DFS보다는 BFS를 이용해야 시간 초과가 나지 않습니다. BFS의 핵심은 "해당 지점에서 갈 수 있는 곳을 다시 Queue에 넣는다" 입니다. 이때 중복되는 지점을 계속해서 탐색을 한다면 시간 초과가 발생하기 때문에 꼭 잘 체크해서 Queue에 넣어줘야 합니다. BFS 문제는 많이 풀다 보면 비슷한 템플릿이 있다는 것을 알게 됩니다. 템플릿은 보통 아래와 같습니다. 입력 변수들 ..

    [Algorithm][부분 합] 백준 11659 - 구간 합 구하기 4

    알고리즘 분류 부분 합 시간 복잡도 \( O(n) \) 문제 링크 https://www.acmicpc.net/problem/11659 해당 문제는 부분 합 알고리즘의 가장 기본적인 문제입니다. 부분 합 알고리즘의 핵심은 "처음부터 \( i \)번째까지 원소의 합을 미리 구해놓자"입니다. 그래서 특정 구간의 합을 \( O(1) \)의 시간으로 알아낼 수 있습니다. 단순하게 for문을 이용하여 특정 구간의 합을 구하는 시간은 \( O(n) \)이지만 구간의 합들 중 가장 크거나 작은 값을 알려면 모든 구간의 합을 알아야 합니다. 그래서 결국 시간 복잡도는 \( O(n^2) \)가 됩니다. 이런 문제의 경우 \( N \)의 값은 10만 이상의 값이므로 \( O(n^2) \)의 시간 복잡도에서는 당연히 시간 초..

    [Algorithm][위상 정렬] 백준 2252 - 줄 세우기

    알고리즘 분류 위상 정렬 시간 복잡도 \( O(V + E) \) 문제 링크 https://www.acmicpc.net/problem/2252 선행되어야 할 인덱스들이 주어지면서 가능한 순서를 답으로 제출하는 위상 정렬의 문제입니다. 입력으로써 특정 인덱스 2개가 주어지면 첫 번째 숫자와 두 번째 숫자는 꼭 지켜야 할 순서입니다. 테스트 케이스 2번을 예시로 든다면 아래 그림처럼 4가 2를 가리키고 3이 1을 기리 키는 구조가 됩니다. 이 두 관계를 제외하고는 각 숫자들은 서로 연관되지 않습니다. 위상 정렬의 핵심은 "간선이 없는 노드를 처리하자" 입니다. 여기서 간선이 없는 노드의 뜻은 "가리킴을 당하지 않는 노드"입니다. 그래서 저의 풀이는 Queue를 사용했고 처리하는 과정에서 간선이 없는 노드가 생..

    [Java] Java Class 및 Object #2 - 생성자와 변수 초기화

    Class 어떠한 물체를 코드로 구현해 추상화시킨 개념. Object 추상화시킨 개념인 Class가 구체적인 실체로 만들어진 것. 지난번 글에서는 Java 클래스와 객체에 대해 설명했고 이어서 변수의 종류와 생성 시기를 이야기했습니다. 이번 글에서는 클래스 생성자와 변수들의 초기화 과정에 대해 이야기해보겠습니다. 생성자 선언하기 생성자란 인스턴스가 생성될 때 호출되는 "초기화 메소드" 입니다. 인스턴스가 new를 통해 생성될 때 자동으로 가장 먼저 호출되는 클래스의 메소드이기 때문에 보통 초기화 과정을 작성합니다. 그렇다면 직접 코드에서 어떻게 작동을 하는지 알아보겠습니다. 이전 글에서 사용했던 Animal 클래스와 main 메소드를 참고하겠습니다. Animal 클래스의 기타 메소드들은 생략했다는 점 알..

    [Java] Java Class 및 Object #1 - 변수 종류와 생성 시기

    Class 어떠한 물체를 코드로 구현해 추상화시킨 개념. Object 추상화시킨 개념인 Class가 구체적인 실체로 만들어진 것. 제 블로그에서 Java에 대한 글이 포스팅 될 예정입니다. Java는 대학생 시절에 공부한 이후로 따로 공부하지 않았기에 역량이 부족하다고 생각했습니다. Java 공화국이라고도 불리는 대한민국에서 Java의 비중은 무시할 수 없습니다. 미래에 Java가 계속 높은 비중을 차지할지 아니면 다른 언어가 높은 비중을 차지할지 모르겠지만, Java에 대한 기초적인 역량은 필수라고 생각하기에 다시 공부하기로 결심했습니다. Java 공부의 베이스로 "Java의 정석"이라는 유명한 책과 pdf를 참고했다는 점 알아주시기 바랍니다. 클래스와 객체 가장 첫 포스팅 주제는 클래스입니다. 앞에 ..