목록분류 전체보기 (264)
나만의 작은 도서관
문제설명 N개의 수로 된 수열 A가 있다. 이 수열의 i번째 부터 j번째 까지의 수를 더했을 때 M이 되는 경우의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N, M이 차례로 주어진다. (단, N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)) 둘째 줄에는 N개의 수가 차례로 주어진다. 주어지는 수는 30000이하의 자연수이다. 입력 예제 4 2 1 1 1 1 Tips 구하고자 하는 수들의 합은 연속적인 수들의 합이다. 주어진 수열 A에 있는 모든 수들을 조합하여 M이 되는 경우를 구하는 게 아니다. 수열의 수들이 자연수이기 때문에 부분 수열에 수를 추가하면 항상 값이 증가한다. 따라서, i 번째로 시작하는 부분 수열에서 수의 합이 M이라면 그 뒤로 수를 추가해도 수의 ..
문제설명 시험을 치루는 응시자들이 각 시험장에 있다. 응시자를 감시하기 위해 총감독관과 부감독관은 시험장에 배치되어야 한다. 이 때, 총감독관은 각 시험장에 항상 1명이 있어야 하며, 부감독관은 여럿이 있어도, 없어도 된다. 총감독관은 B명을 감시할 수 있고, 부감독관은 C명을 감시할 수 있다. 모든 응시자들을 감시하는데 필요한 감독관 수의 최솟값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다. 셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000) 입력 예제 3 3 4 5 2 2 Tips 1. 본감독관은 항상 시험장에 한 ..
문제 설명 괄호로만 구성되어 있는 문자열을 PS(Parenthesis String)라 부르며, 모든 괄호가 짝을 이루는 문자열을 VPS(Valid PS)라고 부른다. 입력으로 주어진 PS가 VPS인지 판단하여 YES 또는 NO를 출력해야한다. Tip) 왼쪽부터 순차적으로 문자를 탐색할 때, VPS는 어느 순간에서든 왼쪽 괄호 개수가 많거나 같다. #include #include using namespace std; /// /// 문자열이 VPS인지 판단한다. /// /// 판단할 문자열 /// VPS 판단 결과 bool isVPS(string str) { int cnt = 0; for (int i = 0; i < str.length(); i++) { if (str[i] == '(') cnt++; else..
여러가지 프로그래밍 언어를 배우다 보면 문자열에 대한 의심이 많아진다. 어떤 언어는 같고, 어떤 언어는 같지 않고... 언어에 따라 달라지니 문자열 판정은 늘 헷갈리는 문제이다. 이 글은 C++에서 서로다른 변수가 같은 문자열을 가지면 같은 판정인지 실험해본 내용을 담고있다. #include #include using namespace std; int main(void) { string str = "Hello"; string str2 = "Hello"; if (str == "Hello") cout
https://www.acmicpc.net/problem/25643 25643번: 문자열 탑 쌓기 인경이는 $N$개의 문자열을 쌓아서 문자열 탑을 완성하려고 한다. 탑을 완성하기 위해서는 모든 문자열을 한 층에 하나씩 아래에서부터 순서대로 쌓아 올려야 한다. 인경이는 문자열 탑의 꼭대 www.acmicpc.net 백준 25643번 문제와 같이 입력받은 문자열의 일부만이 필요한 경우가 있다. 이 때, 문자열의 일부를 반환하는 함수 substr()을 사용하여 원하는 문자열을 얻을 수 있다. substr() // pos: 문자의 위치, count: 반환할 문자열의 길이 basic_string substr(size_type pos = 0, size_type count = npos) const; 문자열의 pos번..
백준 문제를 풀다보면 문자열의 패턴을 변경하거나 찾는 문제를 볼 수 있다. 문자열 문제는 특징 상, 푸는 방식을 알아도 마땅한 함수를 알지 못하면 틀릴 수 밖에 없는 일명 "모르면 틀려야지" 문제 유형이다. 따라서, 문자열 문제를 풀기 위해선 위 두 함수에 대한 이해가 필요하다. replace(), find() 함수는 헤더파일에 존재하는 함수로, 이 두 함수를 사용하기 위해선 헤더파일을 추가해야 한다. find() // find(찾는 문자열) basic_string:: find(const _CharT* __s, size_type __pos, size_type __n) const{ ... } 문자열에서 파라미터로 입력한 문자열의 위치를 찾는다. 문자열을 찾았다면 찾은 문자열의 시작 위치를 반환하고, 문자열..