반응형

문자열 31

[백준 / BOJ] C++ 1316 그룹 단어 체커

1316번: 그룹 단어 체커 문제 https://www.acmicpc.net/problem/1316 1316번: 그룹 단어 체커 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때 www.acmicpc.net 풀이 문자열 내에서 같은 문자는 연속해서만 나타나면 그룹 단어다. 따라서 i번째 문자와 i+1번째 문자가 다른 경우에만 이후에 i번째 문자와 같은 문자가 있는지 확인해주면 된다. 코드 #include using namespace std; int main() { int n, ans = 0; cin >> n; for (int i = 0..

Problem Solving/BOJ 2023.02.19

[백준 / BOJ] C++ 1958 LCS 3

1958번: LCS 3 문제 https://www.acmicpc.net/problem/1958 1958번: LCS 3 첫 줄에는 첫 번째 문자열이, 둘째 줄에는 두 번째 문자열이, 셋째 줄에는 세 번째 문자열이 주어진다. 각 문자열은 알파벳 소문자로 이루어져 있고, 길이는 100보다 작거나 같다. www.acmicpc.net 풀이 9251번 LCS의 확장 버전이다. 아래 문제와 다른 점은 문자열 두개가 아닌 세 개를 비교하는 문제다. https://khyunx.tistory.com/57 [백준 / BOJ] C++ 9251 LCS 9251번: LCS 문제 https://www.acmicpc.net/problem/9251 9251번: LCS LCS(Longest Common Subsequence, 최장 공통..

Problem Solving/BOJ 2023.02.15

[백준 / BOJ] C++ 9251 LCS

9251번: LCS 문제 https://www.acmicpc.net/problem/9251 9251번: LCS LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. www.acmicpc.net 풀이 입력된 두 문자열을 비교하면서 LCS(최장 공통 부분 수열)의 길이를 찾는 문제. 가능한 모든 경우의 수를 확인하면 시간초과가 나기 때문에 dp를 이용해 풀어야 한다. 예제를 통해 설명을 해보자. 비교하는 두 문자열은 "ACAYKP"와 "CAPCAK"다. 최장 공통 부분 수열은 "ACAK"로 길이는 4다. 0 A C A Y..

Problem Solving/BOJ 2023.02.15

[백준 / BOJ] C++ 14490 백대열

14490번: 백대열 문제 https://www.acmicpc.net/problem/14490 14490번: 백대열 n과 m이 :을 사이에 두고 주어진다. (1 ≤ n, m ≤ 100,000,000) www.acmicpc.net 풀이 N, M을 입력받아 최대한 약분하여 출력하는 문제다. 당연 최대공약수로 나누어주면 그만이다. 입력이 100:10 같은 형태로 입력되기 때문에 cin이 아닌 scanf로 입력을 받았다. 코드 #include using namespace std; // 유클리드 호제법 int gcd(int a, int b) { return b ? gcd(b, a % b) : a; } int main() { int n, m; scanf("%d:%d", &n, &m); int g = gcd(n, m..

Problem Solving/BOJ 2023.02.13

[백준 / BOJ] C++ 17609 회문

17609번: 회문 문제 https://www.acmicpc.net/problem/17609 17609번: 회문 각 문자열이 회문인지, 유사 회문인지, 둘 모두 해당되지 않는지를 판단하여 회문이면 0, 유사 회문이면 1, 둘 모두 아니면 2를 순서대로 한 줄에 하나씩 출력한다. www.acmicpc.net 풀이 문자열을 입력받아 이 문자열이 회문인지, 유사 회문인지, 둘 다 아닌지를 판단하여 각 0, 1, 2를 출력하는 문제다. 여기서 유사 회문이란 문자열에서 한 글자를 제거하여 회문이 되는 문자열을 말한다. 투 포인터(two pointer)를 사용해 풀었다. 문자열을 s라 하면, left는 0번 index부터 차례로 증가, right는 문자열의 마지막 문자 index부터 차례로 감소하며 left < r..

Problem Solving/BOJ 2023.02.12

[백준 / BOJ] C++ 1264 모음의 개수

1264번: 모음의 개수 문제 https://www.acmicpc.net/problem/1264 1264번: 모음의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 영어 대소문자, ',', '.', '!', '?', 공백으로 이루어진 문장이 주어진다. 각 줄은 최대 255글자로 이루어져 있다. 입력의 끝에는 한 줄 www.acmicpc.net 풀이 getline 함수를 사용해 줄 단위로 입력을 받고 모음(a, e, i, o, u)의 개수를 세는 문제다. 대/소문자 모두 세어야 함에 주의하자. 코드 #include using namespace std; int main() { string str; char arr[] = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I..

Problem Solving/BOJ 2023.02.12

[백준 / BOJ] C++ 1259 팰린드롬수

1259번: 팰린드롬수 문제 https://www.acmicpc.net/problem/1259 1259번: 팰린드롬수 입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다. www.acmicpc.net 풀이 문자열 S를 입력받고 왼쪽 끝과 오른쪽 끝에서부터 차례대로 문자가 같은지 확인하며 같은 개수를 센다. 하나라도 틀리다면 "no"를 출력한다. 아니라면 탐색을 모두 끝내면 "yes"를 출력한다. 오래전에 푼 문제라 너무 어렵게 푼 것 같다. 그냥 문자열을 복사해 두고 헤더의 reverse() 함수를 사용해 뒤집어서 같은지 비교만 하면 풀 수 있는 간단한 문제다. 코드 #includ..

Problem Solving/BOJ 2023.02.12

[백준 / BOJ] C++ 1181 단어 정렬

1181번: 단어 정렬 문제 https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 풀이 정렬 조건에 따라 정렬 후 출력하면 되는 문제다. 정렬 조건은 아래와 같다. 길이가 짧은 것부터 길이가 같으면 사전 순 헤더의 sort() 함수를 사용하면 쉽게 풀 수 있다. sort() 함수는 비교연산할 함수를 정할 수 있는데, 기본값은 오름차순이다. 따라서 compare함수를 만들어줬다. 길이가 같을 때는 사전 순으로, 이외엔 길이가 작은 순이 되도..

Problem Solving/BOJ 2023.02.11

[백준 / BOJ] C++ 1157 단어 공부

1157번: 단어 공부 문제 https://www.acmicpc.net/problem/1157 1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net 풀이 가장 많이 사용된 알파벳을 출력하는 문제이며 여러 개일 경우 '?'를 출력한다. 문자열을 입력받고 출력이 대문자이기 때문에 모든 문자를 대문자로 바꿔준다. 미리 만들어놓은 alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 문자열에서 차례대로 각 알파벳이 몇 개 들어있는지 계산해서 배열에 추가한다. 가장 높은 개수를 찾고 result에 가장 많이 사용된 알파벳을 저장한다. 가장..

Problem Solving/BOJ 2023.02.11

[백준 / BOJ] C++ 1152 단어의 개수

1152번: 단어의 개수 문제 https://www.acmicpc.net/problem/1152 1152번: 단어의 개수 첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열 www.acmicpc.net 풀이 문장을 입력받아 단어의 개수를 출력하는 문제다. getline 함수를 사용해 문장을 입력받는다. 문장에서 공백의 개수를 센다. 문장의 처음이 공백인 경우나 마지막이 공백인 경우엔 개수를 빼준다. 단어의 수는 단어 사이의 공백 수보다 1 크므로 1을 더해 출력해 준다. 코드 #include using namespace std; int main() { ios:..

Problem Solving/BOJ 2023.02.11
반응형