문자열 str이 주어졌을 때, 시작 문자가 X와 같고 끝 문자가 Y와 같은 부분 문자열의 개수를 구하는 것이 목표입니다. 예를 들어 입력이 artact이고 X=a, Y=t라면 해당하는 부분 문자열은 art, act, artact로 총 3개입니다. 예시로 이해하기 입력 − str=abcccdef, X=a, Y=c 출력 − 문자 X로 시작하고 문자 Y로 끝나는 부분 문자열의 개수: 3 설명 − 해당하는 부분 문자열은 다음과 같습니다. abc, abcc, abccc → 총 3개 입력 − str=tempest, X=t, Y=t 출력 − 문
양의 정수로 이루어진 배열이 주어졌을 때, 각 부분 집합이 중복되지 않는 짝수만을 포함하도록 만들 수 있는 부분 집합의 개수를 구하는 것이 목표입니다. 같은 원소를 가진 집합은 하나로 취급합니다. 예를 들어 [2,4,6]과 [6,2,4]는 동일한 집합입니다.문제 이해하기예제를 통해 문제를 살펴보겠습니다.입력 − arr[] = {1, 3, 5, 7, 8, 3, 2}출력 − 서로 다른 짝수를 가진 부분 집합의 개수: 3설명 − 가능한 부분 집합은 [2], [8], [2,8] 입니다.입력 − arr[] = {2, 4, 6}출력 − 서로
문제 개요문자열 str과 길이가 3인 부분 문자열 sub_str이 주어졌을 때, str 안에서 sub_str과 동일한 부분 수열(subsequence)이 총 몇 번 나타나는지 구하는 것이 목표입니다.부분 수열이란 문자열에서 문자들의 상대적인 순서를 유지한 채 일부 문자를 건너뛰어 만든 시퀀스를 의미합니다. 예를 들어 act는 cataract 안에 세 번 등장합니다.예제로 이해하기입력 − str = settlement, sub_str = set출력 − 주어진 문자열에서 길이 3인 부분 수열의 개수: 5설명 − 가능한 부분 수열은 다음
양의 정수로 이루어진 배열이 주어졌을 때, 각 부분 배열(subarray) 안에 포함된 짝수와 홀수의 개수가 서로 같은 경우를 모두 찾아야 합니다. 예를 들어 배열이 { 1, 2, 3, 4 }라면 조건을 만족하는 부분 배열은 { 1, 2 }, { 2, 3 }, { 3, 4 }, { 1, 2, 3, 4 }이며, 그 개수는 4개입니다.예시를 통해 자세히 살펴보겠습니다.입력 − arr[] = {1, 3, 5, 7, 8, 3, 2}출력 − 짝수와 홀수 개수가 같은 부분 배열의 수 − 4설명 − 해당 부분 배열은 { 7, 8 }, { 8,
문제 개요 양의 정수로 이루어진 배열이 주어집니다. 목표는 연속된 요소들로 이루어진 부분 배열(subarray) 중에서 그 합이 소수(prime)가 되는 경우를 모두 찾아 개수를 세는 것입니다. 예를 들어 배열이 {1, 2, 3, 4}라면, 부분 배열 {1, 2}(합 = 3), {2, 3}(합 = 5), {3, 4}(합 = 7)의 합이 모두 소수이므로 조건을 만족하는 부분 배열의 개수는 3개입니다. 예제 1 입력 − arr[] = {1, 3, 5, 3, 2} 출력 − 합이 소수인 부분 배열의 개수: 3 설명 − 조건을 만족하는 부
문제 개요숫자 N이 입력으로 주어졌을 때, 1부터 N까지의 모든 수를 나열했을 때 필요한 총 자릿수를 구하는 것이 목표입니다. 1부터 9까지는 각 숫자가 1자릿수, 10부터 99까지는 2자릿수, 100부터 999까지는 3자릿수를 차지하는 식으로 자릿수가 늘어납니다.예제로 이해하기입력 − N = 11출력 − 1부터 N까지의 총 자릿수: 13설명 − 1부터 9까지는 각각 1자릿수이므로 9자릿수이고, 10과 11은 각각 2자릿수이므로 4자릿수입니다. 따라서 총 자릿수는 9 + 4 = 13입니다.입력 − N = 999출력 − 1부터 N까지
문장을 담고 있는 문자열 str과 정수 k가 주어졌을 때, str에 포함된 단어 중 각 단어의 ASCII 값 합이 k보다 작은 단어의 개수와 k보다 큰 단어의 개수를 구하는 것이 이 문제의 목표입니다. ASCII란 언어 내 모든 문자에 고유한 번호를 부여한 코드 체계를 의미합니다. 예제로 이해하기 입력 − str = This is ASCII, k = 300 출력 − ASCII 값의 합이 k보다 작은 단어 개수: 1ASCII 값의 합이 k보다 큰 단어 개수: 2 설명 − 단어 is의 ASCII 값 합
문제 이해하기정수 배열 arr[]와 두 개의 수 A, B가 주어졌을 때, A와 B가 동일한 횟수만큼 등장하는 모든 부분 배열(subarray)의 개수를 구하는 것이 목표입니다.예를 들어 배열이 [1,2,3]이고 A=1, B=2라고 하면, 조건을 만족하는 부분 배열은 [3], [1,2], [1,2,3]입니다.예제예제 1입력 − arr[] = { 2, 2, 1, 1, 1, 5 }, A=1, B=5출력 − 두 요소의 등장 횟수가 같은 부분 배열의 개수 − 4설명 − 조건을 만족하는 부분 배열은
정수로 이루어진 배열 arr[]와 숫자 K가 주어집니다. 목표는 배열의 모든 요소가 K보다 큰 부분 배열(subarray)의 개수를 구하는 것입니다. 예를 들어 배열이 [1, 2, 3]이고 K가 1이라면, 조건을 만족하는 부분 배열은 [2], [3], [2, 3]입니다.예제로 이해하기입력 − arr[] = { 2, 2, 1, 1, 1, 5 }; K=1출력 − 모든 요소가 K보다 큰 부분 배열의 개수: 4설명 − 조건을 만족하는 부분 배열은 [2], [2], [5], [2, 2]입니다. 각 부분 배열의
문제 이해하기0과 1로만 구성된 배열 arr[]가 주어졌을 때, 0과 1의 개수가 서로 같은 모든 부분 배열(subarray)의 개수를 세는 것이 목표입니다. 예를 들어 배열이 [1,0,0]이라면 조건을 만족하는 부분 배열은 [1,0] 하나뿐입니다.예제입력 − arr[] = { 0, 0, 1, 1, 1, 0 };출력 − 1과 0의 개수가 같은 부분 배열의 개수: 4설명 − 조건을 만족하는 부분 배열은 다음과 같습니다.arr[0~3] = [0,0,1,1],arr[1~2] = [0,1],arr[4~5]
정수로 이루어진 배열 arr[]가 주어졌을 때, 각 부분 배열 안에서 인접한 두 요소의 차이가 정확히 1이 되는 모든 부분 배열(subarray)의 개수를 구하는 것이 목표입니다. 예를 들어 배열이 [1, 2, 3]이라면 조건을 만족하는 부분 배열은 [1,2], [2,3], [1,2,3] 세 가지뿐입니다. 예제로 이해하기 입력 − arr[] = { 4, 3, 2, 1 } 출력 − 인접 요소의 차이가 1인 부분 배열의 개수: 6 설명 − 만들 수 있는 부분 배열은 다음과 같습니다. [4,3], [3,2], [2,1], [4,3,2],
문제 소개정수로 이루어진 배열 arr[]가 주어졌을 때, 각 하위 배열(subarray)에 포함된 서로 다른 요소(distinct elements)의 개수가 원본 배열의 서로 다른 요소 개수와 동일한 모든 하위 배열의 개수를 구하는 것이 목표입니다.예를 들어, 원본 배열이 [1, 1, 2, 3]이라면 조건을 만족하는 하위 배열은 [1, 2, 3]과 [1, 1, 2, 3]입니다.원본 배열의 서로 다른 요소는 총 3개이며, 두 하위 배열 역시 각각 서로 다른 요소를 3개씩 포함하고 있기 때문입니다.예시로 이해하기입력 − arr[] =
문제 소개0과 1로만 이루어진 배열 arr[]가 주어졌을 때, 각 부분 배열(subarray)이 0만 포함하거나 1만 포함하도록 하는 모든 부분 배열의 개수를 세는 것이 목표입니다. 예를 들어 배열이 [1, 0, 0]이라면, 0으로만 이루어진 부분 배열은 [0], [0], [0, 0]의 세 가지이고, 1로만 이루어진 부분 배열은 [1] 하나입니다.예제 1입력 − arr[] = { 0, 0, 1, 1, 1, 0 }출력 − 0으로만 이루어진 부분 배열: 4개 / 1로만 이루어진 부분 배열: 6개설명 −0만 있는 경우: [0], [0],
정수로 이루어진 배열 arr[]와 변수 X가 주어졌을 때, 모든 요소가 X보다 작거나 같은 부분 배열(subarray)의 개수를 구하는 것이 목표입니다. 예를 들어 배열이 [1, 2, 3]이고 X = 2라면, 조건을 만족하는 부분 배열은 [1], [2], [1, 2]로 총 3개입니다.예제 입력 및 출력입력 − arr[] = { 4, 3, 2, 1, 6 }, X = 3출력 − X 이하의 요소만 포함하는 부분 배열의 개수는 6개입니다.설명 − 조건을 만족하는 부분 배열은 다음과 같습니다.[3], [2], [1], [3,2], [2,1]
문제 개요문자열 str이 주어졌을 때, 길이가 1보다 큰 특수 팰린드롬(special palindrome) 부분 문자열의 개수를 구하는 것이 목표입니다. 여기서 특수 팰린드롬이란 모든 문자가 동일하거나, 가운데 문자만 다른 문자열을 의미합니다.예를 들어 문자열이 baabaa라면, 원본 문자열의 부분 문자열 중 특수 팰린드롬에 해당하는 것은 aa, aabaa, aba, aa입니다.예제로 이해하기입력 − str = abccdcdf출력 − 문자열 내 특수 팰린드롬의 개수: 3설명 − 특수 팰린드롬에 해당하는 부분 문자열은 cc, cdc,
문제 소개정수로 구성된 행렬(matrix)이 주어졌을 때, 모든 요소가 동일한 값으로 이루어진 행의 개수를 찾는 것이 이 글의 목표입니다.예를 들어 다음과 같은 5×4 행렬이 있다고 가정해 보겠습니다.15131111115323577777이 경우 답은 2입니다. 인덱스 1의 행(모든 요소가 1)과 인덱스 3의 행(모든 요소가 7)만 동일한 요소로 구성되어 있기 때문입니다.아래 예제를 통해 좀 더 자세히 살펴보겠습니다.예제 1입력:matrix = [ 1 1 1 1 ] [ 2
숫자 N이 주어졌을 때, N의 모든 회전(rotation) 결과 중 홀수가 되는 경우의 수와 짝수가 되는 경우의 수를 구하는 것이 목표입니다. 예를 들어 N이 123이라면 회전 결과는 123, 321, 132의 세 가지입니다. 이 가운데 홀수는 123과 321로 총 2개이고, 짝수는 132로 1개입니다.예제로 이해하기입력 − N = 54762출력홀수인 회전의 개수 − 2짝수인 회전의 개수 − 3설명 − 회전 결과는 다음과 같습니다.54762, 25476, 62547, 76254, 47625짝수 회전은 3개 − 54762, 25476
정렬된 상태에서 K개의 노드만큼 회전된 연결 리스트가 하나 주어집니다. 우리의 목표는 이때의 회전 횟수 K를 구하는 것입니다. 예를 들어, 아래 그림처럼 K개의 노드만큼 회전된 연결 리스트가 입력으로 주어졌다고 가정해 보겠습니다.그렇다면 원래 리스트는 다음과 같은 형태였을 것입니다.그림에서 확인할 수 있듯이 여기서 K는 2입니다. 즉, 입력된 연결 리스트는 원래 정렬된 리스트를 2번 회전시킨 결과입니다.예제로 이해하기입력 − 리스트: 5 → 7 → 9 → 1 → 3출력연결 리스트의 요소: 5 7 9 1 3정렬 후 회전된 연결 리스트
개요매우 큰 수가 하나 주어졌을 때, 이 숫자를 회전(rotate)시켜 얻을 수 있는 모든 수 중에서 4로 나누어떨어지는 회전의 개수를 구하는 것이 목표입니다.모든 회전을 실제로 수행하는 것은 비효율적이기 때문에, 4의 배수 판정 법칙을 활용합니다. 어떤 수의 마지막 두 자리가 4로 나누어떨어지면 그 수 전체도 4로 나누어떨어진다는 성질을 이용하는 것입니다.예를 들어 숫자가 1234라면 회전 결과는 1234, 4123, 3412, 2341이 됩니다. 이 중 3412는 마지막 두 자리인 12가 4로 나누어떨어지므로 4의 배수입니다.예
문제 개요매우 큰 수가 하나 주어졌을 때, 이 수를 회전(순환 이동)했을 때 나오는 값들 중 8로 나누어 떨어지는 경우가 몇 개인지 세는 것이 목표입니다.모든 회전 값을 일일이 만들어 나눗셈을 반복하는 것은 비효율적입니다. 대신 8의 배수 판정 법칙을 활용하면 됩니다. 어떤 수의 마지막 세 자리가 8로 나누어 떨어지면 그 수 전체도 8로 나누어 떨어집니다. 예를 들어 1800의 회전 결과는 1800, 0180, 0018, 8001이며, 이 중 1800만 8로 나누어 떨어집니다.예시로 이해하기입력: num = 15320출력: 8로 나