문제
소문자 알파벳으로만 이루어진 문자열 A가 주어졌을 때, 문자열 A를 이루고 있는 서로 다른 알파벳의 수가 2개 이상인지를 판단하는 프로그램을 작성해보세요.
실행 결과
코드(c++)
#include <iostream>
using namespace std;
bool isSameAlpabetinString(string str) {
bool alpabets[26] = {false};
int count = 0;
for (char ch : str) {
int i = ch - 'a';
if (!alpabets[i]) {
alpabets[i] = true;
count++;
if (count >= 2)
return true;
}
}
return false;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string word;
cin >> word;
if (isSameAlpabetinString(word))
cout << "Yes";
else
cout << "No";
return 0;
}
코드 설명
isSameAlpabetinString 함수를 정의하여, 문자열에 2개 이상의 알파벳이 있는지 확인한다.
먼저 범위 기반 for 문을 이용하여 길이가 26인 알파벳 배열을 돈다.
인덱스 i는 ch에서 a를 빼므로, 아스키코드 간 뺄셈을 통해 알파벳 배열의 해당 문자 자리에 저장된다.
ex. ch가 a일 경우, 빼면 0이므로 배열의 첫번째 자리(a, b,c...중 a 자리), 즉 alphabets[0] 자리에 저장된다.
저장 시, 만약 해당 문자 자리가 false라면 true로 바꿔주고 count를 증가시킨다.
반대로 같은 문자열이 이미 저장되어 있다면 if문을 통과하지 못하므로 count가 증가하지 않을 것이다.
(=같은 문자가 여러번 나와도 한 번만 저장하기 위해 이렇게 구현한다.)
최종적으로 count가 2개 이상인 문자가 있다면 true를 리턴한다.
문제 출처:
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
'PS' 카테고리의 다른 글
코드트리: 큰 숫자 자리수의 합 (0) | 2024.05.28 |
---|---|
코드트리: 재귀함수의 꽃 (0) | 2024.05.18 |
코드트리: 함수를 이용한 연속부분수열 여부 판단하기 (0) | 2024.05.06 |
백준 2869번: 달팽이는 올라가고 싶다 (0) | 2024.05.03 |
백준 1259번: 팰린드롬수 (0) | 2024.04.29 |