
https://www.acmicpc.net/problem/2231for 문을 통해 입력 받는 수 이전 수 까지 검사하는 방식검사하기 위해 우선 현재 수를 저장하고 현재 수를 String으로 바꾼 후 String의 각각의 자리의 숫자를 다시 int로 변경 후 그

https://www.acmicpc.net/problem/2798dfs 방식으로 해결visited를 통해 방문 여부를 확인하며 총 3개의 카드를 탐색 했을 때 주어진 M보다 작은 경우에만 최대 값을 비교하여 저장한다.자바로 알고리즘 공부 시작한 뒤로 처음으로

처음 시도 방법replace를 통해 666을 지우고 지우기 전과 후에 길이 차이가 3이면 cnt를 1씩 증가시키는 방법주어진 예제입력에 대해서는 모두 정답이였지만 어째서인지 제출하면 계속 틀렸다....contains를 통해 문자열 안에 666이 포함되어에 있는지 확인하

heap 자료구조를 통해 문제 해결Java에서는 PriorityQueue(우선순위 큐)가 heap 큐 역할을 수행한다.ADDadd()PriorityQueue에 요소 추가 DeletepriorityQueueLowest.poll();첫번째 값을 반환하고 제거 비어있다면 n

처음에 좌표 정보를 받을때 sort 시킬 배열에도 같이 저장한다.sort 진행 한 후 HashMap을 통해 정렬된 수를 key 값으로 하고 1씩 증가시켜 해당 수가 몇 번째로 큰 수인지 저장시킨다.최종적으로 처음 좌표를 저장한 arr를 순회하면서 HashMap의 Val

Map(딕셔너리) 자료구조로 해결한 문제Map은 Key 값을 탐색하느데 O(1)의 시간 복잡도를 갖는다. 따라서 이 문제는 Map을 통해 해결할 수 있다.

TreeMap을 사용해서 해결한 문제TreeMap을 사용하면 Key 값을 기준으로 우선순위 큐의 자료구조와 마찬가지로 저장된다.이 문제는 역순으로 저장해야하므로 Collections의 reversOrder를 사용해서 해결한다.처음에 주석처리한 코드로 입력을 String
python의 기본 배열 구조인 list와 다르게java의 기본 배열 구조인 Array는 처음 선언할 때 배열의 크기를 지정해주어야 하며 크기는 수정이 불가능하다.이러한 문제점이 있어 찾던중 Java에도 List 자료구조가 있다는 것을 알게 되었다.Java의 List도
11

LIS(Longest Increasing Subsequence) - 최장 증가 부분 수열 알고리즘 응용 문제이 문제는 LIS를 위한 Dp 배열을 두개 만들어서 앞에서 부터 시작하는 LIS와 뒤에서 부터 시작하는 LIS 두개를 구한 후 두개의 LIS를 합해서 구할 수 있

LIS(Longest Increasing Subsequence) - 최장 증가 부분 수열 알고리즘 응용 문제우선 입력 받은 전깃줄을 a전봇대 혹은 b 전봇대를 기준으로 정렬한다.a 전봇대를 기준으로 정렬했다면 LIS를 b 전봇대에서 구하면 되고b 전봇대를 기준으로 정렬

우선 comparator와 comparable은 둘다 인터페이스이다.인터페이스는 추상 메소드 뿐만 아니라 일반 메소드, 생성자, 필드 등을 갖일 수 있는 추상 클래스와는 다르게 반드시 추상 메소드와, 상수만을 갖는다.인터페이스 선언인터페이스는 위와 같이 선언한다. 모든

그리디 알고리즘으로 해결한 문제회의실 끝나는 시간으로 정렬한 후 시작 시간으로 다시 정렬 하면 풀 수 있는 문제아직 람다식을통해 이차원 배열하는 방법이 익숙하지 않아 정렬하는 부분에서 많이 해맸다...

그리디 알고리즘으로 해결한 문제앞사람이 ATM을 사용하면 뒷 사람은 앞 사람이 사용한 만큼 기다려야한다. 즉 시간이 추가된다. 추가되는 시간을 최소로 하기 위해서는 오름차순으로 정렬해 주어야한다.오름차순으로 정렬 후 누적 시간까지 다 더해주면 답을 구할 수 있다.

그리디 알고리즘으로 해결한 문제이 문제에서 핵심은 처음에 -로 먼저 split하고 그 다음 +로 split해서 연산한다는 점이다.이렇게 하면 먼저 더한 후 빼게 되므로 최소로 작은 값을 만들 수 있다.Java의 경우 특수기호를 바로 사용해서 split()하게 되면 예외

분할 정복 알고리즘으로 해결한 문제2중 for 문을 돌면서 처음 색과 다르면 4개로 나누어서 해당 부분들을 탐색해 나가는걸 반복해서 해결할 수 있다.

분할 정복알고리즘으로 해결한 문제이 문제에서 생각할 부분은 괄호를 어떤 위치에서 추가하고 숫자는 어떤 위치해서 추가하여 답을 구할지이다.

이분 탐색의 Upper Bound 방식으로 해결하는 알고리즘Upper Bound는 이분탐색으로 최대값을 구할 때 사용된다.이 문제는 절단할 나무의 최대 값을 구해야 하는 문제이므로 Upper Bound 방식으로 해결해야한다.Upper bound에서 주의 할 점은 end

이분 탐색에서 Lower Bound 개념으로 해결해야 하는 문제이 문제는 이전의 Dp 방식으로는 풀 수 없는 문제이다. 주어진 수열의 크기가 1000000이므로 LIS의 시간복잡도 O(n^2)로 풀기에는 10억이 넘게 되므로 불가능하다.리스트를 통해 입력받은 배열 값을

우선순위 큐를 사용하면 쉽게 해결할 수 있는 문제오랜만에 Java의 Heap 자료구조인 PriorityQueue를 사용했다. 다행히 안까먹고 잘 사용했다. 특히 Collections.reverseOrder를 잊지 않은 점 칭찬한다.

dp와 dfs 두 알고리즘을 통해 해결할 수 있는 문제이 문제는 우선 갈 수 있는 모든 경로의 수를 구해야하므로 dfs 알고리즘을 통해 경로의 수를 구해야한다. 하지만 그냥 dfs로만 풀면 중복된 이미 구했던 경로에 대해 다시 방문해서 다시 dfs를 진행해나가는 불필요

첫 시도메모리 초과가 났다.메모리 초과 원인을 파악해보면 구슬에 대해 dfs 진행할 때 같은 구슬에 대해서 무게가 같은 경우일 때도 dfs를 진행할 경우가 존재한다. 위 코드는 static으로 dfs 함수를 선언했으므로 중복된 dfs를 계속 진행하면 메모리 초과가 발생

dp의 냅색 알고리즘으로 해결 가능한 문제냅색 알고리즘을 한 줄로 정의해 보자면 해당 물건?에 대해 넣을 때와 넣지 않을 때를 비교해서 최대 값을 구하는 알고리즘이다.

냅색을 통해 해결하는 문제지만 메모리를 고려해야하는 문제메모리가 4MB로 매무 적게 주어지기 때문에 냅색처럼 2차원 배열로는 문제를 해결할 수 없다.그렇기 때문에 1차원 배열로 해결해야한다.이 문제의 경우 주어진 숫자보다 낮은 경우는 이전 dp 정보를 그대로 가지고 있

dfs로 해결한 문제주의할 부분은 입력시 숫자가 저렇게 모여서 주어지면 nextInt로 한번에 읽기 때문에 위와 같은 방식으로 해야한다는 것!리스트 sort도 오랜만이였다. Collections.... 잊지말자~

힙 큐 자료구조를 사용해서 해결한 문제주어지는 operations의 길이가 최대 1000000이므로 매번 입력을 받을 때마다 sort할 수는 없다.그래서 힙을 통해 정보를 누적해 나가면 시간복잡도를 줄일 수 있다.다만 최대값을 제거하는 경우와 최소 값을 제거하는 경우

bfs로 해결한 문제bfs, dfs 둘 다 상관 없는 문제
최소 단계를 구해야하므로 bfs로 해결한 문제
dfs와 dp의 탑 다운 방식으로 해결한 문제

처음 시도 방법visited를 사용해서 기존에 기지국이 설치된 곳과 그 기지국 범위의 영역을 true로 둔 다음 while 문을 통해 처음 인덱스부터 하나씩 탐색하는 방식으로 정답을 구했다. 정확성 테스트는 모두 통과했지만 효율성 테스트에서 모두 시간초과가 나왔다.주어

그리디 알고리즘으로 해결한 문제차량이 고속도로에서 나간 시점에 대하여 정렬한다.차량이 나간 시점보다 시작 지점이 크다면 단속 카메라가 하나 더 필요한 경우이다. 이때 카메라를 하나 증가시키고 해당 차량의 나간 지점을 기준점으로 바꿔준다.

백트래킹 알고리즘으러 해결한 문제주어지는 user_id와 banned_id의 크기가 매우 작으므로 완전탐색이 가능하다.