개요이 튜토리얼에서는 주어진 두 개의 연결 리스트(Linked List)로부터 새로운 연결 리스트를 생성하는 C++ 프로그램을 작성해 보겠습니다.크기가 같은 두 개의 연결 리스트가 주어졌을 때, 각 위치에서 두 노드의 값 중 더 큰 값을 선택하여 새로운 연결 리스트를 만드는 것이 목표입니다.문제 해결 접근 방식문제를 해결하는 단계는 다음과 같습니다.노드 구조체(struct Node)를 정의합니다.크기가 같은 두 개의 연결 리스트를 생성합니다.두 연결 리스트를 동시에 순회합니다.각 위치에서 두 노드 중 최대값을 찾습니다.최대값을 데이
이 튜토리얼에서는 주어진 이진 트리를 좌우 반전시킨 미러 트리(Mirror Tree)를 만드는 방법을 알아봅니다. 미러 트리란 원래 트리의 모든 노드에서 왼쪽 자식과 오른쪽 자식의 위치를 서로 바꾼 트리를 의미합니다.문제 해결 접근 방법미러 트리를 만드는 과정은 다음 단계로 진행됩니다.노드를 표현하는 구조체(struct)를 정의합니다.더미 데이터로 이진 트리를 생성합니다.재귀 함수를 작성하여 트리를 미러 형태로 변환합니다.왼쪽과 오른쪽 자식 노드에 대해 각각 재귀 호출을 수행합니다.왼쪽 노드와 오른쪽 노드의 포인터를 서로 교환(sw
이 튜토리얼에서는 문자열의 앞 절반과 뒷 절반에 있는 문자들을 역순으로 교대로 결합하여 새로운 문자열을 만드는 C++ 프로그램을 작성해 보겠습니다.예를 들어 tutorialspoints라는 문자열이 주어지면, 앞 절반과 뒷 절반을 각각 끝에서부터 한 글자씩 번갈아 가져와 새로운 문자열을 구성하게 됩니다.문제 해결 단계문자열을 초기화합니다.문자열의 길이를 구합니다.첫 번째 절반과 두 번째 절반의 인덱스를 저장합니다.문자열의 두 절반 끝에서부터 반복하면서 각 문자를 새 문자열에 하나씩 추가합니다.완성된 새 문자열을 출력합니다.예제 코드
이 튜토리얼에서는 주어진 배열을 활용하여 연결 리스트(Linked List)를 생성하는 방법을 배워보겠습니다. 배열의 각 요소를 하나씩 읽어 들여 새로운 노드를 만들고, 이를 리스트 끝에 차례대로 연결하는 방식으로 구현합니다.문제 해결 접근 방식문제를 해결하기 위한 전체적인 흐름은 다음과 같습니다.더미(dummy) 데이터로 배열을 초기화합니다.노드를 표현할 구조체(struct)를 정의합니다.배열을 순회하면서 다음 작업을 반복합니다.배열의 데이터를 담은 새 노드를 생성합니다.생성한 노드를 연결 리스트의 끝에 삽입합니다.완성된 연결 리
이 튜토리얼에서는 주어진 두 개의 연결 리스트(Linked List)를 활용해 새로운 연결 리스트를 만드는 C++ 프로그램을 작성하는 방법을 알아보겠습니다.크기가 같은 두 개의 연결 리스트가 주어졌을 때, 각 위치에서 두 노드 중 더 큰 값을 선택해 하나의 새로운 연결 리스트를 구성하는 것이 이번 문제의 목표입니다.문제 해결 접근 방식다음 단계를 따라 문제를 해결할 수 있습니다.노드(Node) 구조체를 정의합니다.동일한 크기의 두 개의 연결 리스트를 생성합니다.연결 리스트를 순회하면서 아래 작업을 반복 수행합니다.두 리스트의 현재
문자열 하나와 시작 인덱스(start)부터 끝 인덱스(end)까지의 범위가 주어졌을 때, 해당 범위 안에 존재하는 회문(팰린드롬) 부분 문자열의 개수를 계산하는 문제입니다. 회문 문자열이란 앞에서 읽으나 뒤에서 읽으나 동일한 문자열을 뜻하며, nitin, aba 등이 대표적인 예입니다.예시입력 - InputString = cccaabbbdee, start = 2, end = 6출력 - 인덱스 범위 내 회문 부분 문자열 개수: 7설명 - 문자열과 범위가 주어지면 start 포인터인 2(c)부터 6(b)까지 순회하므로 부분 문자열은 c
문제 소개 음이 아닌 정수들을 원소로 갖는 정방 행렬 matrix[][]와 목표 점수 score가 주어집니다. 이 문제의 목표는 행렬의 원소 값을 더해가며 주어진 점수에 도달하는 경로의 수를 세는 것입니다. 단, 이동은 오른쪽 또는 아래 방향으로만 허용됩니다. 시작점은 항상 matrix[0][0]이며, 첫 번째 이동은 matrix[0][1](오른쪽 이동) 또는 matrix[1][0](아래 이동) 중 하나만 가능합니다. 지나치는 모든 칸의 값을 누적하여 합계가 score와 일치하면 해당 경로를 하나의 방법으로 셉니다. 예제로 이해하
문제 소개 미로는 행 × 열(row × col) 크기의 2차원 행렬로 표현됩니다. 이때 장애물이 있는 칸은 -1로, 지나갈 수 있는 칸은 -1이 아닌 값으로 표시합니다. 목표는 시작점인 arr[0][0]에서 출발하여 마지막 칸인 arr[row-1][col-1]까지 도달하는 것입니다. 단, 이동은 아래 두 가지 방향만 허용됩니다. 오른쪽 이동: arr[i][j] → arr[i][j+1] 아래쪽 이동: arr[i][j] → arr[i+1][j] 예제로 이해하기 예제 1 입력: arr[row][col] = {{0, 0, 0}, {-1
두 개의 숫자 start와 end가 범위 변수로 주어지고, 정수 q가 입력으로 주어집니다. 목표는 범위 내에서 해당 숫자 자체의 자릿수와 그 숫자에 q를 곱한 값의 자릿수 사이에 공통된 숫자가 하나도 없는 수를 찾아 그 개수를 세는 것입니다.예를 들어 숫자가 5이고 q가 3이라면 곱은 15가 됩니다. 이때 5와 15는 공통 자릿수 5를 가지므로 조건에 맞지 않습니다.반면 숫자가 2이고 q가 5라면 곱은 10이 됩니다. 2와 10은 공통 자릿수가 없으므로 조건을 만족합니다.예제로 이해하기예제 1입력: start = 5, end = 1
두 수 start와 end가 범위 변수로 주어졌을 때, 이 범위 [start, end] 안에 속하는 숫자 중에서 짝수 위치 자릿수의 합과 홀수 위치 자릿수의 합의 차이가 소수(Prime)가 되는 숫자의 개수를 구하는 것이 목표입니다.즉, (짝수 위치 자릿수의 합) − (홀수 위치 자릿수의 합)이 소수인 경우를 찾으면 됩니다.예시로 이해하기입력 예시 1start = 230, end = 270출력: 조건을 만족하는 숫자의 개수: 6개설명: 230부터 270 사이에서 조건을 만족하는 숫자는 다음과 같습니다.240 (4 − 2 = 2)25
세 개의 수 a, b, c가 입력으로 주어졌을 때, 다음과 같은 번식 규칙이 적용된다고 가정하고 n초 후 각각의 개수를 구하는 것이 이 문제의 목표입니다.모든 a는 2초마다 b로 변합니다.모든 b는 5초마다 c로 변합니다.모든 c는 12초마다 2개의 a로 변합니다.예제로 이해하기입력 예시 1n_seconds = 62, a = 1, b = 1, c = 1출력주어진 번식률에서 n초 후 a의 개수: 0주어진 번식률에서 n초 후 b의 개수: 33주어진 번식률에서 n초 후 c의 개수: 1설명: 60초가 지나면 a = 32, b = 0, c
양의 정수가 담긴 long 타입 변수가 입력으로 주어집니다. 이 문제의 목표는 입력 숫자의 자릿수들을 조합하여 영어 알파벳의 ASCII 값을 만들 수 있을 때, 해당하는 알파벳의 개수를 구하는 것입니다.숫자에서 임의의 두 자릿수를 골라 배열하면 영어 알파벳의 ASCII 값을 형성할 수 있습니다. 대문자 A~Z의 ASCII 값은 65부터 90까지이며, 소문자 a~z의 ASCII 값은 97부터 122까지입니다.따라서 확인해야 할 전체 알파벳의 수는 26 + 26 = 52개입니다.예제로 이해하기예시 1입력 - N_digits = 1634
row × col 크기의 행렬 matrix[][]가 주어졌을 때, 다음 조건을 만족하는 셀의 개수를 찾는 것이 이번 문제의 목표입니다.셀의 값 matrix[i][j] + 해당 셀에 인접한 셀의 개수 = 피보나치 수참고로 피보나치 수열은 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, … 순으로 이어집니다.예제로 이해하기예제 1입력 — matrix[row][col] = {{1, 4, 1}, {2, 0, 1}, {5, 1, 1}}출력 — 인접 셀 개수를 더했을 때 피보나치 수가 되는 셀의 개수: 4012014112012511
양의 정수 N이 입력으로 주어졌을 때, N을 오직 1, 3, 4의 합으로만 표현할 수 있는 서로 다른 방법의 수를 구하는 것이 목표입니다. 예를 들어 N이 4라면 1+1+1+1, 3+1, 1+3, 4와 같이 표현할 수 있으므로 방법의 수는 4가 됩니다.예시로 이해하기입력 - N=5출력 - N을 1, 3, 4의 합으로 표현하는 서로 다른 방법의 수: 6설명 - 5는 다음과 같이 표현할 수 있습니다.1+1+1+1+11+3+13+1+11+1+34+11+4입력 - N=6출력 - N을 1, 3, 4의 합으로 표현하는 서로 다른 방법의 수:
자릿수(d)와 목표 합(sum)이 양의 정수로 주어졌을 때, 각 자릿수의 합이 입력된 합과 정확히 일치하는 모든 d자리 숫자의 개수를 구하는 것이 이 문제의 목표입니다. 단, 앞자리가 0으로 시작하는 숫자(선행 0)는 d자리 숫자로 인정하지 않습니다.입력 범위는 자릿수가 1~100, 합은 1~500입니다.예시를 통한 이해예시 1입력 - digits = 3, digi_sum = 3출력 - 자릿수의 합이 주어진 합과 같은 n자리 숫자의 개수: 6설명 - 자릿수의 합이 3인 세 자리 숫자는 다음과 같습니다.102, 111, 120, 20
문제 소개시작 값(start)과 끝 값(end) 사이의 숫자 범위가 주어졌을 때, 첫 번째 자릿수와 마지막 자릿수가 같은 숫자가 범위 [start, end] 안에 몇 개 있는지 구하는 것이 목표입니다.한 자리 숫자는 첫 자리와 마지막 자리가 곧 자기 자신이므로, 범위에 포함되어 있다면 모두 개수에 포함됩니다.예제로 이해하기입력 - start = 100, end = 200출력 - 첫 자리 숫자와 마지막 자리 숫자가 같은 범위 내 숫자의 개수: 10설명 - 조건을 만족하는 숫자들은 다음과 같습니다.101, 111, 121, 131, 1
행(row) × 열(col) 크기의 행렬이 입력으로 주어졌을 때, 행렬 내부에서 구성 요소들의 합이 정수 k로 나누어 떨어지는 모든 부분 행렬(submatrix)을 찾아야 합니다.예를 들어 3×3 행렬 mat[3][3]과 k = 4가 주어진다면, 조건을 만족하는 부분 행렬들은 아래와 같이 나타낼 수 있습니다.예제로 이해하기입력 - matrix[3][3] = { {1,1,1}, {2,2,2}, {3,3,3} }, k = 4출력 - 합이 k로 나누어 떨어지는 부분 행렬의 개수: 4설명 - 위에서 언급한 것처럼 해당 부분 행렬들이 형성됩
하나의 숫자를 담은 문자열 str과 원하는 자릿수 합 total이 입력으로 주어집니다. 이때 목표는 N(str) 이하의 숫자 중에서 각 자릿수의 합이 total과 정확히 일치하는 숫자가 몇 개 있는지 구하는 것입니다. 예제로 이해하기 입력 - N=110, sum=5 출력 - 자릿수 합이 5인 N 이하의 숫자 개수: 7 설명 - 110 이하에서 자릿수의 합이 5가 되는 숫자는 다음과 같습니다. 5, 14, 23, 32, 41, 50, 104 입력 - N=1000, sum=3 출력 - 자릿수 합이 3인 N 이하의 숫자 개수: 10 설명
문제 개요 하나의 숫자 N이 입력으로 주어집니다. 목표는 다음 조건을 만족하는 N 이하의 모든 수 m의 개수를 찾는 것입니다. 단, N은 최대 109(십억)까지 가능합니다. m + sum(m) + sum(sum(m)) = N 여기서 sum(m)은 m의 각 자릿수의 합을 의미합니다. 예를 들어 m이 137이라면 sum(m) = 1+3+7 = 11이고, sum(sum(m)) = sum(11) = 1+1 = 2가 됩니다. 예시로 이해하기 예시 1 입력: N = 27 출력: 조건을 만족하는 수의 개수: 3 설명: 해당하는 수들은 다음과
트리의 노드들을 정점으로 가지는 무방향 그래프가 주어졌을 때, BFS(너비 우선 탐색) 알고리즘을 이용해 트리의 특정 레벨(level)에 있는 노드의 개수를 구하는 것이 목표입니다.BFS 알고리즘이란?BFS는 그래프나 트리를 레벨 단위로 순차적으로 탐색하는 알고리즘입니다. 레벨 0의 시작 노드에서 출발하여, 먼저 해당 노드와 직접 연결된 레벨 1의 모든 노드를 방문한 뒤, 이어서 다음 레벨의 노드들을 차례로 탐색합니다.현재 레벨의 노드들을 수평 방향으로 탐색합니다.이어서 다음 레벨의 노드들도 같은 방식으로 탐색합니다.예제로 이해하기