본문 바로가기

Algorithm/String

(93)
(C++) - 백준(BOJ) 6996번 : 애너그램 www.acmicpc.net/problem/6996 6996번: 애너그램 첫째 줄에 테스트 케이스의 개수(> testCase; while(testCase--){ string a,b; cin >> a >> b; int cnt[26], cnt2[26]; int *alpha = getAlpha(a,cnt); int *alpha2 = getAlpha(b,cnt2); if(isAnagram(alpha,alpha2)) cout
(C++) - 백준(BOJ) 10174번 : 팰린드롬 www.acmicpc.net/problem/10174 10174번: 팰린드롬 팰린드롬은 앞으로 읽으나 뒤로 읽으나 똑같은 단어나 숫자들을 말한다. 일반적으로 대소문자를 구분하지 않지만, 공백은 구분한다. 다음은 팰린드롬의 예시이다. Anna Harrah Arora Nat tan 9998999 123 www.acmicpc.net 풀이방법 1. 처음 줄 수에 대한 입력을 받은 후 '\n'가 cin의 버퍼에 남아있을 때 비워주기 위해 ignore함수를 호출해줍니다. 2. cin의 에러비트를 초기화해주고 문장을 입력받습니다. 3. 대문자가 있다면 소문자로 변환해줍니다. 4. 팰린드롬 여부를 검사한 후 출력합니다. Code #include using namespace std; string toLowerCase(s..
(C++) - 백준(BOJ) 13163번 : 닉네임에 갓 붙이기 www.acmicpc.net/problem/13163 13163번: 닉네임에 갓 붙이기 첫 번째 줄에는 닉네임의 수 N(1 ≤ N ≤ 100)이 주어진다. 두 번째 줄부터 N개의 줄에는 음절 단위로 쪼갠 닉네임이 주어진다. 각 줄은 알파벳 소문자와 공백만으로 이루어지며, 쪼갠 닉네임의 총 www.acmicpc.net 간단한 문자열 처리 문제였습니다. 풀이방법 1. cin은 '\n'를 포함해 버퍼에 넣기 때문에 처음 n을 입력받은 후 cin.clear()로 버퍼를 비워줍니다. 2. 이후 사용하는 getline함수 또한 cin을 사용하기 때문에 ignore()함수를 이용해 개행문자를 무시해줍니다. 3. 이후 첫 음절을 god으로 바꾼 후 나머지 문자를 띄어쓰기 없이 붙인 후 출력하시면 됩니다. Code #i..
(C++) - 백준(BOJ) 1871번 : 좋은 자동차 번호판 www.acmicpc.net/problem/1871 1871번: 좋은 자동차 번호판 각각의 자동차 번호판에 대해서, 좋은 번호판이면 "nice"를, 아니면 "not nice"를 출력한다. www.acmicpc.net 문자열을 다루는 문제였습니다. 풀이방법 abs와 stoi함수로 문제의 조건을 만족시킬 수 있도록 적절히 사용해주면 정답을 도출할 수 있습니다. Code #include using namespace std; int getIntFront(string front){ int sum = 0; for(int i = 0; i < front.size(); i++) sum += (front[i]-'A') * pow(26,front.size()-i-1); return sum; } int main(){ int ..
(C++) - 백준(BOJ) 15904번 : UCPC는 무엇의 약자일까? www.acmicpc.net/problem/15904 15904번: UCPC는 무엇의 약자일까? 첫 번째 줄에 알파벳 대소문자, 공백으로 구성된 문자열이 주어진다. 문자열의 길이는 최대 1,000자이다. 문자열의 맨 앞과 맨 끝에 공백이 있는 경우는 없고, 공백이 연속해서 2번 이상 주어지는 www.acmicpc.net 문자의 서순("UCPC")을 지켜서 세주는 문제였습니다. 풀이방법 1. U일 때는 cnt = 1 2. C가 나왔을 때 2-1. cnt == 1이면 cnt = 2 2-2. cnt == 3이면 cnt = 4 3. P가 나왔을 때 cnt가 2라면 cnt = 3 4. cnt가 4라면 서순을 지켰고 적절히 축약한다면 UCPC를 만들 수 있습니다. Code #include using namespac..
(C++) - 백준(BOJ) 1371번 : 가장 많은 글자 답 www.acmicpc.net/problem/1371 1371번: 가장 많은 글자 첫째 줄부터 글의 문장이 주어진다. 글은 최대 5000글자로 구성되어 있고, 공백, 알파벳 소문자, 엔터로만 이루어져 있다. 그리고 적어도 하나의 알파벳이 있다. www.acmicpc.net 문자열을 다루는 문제였습니다. eof 즉 0을 만나면 입력을 종료해야합니다. 풀이방법 1. 알파벳 개수를 세줍니다. 2. 가장 큰 개수를 가진 알파벳을 순서대로 출력해줍니다. Code #include using namespace std; int big; int alpha[26]; int main() { while (1) { char c = 0; cin >> c; if (c == 0) break; if ('a'
(C++) - 백준(BOJ) 4388번 : 받아올림 답 www.acmicpc.net/problem/4388 4388번: 받아올림 어린이에게 여러자리 숫자의 덧셈을 가르칠 때는 오른쪽 자리부터 왼쪽으로 하나씩 계산하는 방법을 가르쳐준다. 이때, 받아올림이 발생하게 되며 아이들은 여기서 혼란에 빠진다. 받아올림이 www.acmicpc.net 문자열을 적절히 처리하는 문제였습니다. 풀이방법 가장 긴 자리 수를 기준으로 일의자리부터 왼쪽으로 거슬러 올라가는 식으로 더해보고 비교해줍니다. 이 때 짧은 자리를 가진 수가 overflow가 나면 안됩니다. 1. 현재 자리 수가 짧은 자리 수에게도 있는 경우 a의 현재 자리 수 + b의 현재 자리 + 받아올림 여부(cnt) >= 10이라면 carry++, cnt = 1; else cnt = 0으로 초기화 2. 아닌 경우 a..
(C++) - 백준(BOJ) 1225번 : 이상한 곱셉 답 www.acmicpc.net/problem/1225 1225번: 이상한 곱셈 첫째 줄에 A와 B가 주어진다. 주어지는 두 수는 모두 10,000자리를 넘지 않는다. www.acmicpc.net 문자열 다루는 문제였습니다. 풀이방법 정답 변수에 O(N^2)의 시간복잡도로 모든 조합을 곱한 뒤 더해주면 됩니다. 1만자리까지 곱의 결과를 더하므로 int범위를 초과할 수 있기 때문에 ans의 자료형을 long long으로 해주시면 됩니다. 예를 들어 a,b string이 1만자리라면 나올 수 있는 경우의 수가 1만 * 1만 = 1억개가 됩니다. 따라서 a = "9999999..." b = "9999999..." 식으로 되어 있다면 81 * 1억 81억이 되므로 int범위인 21억을 초과합니다. Code #inc..