-
2024 - 02 - 27 C++ 코딩테스트 10주완성 D+7Language Grammar/C++ 2024. 2. 27. 17:59
1-D 팰린드롬 - 백준 10988 문제
*문제
알파벳 소문자로만 이루어진 단어가 주어진다. 이때, 이 단어가 팰린드롬인지 아닌지 확인하는 프로그램을 작성하시오.
출력 : 첫째 줄에 팰린드롬이면 1, 아니면 0을 출력한다.
*풀이
팰린드롬 = 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어
단어 전체를 반전하였을 때, 원본이랑 같은 단어일시 팰린드롬이 성립하므로
입력받은 단어를 reverse 함수를 이용하여 반전하여
반전한 단어와 원래 입력받은 단어 두개를 비교하여서 같으면 팰린드롬 성립
아닐 경우에는 0을 반환한다.
*실습코드#include <bits/stdc++.h> using namespace std; //입력받을 단어 string s, temp; int main() { cin >> s; temp = s; //입력받은 s를 반전시켜 저장 reverse(temp.begin(), temp.end()); //반전한 s와 s를 비교하여 똑같으면 1 if (temp == s) cout << 1 << "\n"; //아니면 0을 반환 else cout << 0 << "\n"; return 0; }
1-E 농구경기 ( 백준 1159 문제 )
*문제
선수의 수와 각 선수의 이름을 입력받은 뒤
같은 성의 선수 5명을 추려내서 성을 출력한다.
같은 성의 선수 목록이 여러개가 있을 시, 알파벳 사전순서로 출력한다.
같은 성의 선수목록이 발견되지않을 시, PREDAJA 를 출력한다.
*선언할 변수 정리
//선수의 수를 입력받을 정수변수
int PlayerCnt;
//선수의 이름을 저장해둘 string 배열
string[] PlayerName;
//선수의 성을 검사할 string 변수
char FirstName;
//정수형 배열의 숫자를 통하여 5명의 선수 검사
int[] Alphabet
*메인 함수에 쓰일 코드 정리
선수 수 입력 받고
반복문을 통해 선수의 이름을 수만큼 입력받고 배열에 저장하는코드
각 배열마다 성을 비교하는 반복문을 작성
*실습코드#include <bits/stdc++.h> using namespace std; //선수의 수를 입력받을 정수변수 int PlayerCnt; //선수의 이름을 저장해둘 string 배열 string PlayerName[150]; //선수의 성을 검사할 string 변수 char FirstName; //정수형 배열의 숫자를 통하여 5명의 선수 검사 int Alphabet[27]; int main() { // 선수 수 입력 받고 cin >> PlayerCnt; if (PlayerCnt < 1 || PlayerCnt > 150) return 0; // 반복문을 통해 선수의 이름을 수만큼 입력받고 배열에 저장하는코드 for (int i = 0; i < PlayerCnt; i++) { cin >> PlayerName[i]; for (int j = 0; j < PlayerName[i].length(); j++) { if (PlayerName[i][j] < 97 || PlayerName[i][j] > 122) return 0; } } // 각 배열마다 성을 비교하는 반복문을 작성 for (int i = 0; i < PlayerCnt; i++) { for (int j = 0; j < 27; j++) { if (PlayerName[i][0] - 'a' == j) Alphabet[j]++; } } int count = 0; for (int i = 0; i < 27; i++) { if (Alphabet[i] >= 5) { char CAlphabet(i + 97); cout << CAlphabet; count++; } } if (count == 0) cout << "PREDAJA"; return 0; }
이렇게 방대하고 긴 코드를
큰돌 실습코드#include<bits/stdc++.h> using namespace std; int n, cnt[26]; string s, ret; int main(){ cin >> n; for(int i = 0; i < n; i++) { cin >> s; cnt[s[0] - 'a']++; } for(int i = 0; i < 26; i++)if(cnt[i] >= 5) ret+= i + 'a'; if(ret.size()) cout << ret << "\n"; else cout << "PREDAJA" << "\n"; }
이렇게 줄일 수 있다.
애초에 string 을 입력받을때 int형 정수배열에다가 증감연산자를 사용하면
반복문을 한번더 안 쓸수 있어 시간복잡도면에서나 다른 지역변수도 안써도 되어서
메모리 공간복잡도면에서도 효율적인 코드이다.
더욱 더 머리를 잘굴려야겠다는 생각이 세삼든다.... ㅠ'Language Grammar > C++' 카테고리의 다른 글
2024 - 03 - 11 C++ 코딩테스트 10주완성 D+9 (2) 2024.03.12 2024 - 03 - 03 C++ 코딩테스트 10주완성 D+8 (0) 2024.03.03 2024 - 02 - 26 C++ 코딩테스트 10주완성 D+6 (1) 2024.02.26 2024 - 02 - 14 C++ 코딩테스트 10주완성 D+5 (1) 2024.02.15 2024 - 02 - 12 C++ 코딩테스트 10주완성 D+4 (1) 2024.02.12