개요 문자열이 주어졌을 때, 사용자 정의 함수 또는 내장 함수를 사용하여 해당 문자열의 길이를 계산하는 것이 이번 글의 목표입니다. C++에서 문자열의 길이를 구하는 방법은 크게 두 가지가 있습니다. 사용자 정의 함수 사용 − 재귀 호출을 활용해 문자열을 한 글자씩 탐색하며, 문자열의 끝을 나타내는 널 문자(\0)를 만날 때까지 카운트를 1씩 증가시키는 방식입니다. 내장 함수(strlen) 사용 − string.h 헤더 파일에 정의된 strlen() 함수를 사용하는 방법입니다. 이 함수는 문자열 타입의 인수 하나를 받아 해당 문
여러 단어로 구성된 문장이 주어졌을 때, 그 문장에서 가장 긴 단어의 길이를 찾아내는 것이 이번 튜토리얼의 목표입니다. 문자열을 한 글자씩 순회하면서 공백을 기준으로 단어를 구분하고, 각 단어의 길이를 비교하는 방식으로 해결할 수 있습니다.예시입력: hello I am here 출력: maximum length of a word is: 5 입력: tutorials point is the best learning platform 출력: maximum length of a word is: 9해결 접근 방법문장을 하나의 문자열로 입력받
정수형 배열이 주어졌을 때, 배열에 포함된 모든 요소를 곱한 결과를 계산하여 화면에 출력하는 것이 이 프로그램의 목표입니다.예시입력-: arr[]={1,2,3,4,5,6,7} 출력-: 1 x 2 x 3 x 4 x 5 x 6 x 7 = 5040 입력-: arr[]={3,4,6,2,7,8,4} 출력-: 3 x 4 x 6 x 2 x 7 x 8 x 4 = 32256해결 접근 방식아래 프로그램에서 사용하는 핵심 로직은 다음과 같습니다.최종 결과를 저장할 임시 변수(temp)를 선언하고 1로 초기화합니다.배열의 크기 n만큼 반복문을 실행합니
주어진 문자열이 올바른 ISBN 번호인지 아닌지 판별하는 것이 이번 글의 목표입니다. C++ 코드 예제와 함께 ISBN의 개념부터 검증 알고리즘까지 차근차근 살펴보겠습니다.ISBN 번호란 무엇인가?ISBN은 International Standard Book Number, 즉 국제 표준 도서번호의 약자입니다. 2006년 12월까지는 10자리 번호 체계가 사용되었으며, 2007년 1월 1일부터는 13자리 번호로 개정되었습니다. 이 글에서는 기존 방식인 10자리 ISBN의 구현 방법을 다룹니다.ISBN의 각 자리에는 다음과 같은 규칙이
GST란 무엇인가?원가(original cost)와 순 판매가(net price)가 입력으로 주어졌을 때, GST 백분율을 계산하고 그 결과를 출력하는 것이 이 프로그램의 목표입니다.GST(Goods and Services Tax, 상품·서비스세)는 상품과 서비스에 부과되는 세금으로, 항상 제품의 순 판매가에 포함되어 있습니다. 따라서 GST 백분율을 구하기 전에 먼저 GST 금액을 계산해야 하며, 이때 다음과 같은 공식을 사용할 수 있습니다.계산 공식순 판매가 = 원가 + GST 금액GST 금액 = 순 판매가 − 원가GST 백분율
원가(CP)와 판매가(SP)가 주어졌을 때, 얻은 이익 또는 발생한 손실을 계산하는 것이 이 프로그램의 목표입니다.원가(Cost Price, CP)란 판매자가 상품을 구매할 때 지불한 가격을 의미하며, 판매가(Selling Price, SP)란 판매자가 상품을 판매한 가격을 의미합니다.이익과 손실을 계산하는 공식은 다음과 같습니다.이익 = 판매가 − 원가판매가가 원가보다 크다면 이익이 발생합니다.손실 = 원가 − 판매가원가가 판매가보다 크다면 손실이 발생합니다.예시입력: CP = 600 SP = 100 출력: 발생한 손실
정점(vertex)이 n개인 그래프가 주어졌을 때, 해당 그래프의 에지 커버(edge cover)를 계산하는 것이 이번 글의 목표입니다. 에지 커버란 그래프의 모든 정점을 덮을 수 있도록 필요한 최소한의 간선 개수를 찾는 문제를 의미합니다.예를 들어 정점의 개수 n = 5라고 가정해 보겠습니다.이때 그래프는 다음과 같습니다.이 그래프의 에지 커버는 3입니다.이번에는 n = 8인 또 다른 예를 살펴보겠습니다.이 그래프의 에지 커버는 4입니다.예시 입출력입력: n = 5출력: 3입력: n = 8출력: 4접근 방법에지 커버를 구하는 핵심
문자열이 입력으로 주어졌을 때, 해당 문자열의 첫 번째 문자와 마지막 문자가 서로 같은지 판별하는 것이 이번 문제의 목표입니다. C++의 기본적인 문자열 처리 함수만 활용하면 아주 간단하게 해결할 수 있습니다. 예시 입력: study 출력: 같지 않음 첫 번째 문자는 s이고 마지막 문자는 y이기 때문입니다. 입력: nitin 출력: 첫 번째와 마지막 문자가 같습니다 첫 번째 문자는 n이고 마지막 문자도 n이기 때문입니다. 문제 해결 접근 방식
사용자로부터 입력받은 값이 주어졌을 때, 해당 입력이 정수(integer)인지 문자열(string)인지 판별하는 것이 이번 글의 핵심 과제입니다.여기서 말하는 정수란 0~9 사이의 숫자들로만 이루어진 조합을 의미하며, 문자열은 0~9를 제외한 문자들을 포함하는 조합을 의미합니다.예시입력 -: 123 출력 -: 123은 정수입니다 입력 -: Tutorials Point 출력 -: Tutorials Point는 문자열입니다접근 방법데이터를 입력받습니다.isdigit() 함수를 적용하여 주어진 입력이 숫자 문자인지 여부를 검사합니다.
탱크에 물을 채우는 속도(rate), 탱크의 높이(height)와 반지름(radius)이 주어졌을 때, 주어진 시간 안에 탱크가 넘치는지(오버플로), 부족하게 차는지(언더플로), 아니면 딱 맞게 채워지는지 판별하는 C++ 프로그램을 살펴보겠습니다.문제 예시입력: radius = 2, height = 5, rate = 10출력: tank overflow (탱크가 넘침)입력: radius = 5, height = 10, rate = 10출력: tank underflow (탱크가 부족함)접근 방법원기둥 모양의 탱크 부피는 V = π ×
이 글에서는 첫째 항 a, 공차 d, 그리고 항의 개수 n이 주어졌을 때 등차수열을 생성하고 그 합을 계산하는 C++ 프로그램을 다룹니다.등차수열(Arithmetic Series)이란?등차수열은 인접한 두 항 사이의 차이가 일정한 수열입니다. 첫째 항은 고정된 값 a이며, 각 항 사이의 공통된 차이를 공차 d라고 부릅니다.등차수열은 다음과 같이 표현할 수 있습니다.a, a + d, a + 2d, a + 3d, . . .예시입력: a = 1.5, d = 0.5, n = 10출력: 등차수열의 합 : 37.5입력: a = 2.5, d =
두 정수 N과 P가 있다고 가정해 봅시다. 여기서 P는 N개의 미지의 정수들의 곱입니다. 이때 이 정수들이 가질 수 있는 최대 공약수(GCD)를 구하는 것이 바로 이번 글에서 다룰 문제입니다. 예를 들어 N = 3, P = 24라면, 세 정수의 곱이 24가 되는 조합과 각각의 GCD는 다음과 같습니다. {1, 1, 24} → GCD = 1 {1, 2, 12} → GCD = 1 {1, 3, 8} → GCD = 1 {1, 4, 6} → GCD = 1 {2, 2, 6} → GCD = 2 {2, 3, 4} → GCD = 1 각 조
문제 설명배열 A가 주어졌을 때, 요소들의 곱(product)과 최소공배수(LCM)가 서로 같은 부분 배열(subarray) 중 가장 긴 길이를 구하는 문제입니다. 만약 조건을 만족하는 부분 배열이 하나도 없다면 -1을 반환해야 합니다.예를 들어 배열이 {6, 10, 21}이라고 해보겠습니다. 이때 부분 배열 {10, 21}을 살펴보면, 두 수의 LCM은 210이고 곱 역시 10 × 21 = 210으로 서로 일치합니다. 따라서 정답은 길이 2가 됩니다.접근 방법이 문제는 비교적 단순한 브루트 포스(완전 탐색) 방식으로 해결할 수 있
문제 개요이번 글에서는 흥미로운 알고리즘 문제를 하나 살펴보겠습니다. 세 개의 정수 A, B, C가 주어졌을 때, 다음 두 조건을 동시에 만족하는 가장 작은 양의 정수 X를 구하는 것이 목표입니다.X mod C = 0, 즉 X는 C로 나누어 떨어져야 합니다.X는 닫힌 구간 [A, B]에 포함되지 않아야 합니다.예를 들어 A = 5, B = 10, C = 4라고 가정해 보겠습니다. 이때 X의 값은 4가 됩니다. 4는 4로 나누어 떨어지고(4 mod 4 = 0), 구간 [5, 10]의 범위 밖에 있기 때문입니다.해결 접근 방법이 문제는
양수와 음수가 섞여 있는 하나의 데이터 배열이 있다고 가정해 보겠습니다. 이때 우리는 연속된 부분배열(contiguous subarray)의 합 중 가장 큰 값을 찾아야 합니다.예를 들어 배열이 {-2, -5, 6, -2, -3, 1, 5, -6}이라면, 최대 부분배열의 합은 7이며, 이는 {6, -2, -3, 1, 5} 구간의 합에 해당합니다.분할 정복 접근 방식이 문제는 분할 정복(Divide and Conquer) 기법으로 효율적으로 해결할 수 있습니다. 전체 시간 복잡도는 O(n log n)으로, 단순한 브루트 포스 방식(O
메타 문자열(Meta String)이란?이번 글에서는 두 문자열이 메타 문자열인지 확인하는 방법을 알아보겠습니다. 메타 문자열이란 서로 매우 유사한 문자열로, 한쪽 문자열에서 단 두 개의 문자 위치를 맞바꾸면 다른 문자열과 완전히 일치하게 되는 관계를 말합니다.예를 들어 HELLO와 OELLH라는 두 문자열이 있다고 가정해 보겠습니다. 첫 번째 문자열의 H와 O의 위치를 서로 바꾸면 OELLH가 되어 두 번째 문자열과 정확히 일치합니다. 따라서 이 두 문자열은 메타 문자열입니다.메타 문자열 판별 알고리즘두 문자열이 메타 문자열인지
배열에 N개의 원소가 있다고 가정해 보겠습니다. 주어진 연산 규칙에 따라 배열에서 원소를 제거해야 합니다. 연산 방식은 다음과 같습니다. 배열에서 임의의 두 숫자를 선택한 뒤, 그중 더 큰 수를 제거하고, 이때 발생하는 비용은 두 수 중 작은 값과 같습니다. 한 번에 하나의 원소만 제거할 수 있으며, 전체 작업을 최소 비용으로 완료하는 것이 목표입니다. 예를 들어 배열이 {4, 2, 5}라고 해보겠습니다. 먼저 4와 2를 선택해 4를 제거하면 비용 2가 발생하고, 이어서 2와 5를 선택해 5를 제거하는 데 역시 비용 2가 듭니다.
문제 개요크기가 N인 양의 정수 배열 arr가 주어졌을 때, 가능한 모든 부분 배열(subarray) 중에서 최소 LCM(최소공배수)과 최소 GCD(최대공약수)를 구하는 문제입니다.예를 들어 배열이 {2, 66, 14, 521}이라면, 최소 LCM은 2이고 최소 GCD는 1입니다.접근 방법: 그리디(Greedy) 기법이 문제는 그리디 접근법으로 간단히 해결할 수 있습니다. 핵심 아이디어는 다음과 같습니다.LCM의 경우: 원소의 개수가 줄어들수록 LCM은 작아지거나 같아집니다. 따라서 가장 작은 LCM은 배열 내 단일 원소 중 최솟값
같은 길이를 가진 두 개의 문자열이 있을 때, 어떤 문자도 삭제하지 않으면서 두 문자열을 아나그램(Anagram)으로 만들기 위해 필요한 최소 변경 횟수를 구하는 문제입니다. 아나그램이란 두 문자열이 동일한 문자 집합을 가지는 경우를 말합니다.예를 들어 HELLO와 WORLD라는 두 문자열이 있다고 가정해 보겠습니다. 이 경우 세 글자가 서로 다르므로 필요한 변경 횟수는 3이 됩니다.알고리즘 접근 방식핵심 아이디어는 간단합니다. 먼저 첫 번째 문자열에서 각 문자의 빈도수(frequency)를 계산합니다. 그다음 두 번째 문자열을 순
배열 arr과 값 k가 주어졌을 때, 배열 전체의 GCD(최대공약수)를 k의 배수가 되도록 만들기 위해 필요한 최소 연산 횟수를 구하는 문제입니다. 여기서 연산이란 특정 요소의 값을 1만큼 증가시키거나 감소시키는 것을 의미합니다.예를 들어 배열이 {4, 5, 6}이고 k = 5라고 가정해 봅시다. 4를 1 증가시키고, 6을 1 감소시키면 배열은 {5, 5, 5}가 되어 GCD가 5(k의 배수)가 됩니다. 이때 필요한 연산 횟수는 총 2회입니다.알고리즘 접근 방법각 요소를 k의 배수에 가장 가깝게 만들면 되므로, 다음 단계를 따라 문