[Programmers] #181894 - 2의 영역 [Java][C++][Python]
문제 링크 1. 아이디어 값 2가 모두 들어가는 가장 짧은 연속 구간은 첫 2와 마지막 2 사이의 구간이다. 그 바깥은 2를 포함하지 않으므로 잘라내도 되고, 그 안쪽은 양 끝이 2라서 더 줄일 수 없다. 앞에서부터 훑어 첫 2의 위치를, 뒤에서부터 훑어 마지막 2의 위치를 찾은 뒤 두 위치를 양끝으로 하는 구간을 반환했다. 2가 하나도 없으...
문제 링크 1. 아이디어 값 2가 모두 들어가는 가장 짧은 연속 구간은 첫 2와 마지막 2 사이의 구간이다. 그 바깥은 2를 포함하지 않으므로 잘라내도 되고, 그 안쪽은 양 끝이 2라서 더 줄일 수 없다. 앞에서부터 훑어 첫 2의 위치를, 뒤에서부터 훑어 마지막 2의 위치를 찾은 뒤 두 위치를 양끝으로 하는 구간을 반환했다. 2가 하나도 없으...
문제 링크 1. 아이디어 정수 배열 query에 대해 인덱스가 짝수면 arr를 0번째부터 query[i]번째까지 남기고, 홀수면 query[i]번째부터 끝까지 남기는 과정을 반복하면 된다. 각 단계마다 남은 배열을 새롭게 만들어 arr에 대입하면 깔끔하게 연속된 쿼리를 처리할 수 있다. 2. 복잡도 접근 ...
문제 링크 1. 아이디어 1부터 세는 n 번째 원소는 0-indexed로 n - 1 위치이므로, num_list를 n - 1부터 끝까지 잘라내면 된다. 2. 복잡도 접근 시간 공간 풀이 $O(N)$ $O(N)$ ...
문제 링크 1. 아이디어 정수 리스트 num_list를 인덱스 n을 기준으로 두 조각으로 나눈 뒤, 뒤쪽 조각(n번째 원소부터 끝까지)을 앞에, 앞쪽 조각(처음 n개)을 뒤에 두어 이어 붙이면 된다. 리스트를 왼쪽으로 n칸 회전시킨 것과 같다. 2. 복잡도 접근 시간 공간 ...
문제 링크 1. 아이디어 문자열 리스트 str_list를 앞에서부터 순회하며 처음 만나는 "l" 또는 "r"을 찾는다. "l"을 먼저 만나면 그 앞쪽 원소들을, "r"을 먼저 만나면 그 뒤쪽 원소들을 잘라 반환한다. 순회가 끝날 때까지 둘 다 만나지 못하면 빈 리스트를 반환하면 된다. 2. 복잡도 접근 ...
문제 링크 1. 아이디어 정수 리스트 num_list의 첫 원소부터 n번째 원소까지, 즉 앞에서부터 n개의 원소를 잘라낸 부분 리스트가 곧 답이다. 2. 복잡도 접근 시간 공간 풀이 $O(N)$ $O(N)$ (...
문제 링크 1. 아이디어 정수 리스트 num_list의 0번 인덱스부터 시작해 인덱스를 n씩 늘려가며 만나는 원소를 순서대로 담으면 되는 문제다. 2. 복잡도 접근 시간 공간 풀이 $O(M / N)$ $O(M / N)$ ...
문제 링크 1. 아이디어 n의 약수를 오름차순으로 모으는 문제다. 가장 단순한 방법은 1부터 n까지 모든 정수로 n을 나눠 나누어떨어지는지 확인하는 것이다. 작은 수부터 순서대로 훑으므로 결과는 그대로 오름차순이 된다. 좀 더 효율적인 방법으로는 약수의 대칭성을 이용하는 방법이 있다. 약수는 $\sqrt{n}$을 기준으로 쌍을 이룬다(i가...
문제 링크 1. 아이디어 문자열 s에 대해 각 알파벳이 몇 번 나오는지 센 다음, 등장 횟수가 정확히 1인 문자만 사전 순으로 모으면 된다. 입력이 소문자로만 이루어지므로 크기 26짜리 카운팅 배열을 활용해서 a부터 z까지 순서대로 확인하면 별도의 정렬 없이도 사전 순으로 결과를 만들 수 있다. 2. 복잡도 ...
문제 링크 1. 아이디어 문자열 my_string에서 인덱스 num1과 num2에 있는 문자를 서로 맞바꾼 문자열을 반환하면 되는 간단한 문제다. 2. 복잡도 접근 시간 공간 풀이 $O(N)$ $O(N)$ ($...