https://www.acmicpc.net/problem/3197R, C 범위가 1 ≤ R, C ≤ 1500 이기 때문에 단순하게 빙판을 녹일 부분을 찾고 녹인 후 백조끼리 만날 수 있는지 확인하는 방법은 시간초과가 발생합니다.그래서 녹일 부분을 미리 큐에 저
https://www.acmicpc.net/problem/16933이 문제의 핵심은 낮에만 벽을 부술 수 있다는 것입니다. 즉 밤에는 부술 수 없기 때문에 이동만 할 수 있습니다. 밤에 가만히 있고 낮이 된 후에 부수고 이동하는 게 더 빠를 수 있기 때문에 밤
https://www.acmicpc.net/problem/17298스택을 이용해서 풀면 됩니다.1) 스택이 비어있으면 무조건 push2) 지금 숫자가 peek한 숫자보다 크면 pop후 index 확인 후 지금 숫자를 입력3) 2)번을 반복하다 peek한 숫자가
https://www.acmicpc.net/problem/8111BFS 이용하면 풀 수 있으나 필터를 따로 해주지 않으면 메모리 초과나 시간 초과가 발생할 수 있습니다. 배수 계산 후 일의 자리만 확인하고 1이나 0인 경우만 통과시키면 경우의 수를 줄일 수 있
문제 >https://www.acmicpc.net/problem/2806 풀이
https://www.acmicpc.net/problem/2842BFS와 투포인터를 이용해 해결할 수 있습니다.1) 투포인터 세팅처음에 고도를 전부 저장하여(중복제거) 정렬합니다.정렬 후 집과 우체국 고도 중 제일 높은 곳과 낮은 곳을 투포인터로 정합니다.2)
https://www.acmicpc.net/problem/4256전위 순회를 통해 root를 파악 후 중위 순회 왼쪽에 있는지 오른쪽에 있는지 범위를 좁히며 위치를 파악합니다. 만약에 양쪽에 없으면 부모 노드로 올라가 탐색합니다. 1) root를 찾습니다.전위
https://www.acmicpc.net/problem/4803DFS를 통해 탐색하고 이미 방문된 부분이 있으면 사이클이 있는 것으로 간주합니다. (단 직전 노드는 제외 시키기)
스택을 이용하면 쉽게 해결할 수 있습니다.폭발 문자열의 끝 부분과 같은 문자가 스택에 들어오면 확인 후 일치하면 일치하는 부분만 스택에서 제거하고 다시 문자를 스택에 넣는 것을 반복합니다.
https://www.acmicpc.net/problem/1167이 문제의 핵심은 임의 노드에서 가장 거리가 먼 노드를 찾고 그 노드 기준으로 가장 긴 거리가 가장 긴 트리의 지름입니다.
https://www.acmicpc.net/problem/1477고속도로 끝에는 휴게소를 지을 수 없지만 거리는 계산이 되므로 포함시켜야 합니다. 휴게소 간의 거리를 배열에 저장 후(양쪽 끝도 포함) 이분 탐색으로 기준 거리를 정한 후 휴게소 사이에 몇개의 휴
https://www.acmicpc.net/problem/2866이분탐색을 이용해 해결할 수 있습니다. 행과 열을 바꿔서 이용하면 더 편하게 구현할 수 있습니다.
https://www.acmicpc.net/problem/2412BFS로 해결할 수 있습니다. x의 범위가 1000000 이하이고 y의 범위가 200000 이하이기 때문에 배열로 방문처리하는 건 메모리 초과를 발생시킵니다. y축 기준으로 x축들을 List 형태
https://www.acmicpc.net/problem/1987DFS를 이용해 해결할 수 있습니다. 어떤 알파벳을 거쳐 갔는지 boolean 배열을 이용할 수도 있지만, 알파벳은 총 26자이기 때문에 비트마스킹을 이용해 해결하면 더 빠르게 문제를 해결할 수
https://www.acmicpc.net/problem/11058DP를 이용한 문제입니다. 전체 선택 -> 복사 -> 붙여넣기는 3번의 동작이 필요합니다. 붙여넣기 이후에는 계속 붙여넣기를 할 수 있으므로 전부 확인해줘야 합니다. (테스트해본 결과 3번 붙여
https://www.acmicpc.net/problem/10422DP를 이용해 해결할 수 있습니다.2개일 때2.1 : ()4개일 때4.1 : (2.1) -> (())4.2 : ()2.1 -> ()()6개일 때6.1 : ()4.1 -> ()(())6.2 : (
https://www.acmicpc.net/problem/2091DP를 이용하여 해결할 수 있습니다.동전의 총 가격을 확인하는 배열과 최대 개수를 확인할 수 있는 배열이 추가로 필요합니다.
https://www.acmicpc.net/problem/10159a > b 이고 b > c이면 a > c라는 특징을 이용해 플로이드-와샬로 해결할 수 있습니다.
https://www.acmicpc.net/problem/2580백트래킹을 이용하여 해결할 수 있습니다. 가로, 세로, 굵은선 부분을 1~9 까지 확인하면서 재귀로 접근합니다.
https://www.acmicpc.net/problem/9007일반적인 완탐으로 풀 때 최악의 경우 1000^4 으로 시간초과가 발생합니다.그래서 1, 2반을 더하는 모든 수(n^2)와 3, 4반을 더하는 모든 수(n^2)fmf 구한 다음 1, 2반에서 하나
https://www.acmicpc.net/problem/18808스티커의 모양을 리스트에 저장 후 회전시키면서 넣을 수 있는지 확인하면 됩니다. 구현 문제이기 때문에 한 구간씩 구현 후 테스트를 돌려보는게 좋습니다.
https://www.acmicpc.net/problem/1600BFS로 해결할 수 있습니다.말로 움직이는 방법까지 카운트할 수 있는 3차원 형태의 배열로 방문처리(말카운트W)를 하면 쉽게 해결할 수 있습니다.
https://www.acmicpc.net/problem/2800스택을 통해 괄호를 짝지어주고 재귀를 통해 괄호를 표시할지 말지 결정 후 나온 식을 HashSet이나 TreeSet을 이용해 중복을 제거해줍니다.(HashSet 경우 정렬을 후 출력해야합니다.)
https://www.acmicpc.net/problem/2812스택을 이용하여 해결할 수 있습니다. 현재 스택에 들어있는 값이 들어올 수 보다 크거나 같으면 그냥 push하고 작으면 pop을 하는 방식으로 해결할 수 있습니다.삭제 카운트 : 3숫자 : 123
https://www.acmicpc.net/problem/14719생각이 필요한 구현, 시뮬레이션 문제입니다. 풀이 방법은 여러가지 있겠지만 저는 왼쪽에서 오른쪽으로 오른쪽에서 왼쪽으로 한 번씩 지나가면서 값을 변경시켜주는 방식으로 구현하였습니다.처음 벽들의
https://www.acmicpc.net/problem/1039바꾼 횟수가 홀수일때와 짝수일때의 상황을 BFS로 탐색하면서 저장하고 나중에 거기서 최대값을 찾으면 됩니다.1번바꾼 상태와 3번바꾼 상태와 겹치는 경우가 있기 떄문에 홀수, 짝수로 나누어 처리했습
https://www.acmicpc.net/problem/17090DFS를 이용하여 해결할 수 있습니다. 반복되는 방문을 막기 위해 방문처리를 하는 동시에 그 미로가 탈출할 수 있는 경로인지 기록을 해놔야합니다.처음 가는 곳인 경우탈출 시 거처간 미로 카운트하
https://www.acmicpc.net/problem/1245BFS로 해결할 수 있습니다. 탐색하면서 현재 높이보다 더 큰 높이가 있으면 카운트하지 않고 없으면 카운트합니다.
https://www.acmicpc.net/problem/1726BFS로 해결할 수 있습니다. 4방향이 있기때문에 4방향에 맞춰 방문처리를 하면됩니다.
https://www.acmicpc.net/problem/17299오큰수와 비슷한 문제입니다. 차이가 있다면 미리 배열로 count를 하고 풀면 쉽게 해결할 수 있습니다.스택을 이용한 풀이는 오큰수를 통해서 확인바랍니다.
https://www.acmicpc.net/problem/19236복잡한 구현 문제입니다. 저는 DFS로 해결하였고 재귀로 들어갈 때마다 새로 배열을 복사해서 넣어줬습니다.
https://www.acmicpc.net/problem/16236구현 + BFS 문제입니다. 구현 문제는 디버깅이 힘드니 확실하게 테스트해보시고 구현하시기 바랍니다.
https://www.acmicpc.net/problem/17143구현 문제입니다. 상어를 for문으로 n번 이동시키는 것 보다 상어가 n번 움직였을 때 어디에 있을지 계산을 해서 이동시키면 시간을 줄일 수 있습니다. (moveShark() 참조)
https://www.acmicpc.net/problem/14003최장 증가 부분 수열(LIS, Longest Increasing Subsequence)을 이용하여 해결할 수 있습니다.arr : 1, 2, 6, 4, 2, 5, 3, 7, 9 dp : \[]최
https://www.acmicpc.net/problem/17825게임판을 Array로 만드느냐, LinkedList로 만드느냐에 따라 구현이 달라질 수 있습니다. 저는 LinkedList를 이용해 만들었습니다.
https://www.acmicpc.net/problem/14890저는 스택을 이용하여 해결했습니다. 스택을 쌓으면서 peek를 통해 높이가 같으면 peek값을 count하고 다르면 다시 push 하는 방법으로 스택에 쌓고 하나씩 pop하면서 비교하였습니다.L
https://www.acmicpc.net/problem/5373구현 문제입니다. 매우 복잡하기 때문에 기능을 하나씩 구현하면 테스트를 꼭 해야합니다.
https://www.acmicpc.net/problem/19543투포인터를 이용하여 해결할 수 있습니다.핵심은 보스방을 갈 수 있는 범위가 있기때문에 위에서 내려오면서 범위를 계속 지정해주면서 내려가면 됩니다.예제 1번의 경우빨간색으로 색칠되어 있는 부분이
https://www.acmicpc.net/problem/14868Disjoint Set과 BFS를 이용하여 해결할 수 있습니다.
https://www.acmicpc.net/problem/1298이분 매칭을 이용하여 해결할 수 있습니다.초기값이 이렇게 되어있는 경우1번 사람이 1번 노트북을 지목합니다.2번 사람이 1번을 노트북을 지목합니다.1번 사람은 1번 노트북 다음 3번 노트북을 지목
https://www.acmicpc.net/problem/16434이분 탐색을 통해 Nlog(10^17)로 해결할 수 있으나 N으로도 해결할 수 있습니다.모든 방을 클리어했을 때 용사가 받을 수 있는 최대 데미지를 계산하여 체력으로 바꿔주면 됩니다. 용사가 3
https://www.acmicpc.net/problem/11000우선순위큐를 이용하여 해결하였습니다.들어오는 강의를 시작시간 기준으로 정렬합니다.강의를 하나씩 넣기 전에 현재 큐에 데이터가 없거나 peek()한 강의의 종료시간이 지금 강의보다 느리면 넣고 아
https://www.acmicpc.net/problem/1744정렬 후 여러 조건들을 고려하여 구현하시면 됩니다.가장 작은 음수끼리 곱해야한다.\-5, -4, -3, -2 => (-5-4)+(-3-2)음수 갯수가 홀수이면 0이 있는지 확인\-5, -4, -2
https://www.acmicpc.net/problem/2463Disjoint-Set 응용하여 해결할 수 있는 문제입니다.가중치가 가장 큰 간선부터 하나씩 연결하면서 확인하며 이미 연결이 되어있는지 아닌지 확인합니다. 연결이 되어있지 않으면 연결 후 가중치를
https://www.acmicpc.net/problem/17081복잡한 구현문제입니다. 실수할 수 있는 부분들을 확인하고 구현하면 됩니다.주인공이 죽었을 때 체력은 음수가 아닌 0보스를 죽이고 나서 경험치를 받고 결과 출력몬스터와 전투중 사망 후 부활했을 시
https://www.acmicpc.net/problem/5214BFS를 이용하여 해결할 수 있습니다. 우선순위 큐를 이용하여 환승을 가장 적게 한 상태부터 꺼냅니다. 다른 호선을 탈 때 환승 카운트를 증가시킵니다.
https://www.acmicpc.net/problem/2075최소 힙을 이용해 해결할 수 있습니다. 항상 최소 힙에 N개의 값이 들어있도록 유지하고 값이 하나 들어오면 Heapify를 통해 나온 값을 제거합니다.
이분 매칭을 이용해서 해결할 수 있습니다. 이분 매칭 방법은 여기서 확인하시면 됩니다. 사람마다 2개의 일을 할 수 있기 때문에 사람은 2배로 복제해 후 이분 매칭을 이용하면 됩니다.
https://www.acmicpc.net/problem/1092상자들을 정렬 후 가장 무거운 상자를 옮길 수 있는 크레인부터 자신이 옮길 수 있는 가장 무거운 상자를 맡습니다. 맡을 상자가 없으면 그냥 넘어갑니다.만약 제일 무거운 상자를 옮길 수 있는 크레인
https://www.acmicpc.net/problem/10831번째 자리부터 최대한 큰 수를 넣어야 하므로 1번째부터 시작하여 최대한 넣을 수 있는 큰 수를 찾아서 넣습니다.첫 번째 자리에 들어갈 수 있는 숫자는 3, 5, 1입니다. 가장 큰 숫자인 5를
https://www.acmicpc.net/problem/13164원생들 사이에 키차이를 구한 후 정렬하여 큰 수 K개를 제외한 값들을 더합니다.
https://www.acmicpc.net/problem/1517버블 정렬을 이용하면 N^2으로 시간초과가 발생합니다. 병합 정렬을 이용하여 해결할 수 있습니다.병합 정렬을 진행하면서 두 개의 배열을 병합할 때 Swap 횟수를 계산할 수 있습니다.RightAr
https://www.acmicpc.net/problem/2243세그먼트 트리를 이용하여 해결할 수 있습니다. 사탕의 맛이 1000000이 최대이므로 그에 맞춰 세그먼트 트리를 만들어줍니다. 순위를 찾는 경우 현재 순위를 보고 자식 노드들의 값을 보고 판단합니
https://www.acmicpc.net/problem/1715우선순위 큐를 이용하여 가장 작은 값 두개를 꺼내 계산 후 다시 넣어주면 됩니다.
https://www.acmicpc.net/problem/1202그리디 알고리즘으로 최대힙을 이용하여 해결할 수 있습니다. 가방크기를 오름차순으로, 보석은 무게 기준으로 오름차순으로 정렬합니다.가방을 하나씩 확인하면서 넣을 수 있는 보석들을 모두 힙(가격 기준
https://www.acmicpc.net/problem/2469위에서 아래로, 아래서 위로 사다리를 타면서 ?까지 간 후에 매칭하는 방식으로 해결할 수 있습니다.먼저 위에서 아래로, 아래서 위로 사다리 타기를 진행합니다.오른쪽, 왼쪽, 가운데를 연결 할 수