문자열 38

백준 23349번: 졸업 사진

https://www.acmicpc.net/problem/23349 23349번: 졸업 사진 첫째 줄에 학교가 공지할 것으로 예상되는 혼잡 (장소, 시간대) 쌍을 공백으로 구분하여 출력한다. 이때 시간대는 조건을 만족하는 가장 긴 시간대를 의미한다. www.acmicpc.net 각 촬영을 선분, 촬영의 시작 시간과 종료 시간을 시작점과 끝점으로 보면, 이 문제는 라인 스위핑을 이용해 선분이 가장 많이 겹치는 구간을 찾는 문제이다. 이 때 촬영 장소, 즉 선분의 종류가 문자열로 구분되므로, 라인 스위핑을 위해 각 점을 정렬할 때 선분의 종류를 최우선으로 두어 정렬하면 각 종류 별로 선분을 나누어 저장할 필요 없이 빠르게 라인 스위핑을 실행할 수 있다. #include #include #include #in..

백준 17249번: 태보태보 총난타

https://www.acmicpc.net/problem/17249 17249번: 태보태보 총난타 태보(TaeBo)란, 태권도와 복싱을 조합한 운동이다. 복싱의 공격 기술로는 민첩하게 앞주먹을 뻗으면서 가볍게 치는 잽, 옆으로 치는 펀치인 훅이 있다. 선풍적인 인기에 태보 강의를 들으며 태보 www.acmicpc.net 왼손의 잔상의 수는 얼굴의 중심인 '0'가 나오기 이전에 나온 주먹 '@'의 개수이고, 오른손의 잔상의 수는 '0'가 나온 이후에 나온 '@'의 개수이다. #include int main() { // 문자열을 한 글자씩 입력받을 공간 char c; // 각 펀치의 잔상의 수 int ans = 0; // 얼굴을 입력받기 전까지 주먹의 개수를 세어 ans에 저장 while ((c = getc..

백준 16500번: 문자열 판별

https://www.acmicpc.net/problem/16500 16500번: 문자열 판별 첫째 줄에 길이가 100이하인 문자열 S가 주어진다. 둘째 줄에는 A에 포함된 문자열의 개수 N(1 ≤ N ≤ 100)이 주어진다. 셋째 줄부터 N개의 줄에는 A에 포함된 단어가 한 줄에 하나씩 주어진다. A에 www.acmicpc.net S를 이룰 각 문자열 A_i와 그 길이 A_i_size에 대해, S에서 k부터 시작하는 A_i를 찾고 S[0:k]를 주어진 문자열을 이용해 만들 수 있다면, S[0:k+A_i_size] 역시 만들 수 있다. 이 과정을 k가 0일 때부터 S의 길이까지 반복한다면 S를 주어진 A의 집합만으로 만들 수 있는지 확인할 수 있다. #include #include using namesp..

15353번: 큰 수 A+B (2)

https://www.acmicpc.net/problem/15353 15353번: 큰 수 A+B (2) C++17, C11, C99, C++98, C++11, C++14, C99 (Clang), C++98 (Clang), C++11 (Clang), C++14 (Clang), C11 (Clang), C++17 (Clang) www.acmicpc.net 수의 최대치가 10^10000이므로 C 혹은 C++에 존재하는 타입으로는 A와 B를 저장할 수 없다. 따라서 수를 한 자리씩 입력받아 배열에 저장한 뒤, 가장 작은 자리부터 한 자리씩 더해 덧셈을 구현해야 한다. #include #define MAX 10001 #define MOD 10 void swap(char &a, char &b) { char temp ..

14490번: 백대열

https://www.acmicpc.net/problem/14490 14490번: 백대열 n과 m이 :을 사이에 두고 주어진다. (1 ≤ n, m ≤ 100,000,000) www.acmicpc.net n과 m을 형식에 맞게 입력받아 최대공약수 k를 구한 뒤, n / k와 m / k를 형식에 맞게 출력한다. #include // a와 b의 최대공약수를 반환 int gcd(int a, int b) { return b ? gcd(b, a % b) : a; } int main() { // n, m: 약분할 두 숫자, k: n과 m의 최대공약수 int n, m, k; // n과 m을 입력받은 뒤 k에 n과 m의 최대공약수를 저장 scanf("%d:%d", &n, &m); k = gcd(n, m); // n과 m..

14425번: 문자열 집합

https://www.acmicpc.net/problem/14425 14425번: 문자열 집합 첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다. 다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어 www.acmicpc.net unordered_set을 이용해 N개의 중복되지 않는 문자열을 각각 저장한 뒤, S.count를 이용해 M개의 문자열이 있는지를 각각 확인해 더한 값을 출력하면 답을 얻을 수 있다. #include #include #include using namespace std; int main() { // 입출력 속도 향상 ios::sync_with_stdio(false);..

11721번: 열 개씩 끊어 출력하기

https://www.acmicpc.net/problem/11721 11721번: 열 개씩 끊어 출력하기 첫째 줄에 단어가 주어진다. 단어는 알파벳 소문자와 대문자로만 이루어져 있으며, 길이는 100을 넘지 않는다. 길이가 0인 단어는 주어지지 않는다. www.acmicpc.net 단허를 한 글자씩 입력받아 출력한다. 이 때 입력받은 글자의 개수가 10의 배수일 때 줄바꿈을 출력한다. #include int main() { // 단어를 한 글자씩 입력받을 공간 char c; // 입력받은 문자의 개수 int i = 0; // 글자의 모든 문자를 입력받은 뒤 while (scanf("%c", &c) && c != '\n') { // 문자를 출력하고 printf("%c", c); // 입력받은 문자의 개수가..

11720번: 숫자의 합

https://www.acmicpc.net/problem/11720 11720번: 숫자의 합 첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다. www.acmicpc.net 숫자 N개가 공백 없이 주어지므로, 주어지는 어느 숫자가 두 자리 이상일 경우 입력이 모호해진다. 따라서 모든 입력은 한 자리 숫자이므로, 모든 한 자리 숫자를 입력받아 그 합을 저장한 뒤 출력한다. #include int main() { char c; int sum = 0; // N은 입력받을 필요 없다 scanf("%*d%*c"); // 숫자가 공백 없이 주어지므로 주어지는 각 숫자는 한 자리 수이다 // 모든 한 자리 수를 입력받아 sum에 그 합을 저장한 뒤 출력 whil..

11719번: 그대로 출력하기 2

https://www.acmicpc.net/problem/11719 11719번: 그대로 출력하기 2 입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄이 주어질 수도 있고, 각 줄의 앞 뒤에 공백이 www.acmicpc.net 주어지는 모든 문자를 입력받는 대로 출력한다. #include int main() { char c; // 한 글자씩 입력받으며 모든 글자를 출력 while ((c = getchar()) != EOF) printf("%c", c); return 0; }

11718번: 그대로 출력하기

https://www.acmicpc.net/problem/11718 11718번: 그대로 출력하기 입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시 www.acmicpc.net 주어지는 모든 문자를 입력받는 대로 출력한다. #include int main() { char c; // 한 글자씩 입력받으며 모든 글자를 출력 while ((c = getchar()) != EOF) printf("%c", c); return 0; }