문자열 38

11365번: !밀비 급일

https://www.acmicpc.net/problem/11365 11365번: !밀비 급일 당신은 길을 가다가 이상한 쪽지를 발견했다. 그 쪽지에는 암호가 적혀 있었는데, 똑똑한 당신은 암호가 뒤집으면 해독된다는 것을 발견했다. 이 암호를 해독하는 프로그램을 작성하시오. www.acmicpc.net 문자열을 입력받은 뒤 역순으로 출력한다. #include #include using namespace std; int main() { // 입출력 속도 향상 ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); // 해독할 문자열 string str; // 입력받은 문자열이 "END"가 아니라면 while (getline(cin, str) && str ..

11328번: Strfry

https://www.acmicpc.net/problem/11328 11328번: Strfry C 언어 프로그래밍에서 문자열(string)은 native한 자료형이 아니다. 사실, 문자열은 그저, 문자열의 끝을 표시하기 위한 말단의 NULL이 사용된, 문자들로 이루어진 문자열일 뿐이다. 하지만 프로그래 www.acmicpc.net 첫 번쨰 문자열을 strfry를 이용해 두 번째 문자열로 만들기 위해선, 두 문자열에 나온 각 문자의 개수가 모두 같아야 한다. 따라서 두 문자열에서 각 문자가 나온 횟수의 차를 구한 뒤, 어떤 문자에서 차가 0이 아닌 경우는 Impossible을, 그렇지 않다면 Possible를 출력한다. #include using namespace std; #define LEN 1000 v..

10953번: A+B - 6

https://www.acmicpc.net/problem/10953 10953번: A+B - 6 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net 각 테스트 케이스에 대해 두 수 A, B를 입력받아 그 합을 출력한다. #include int main() { // T: 테스트 케이스의 수, A, B: 더할 두 수 int T, A, B; // 테스트 케이스의 수를 입력받은 뒤 각 테스트 케이스에 대해 for (scanf("%d", &T); T--; ) { // 두 수 A와 B를 입력받아 그 합을 출력 scanf("%d,%d", &A, &B); printf("%d\n", A + B); } return 0; }

10809번: 알파벳 찾기

https://www.acmicpc.net/problem/10809 10809번: 알파벳 찾기 각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출 www.acmicpc.net 각 글자가 나온 위치를 -1로 초기화한 뒤, 각 글자가 발견될 때마다 글자가 나온 위치가 -1일 경우에만 갱신한 뒤 각 글자가 나온 위치를 출력한다. #include #define MAX 26 int main() { // 단어를 한 글자씩 입력받기 위한 공간 char c; // ans[i]: i + 'a'가 처음 나온 인덱스 int ans[MAX]; // ans를 전부 -1로 초기화한..

9322번: 철벽 보안 알고리즘

https://www.acmicpc.net/problem/9322 9322번: 철벽 보안 알고리즘 소희는 공개키와 개인키 한 쌍으로 보안을 유지하는 것이 매우 불편하다고 생각했다. 그래서 소희는 공개키만을 이용하는 암호화 체계를 개발했다. 이를 "철벽 보안 알고리즘"이라고 부르기로 www.acmicpc.net 단어가 총 1000개 이하이므로 제1 공개키와 제2 공개키, 암호문을 입력받은 뒤, 제1 공개키와 제2 공개키를 비교하면서 암호문을 특정 순서대로 출력한다면 시간 제한 이내에 답을 출력할 수 있다. 또, 제1 공개키를 입력받아 map에 저장한 뒤 제2 공개키를 이용해 암호문의 복호 순서를 저장한 뒤 암호문을 입력받아 구한 순서대로 출력하는 경우에도 시간 제한 이내에 답을 출력할 수 있다. - 공개키..

9012번: 괄호

https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 괄호 문자열에 대해, '('가 나온 횟수에서 ')'가 나온 횟수를 뺀 값을 괄호의 깊이라고 하자. 주어진 문자열이 올바른 괄호 문자열이려면 문자열의 깊이가 0이면서, 주어진 문자열의 0번 인덱스부터 시작하는 모든 부분 문자열의 깊이가 음수가 아니어야 한다. #include bool test_case() { // 괄호의 깊이가 음수가 아니라면 true, 음수라면 fal..

8958번: OX퀴즈

https://www.acmicpc.net/problem/8958 8958번: OX퀴즈 "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수 www.acmicpc.net 테스트 케이스의 문자열 s에 대해, s[i - 1]에서 연속된 O의 개수가 a개이고 점수의 합이 sum이라고 하자. s[i]가 O라면 sum에 a를 더한 뒤 a에 1을 더하고, 그렇지 않다면 a를 1로 초기화한다. 이를 문자열의 모든 문자에 대해 실행하면 정답을 구할 수 있다. #include int test_case() { // 문자열을 한 글자씩 입력받을 버퍼 char bu..

5582번: 공통 부분 문자열

https://www.acmicpc.net/problem/5582 5582번: 공통 부분 문자열 두 문자열이 주어졌을 때, 두 문자열에 모두 포함된 가장 긴 공통 부분 문자열을 찾는 프로그램을 작성하시오. 어떤 문자열 s의 부분 문자열 t란, s에 t가 연속으로 나타나는 것을 말한다. 예를 들 www.acmicpc.net 두 문자열 A와 B에 대해, A[a]와 B[b]에서 끝나는 공통 부분 문자열을 찾았고, 이 때의 길이를 i라고 하자. 만일 A[a + 1]과 B[b + 1]이 같다면 최장 공통 부분 문자열의 길이를 i + 1로 갱신할 수 있고, 아니라면 두 위치에서 끝나는 공통 부분 문자열의 길이는 0이 된다. 이 과정을 모든 a와 b에 대해 2차원 배열로 저장하거나, a는 증가하고 b는 감소하는 방향..

5525번: IOIOI

https://www.acmicpc.net/problem/5525 5525번: IOIOI N+1개의 I와 N개의 O로 이루어져 있으면, I와 O이 교대로 나오는 문자열을 PN이라고 한다. P1 IOI P2 IOIOI P3 IOIOIOI PN IOIOI...OI (O가 N개) I와 O로만 이루어진 문자열 S와 정수 N이 주어졌을 때, S안에 PN이 몇 www.acmicpc.net S의 i번째 문자에서 시작하는 N번째 IOI 문자열을 찾았을 때, 이 말은 곧 S의 i + 1번째 문자에서 시작하는 N - 1번째 IOI 문자열을 찾았다는 의미이다. 따라서 S의 i + 1번째와 i + 2번째 문자에서 시작하는 IOI 문자열을 찾을 필요 없이, S의 i번째 문자에서 시작하는 IOI 문자열의 바로 다음 두 글자를 비..

5430번: AC

https://www.acmicpc.net/problem/5430 5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net deque를 활용하는 문제이다. deque에 배열을 모두 저장한 뒤, 배열을 뒤집는 것은 bool 변수에 저장한 다음, 값을 제거하는 것은 bool 변수의 값에 따라서 deque의 앞 혹은 뒤의 값을 제거하면 된다. #include #include #include using namespace std; #define MAX_P 100000 void test_case() { // 배열이 뒤집혔다면 true, 아니라면 false bool flip = fals..