생략'문제에서 요구한 바를 그대로 해도 해결할 수 있을까?'를 생각해 보자.가로 세로가 N인 정사각형에서 학생의 수가 N\*N인데 학생마다 좋아하는 학생이 4명 있다. 그것을 가까운 4방향으로 확인해 본다면 어떻게 될까?가로, 세로, 학생의 수를 다 곱하면 N^44방향
2차원 누적 합을 활용하면 된다.가로로 누적 합을 진행한 뒤 세로로 누적 합을 진행하면 누적 합이 완성된다. 사용 방법은 이러하다.시작과 끝을 재단하기 위해 제외되는 지점을 빼준다. 빼는 지점의 겹치는 지점(시작 지점의 대각선)을 다시 더하면 된다.누적 합을 하고 난
N^2로 해결하면 시간 초과가 난다.그렇다면 최대한 줄여주는 게 좋다.이 문제에서 요구하는 건 차이의 최소이다. 그렇다는 건 가장 가까운 수끼리 모이게 해주는 게 좋다.정렬한 수에서 M 이상인 차이를 찾아주면 된다.작은 수와 큰 수로 나누어 2개의 포인터로 확인하면 된
문장을 이루는 모든 단어에 대해서 모든 앵무새의 단어를 확인해도 10,000\*100이기에 시간 안에 가능하다.앵무새가 말하는 단어는 2번 이상 등장하지 않기에 순서가 잘못되어서 틀리는 경우는 없다. (앞에 앵무새에게 순서를 빼앗겨서 뒤에 단어를 사용하지 못하는 경우가
우선순위를 최대, 최소로 하여 2개의 우선순위 큐를 만든다.이후 최대, 최소에서 이미 사용한 값인지 확인해야 하는데 중복도 가능하므로 map을 사용해 주면 좋다.숫자의 범위가 큰 것은 map의 형태를 사용하는 것으로 해결할 수 있다.map을 통해 몇 개 남았는지 확인해
중복을 제거하고 다음 재귀에서 인덱스를 유지해 준다.중복을 제거하거나 이전의 값을 저장하여 같으면 건너뛰어 주는 식으로 해결하면 된다.
구역을 나눌 수 있다.한 구역을 기준으로 9개의 구역으로 나뉘는데 가운데를 제외한 8구역은 반복되는 모습을 볼 수 있다.가운데에 표시를 해주고 나머지 9역을 재귀적으로 접근하면 된다.3의 제곱만큼의 크기로 존재하기에 3으로 나누어서 분할해 줘도 된다.
이전 돌에서 다음 돌로의 값을 탐색으로 확인해 주고 만약 다음 돌이 작은 돌인 경우 무시하는 방식으로 해결하면 된다.DFS, BFS 모두 사용해 주어도 된다.만약 1차원 DP로 해결하려 하면 먼저 도착한 값에 의해 오류를 겪게 된다. (빠르게 도착하였지만 이후 작은 돌
중복으로 사용할 수 있지만 중복된 수열이 출력되면 안 된다.배열에서 중복을 제거해 주거나 이전에 사용된 값이면 넘어가는 식으로 해결하면 된다.중복해서 사용해도 되기에 반복문의 시작을 0부터 해도 된다.
십자가를 놓을 수 있는지 확인하고 놓을 수 있으면 놓고 다음 십자가 위치를 찾으면 된다.모든 위치에서 가능성을 확인해도 시간 안에 가능하다.즉 완전 탐색 문제이다.십자가의 넓이는 길이\*4+1이라는 것으로 계산할 수 있다.
각 실내에서 닿을 수 있는 다른 실내의 경우를 모두 세어주는 방법도 있지만 그렇게 하면 너무 많은 경우를 확인해야 한다.직접 트리를 그려서 각 경우의 개수를 확인해 보면 (실내의 개수)\*(실내의 개수-1)의 값이 나온다. (2개-2, 3개-6, 4개-12...)즉 실
칸마다 부메랑으로 만들 수 있는지 확인하며 가능하면 만들어 보는 방식으로 해결할 수 있다.N과 M이 크지 않기에 모든 경우를 확인하면 된다.백트래킹을 활용하여 부메랑을 만들고 다음 좌표로 가서 만들 수 있는지 다 확인하면 된다.
N, M 지점까지 경로의 경우의 수는 밑과 왼쪽의 경우를 합하면 된다.하지만 이 문제에서 한 가지 문제가 존재한다.공사 중인 도로가 존재한다는 것이다.공사 중인 도로를 체크하여 그 값은 가져오지 말아야 한다.4차원 배열로 하면은 큰 값이 나오기에 16MB 제한을 넘을
생략나눠서 보면 된다.2개의 바둑돌을 고른다.상대의 돌이 막혀있는지 확인한다.막힌 경우 몇 개인지 확인하여 합산한다.2개의 바둑돌은 어디에 놓아야 최대 개수를 보장하는지 확인할 수 없다. 그렇기에 모든 경우를 확인해 보아야 한다.상대의 돌의 개수는 그래프 탐색을 통해
여러 길이 존재한다면 도둑 루피를 최소로 가져가는 길부터 확인하는 것이 좋은 방법일 것이다.최소인 지점부터 확인하는 방식으로 탐색하는 것은 다익스트라이다.다익스트라를 활용하여서 해결하면 된다.다익스트라를 알고 있다면 쉽게 풀 수 있는 문제이다.우선순위 큐에 존재하는 값
N과 M (9)에서 비내림차순이라는 조건을 추가해 주었다.인덱스를 활용해서 해결하면 된다.N과 M 문제는 약간의 변형을 주고 반복되는 느낌이 크다.이전 문제에서 활용한 방식으로 해결해주면 된다.즉 비내림차순 문제를 풀었던 경험으로 해결하면 된다.
150^2\*100은 2250000이다.큰 숫자긴 하지만 모두 확인할 수 있다.현재 가지고 있는 알고력과 코딩력에서 시작한 뒤 도착 지점으로 가면 반환하는 식으로 해결하면 된다. (그 뒤의 값은 확인할 필요가 없다)시작 지점보다 낮은 값은 확인할 필요가 없다. (시작
이전 N과 M 문제보다는 약간 까다로워졌다.중복된 수는 허용되지만, 중복된 수열은 허용하지 않는 것이다.여러 방법이 있겠지만 이전에 사용한 숫자인 경우 건너뛰는 방식으로 해결하면 된다.다른 사람의 풀이를 보니 사용한 숫자가 아닌 인덱스를 체크하는 식으로 해결하였다.그
처음에는 unsigned long long으로 해결될 줄 알았다.하지만 범위가 더 넓었고 그래서 오답이 떴다.string을 활용하여 숫자 연산을 해야 한다.조합을 재귀적으로 푸는 방법과 큰 수에 대한 연산을 string으로 해결하는 방법으로 푸는 문제이다.문자열로 숫자
이하생략문제에서 요구하는 바는 출입구에서 시작하여 산봉우리를 찍고 다시 출입구로 도착하는 것이지만 실질적으로 출입구에서 산봉우리까지의 최소 시간을 구하면 된다. (최소로 도착한 곳을 그대로 왕복하면 되기에 그렇다)최소 시간을 구하는 법은 다익스트라를 응용하여 각 지점에