문자열 38

1541번: 잃어버린 괄호

https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 입력받은 수식을 '-' 기호로 쪼갠 뒤, 쪼개서 나온 각 덧셈식을 괄호로 묶으면 식의 최솟값을 구할 수 있다. 예) (a + b) - (c + d + e) - (f + g) #include int main() { // 수식을 -를 기준으로 쪼개면 // 수식에서 '-'가 나오기 이전 수를 모두 더한 값에서 // '-'가 나온 이후 수를 모두 빼 최솟값을 만들 수 있다 // (a + b) - (..

1427번: 소트인사이드

https://www.acmicpc.net/problem/1427 1427번: 소트인사이드 첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 수 N을 수가 아닌, '0'~'9'로 이루어진 문자로 생각하면 쉽다. 각 문자가 나온 횟수를 센 뒤, 문자를 역순으로 나온 횟수만큼 출력하면 된다. #include // cnt[i]: 숫자 i가 나온 횟수 int cnt[10]; int main() { // 입력을 문자열로 생각하여 버퍼에 한 글자씩 입력받는다 char buf; scanf("%c", &buf); // 문자열의 각 문자에 대해 while (buf != '\n') { // 해당 문자열의 등장 횟수를 1 늘린다 cnt[bu..

1316번: 그룹 단어 체커

https://www.acmicpc.net/problem/1316 1316번: 그룹 단어 체커 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때 www.acmicpc.net 각 단어에서 어느 글자가 연속해서 나오지 않는지를 확인하는 문제이다. 각 단어마다 글자가 나왔는지 여부와 직전에 나온 글자를 저장하고, i번째 글자가 직전의 글자와 다르면서 이전에 나온 단어라면 그룹 단어가 아니다. #include // 입력받은 단어가 그룹 단어라면 true, 아니라면 false bool test_case() { // chk[i]: 각 알파벳이 이..

1254번: 팰린드롬 만들기

https://www.acmicpc.net/problem/1254 1254번: 팰린드롬 만들기 동호와 규완이는 212호에서 문자열에 대해 공부하고 있다. 규완이는 팰린드롬을 엄청나게 좋아한다. 팰린드롬이란 앞에서부터 읽으나 뒤에서부터 읽으나 같게 읽히는 문자열을 말한다. 동호는 www.acmicpc.net 문자열 K의 뒤에 문자 K개를 추가해서 팰린드롬을 만든다는 말은, 문자열 S를 뒤집은 문자열 S'에 문자 K개를 추가해 팰린드롬을 만드는 것과 같다. 이 떄 S'의 앞에서부터 시작하는 부분 문자열 S'p가 팰린드롬이라면, K는 곧 S'의 길이에서 Sp의 길이를 뺀 값과 같다. 따라서 이 문제는 문자열 S가 뒤에서 얼마나 긴 팰린드롬을 가지고 있는지를 알아내는 문제와 같다. #include using n..

1157번: 단어 공부

https://www.acmicpc.net/problem/1157 1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net char형 변수를 인덱스로 변환시켜 배열에 접근하는 법을 알면 간단하게 풀 수 있다. #include #define MAX_LEN 1000000 // 단어를 저장할 공간 char str[MAX_LEN]; // times[i]: i번째 알파벳의 등장 횟수 int times[26]; int main() { // idx: 단어의 각 글자를 인덱스로 바꾼 값 // most: 가장 많이 등장한 알파벳의 인덱스 int idx, most = ..

1152번: 단어의 개수

https://www.acmicpc.net/problem/1152 1152번: 단어의 개수 첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열 www.acmicpc.net 입력에서 공백의 개수를 계산하되, 입력의 시작 부분 혹은 끝 부분이 공백이라면 그 부분을 세지 않아야 한다. #include #include using namespace std; int main() { // 입출력 속도 향상 ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); // str 안의 단어의 개수 int ans = 1; // 문..

1100번: 하얀 칸

https://www.acmicpc.net/problem/1100 1100번: 하얀 칸 체스판은 8×8크기이고, 검정 칸과 하얀 칸이 번갈아가면서 색칠되어 있다. 가장 왼쪽 위칸 (0,0)은 하얀색이다. 체스판의 상태가 주어졌을 때, 하얀 칸 위에 말이 몇 개 있는지 출력하는 프로그램 www.acmicpc.net (0, 0)이 흰 칸이므로, 좌표 (i, j)에 대해 (i + j) % 2가 0인 경우는 흰 칸, 1인 경우는 검은 칸이다. #include int main() { // buf: 체스판의 각 칸의 정보를 입력받을 버퍼 // ans: 말이 있는 흰 칸의 수 char buf, ans = 0; // 체스판의 각 칸에 대해 for (int i = 0; i < 8; i++) { for (int j = 0..