처음에 짠 코드
- 시간 초과다...
#include <bits/stdc++.h>
using namespace std;
string s;
int maxCnt=0, cnt=0;
char tmp;
int main(){
cin >> s;
for(int i=0; i<s.size(); i++){
for(int j=i; j<s.size(); j++){
if(s[i] == s[j] || (abs)(s[i]-s[j]) ==32){
cnt++;
}
}
if(maxCnt < cnt){
maxCnt=cnt; tmp=s[i]; cnt=0;
}else if(maxCnt == cnt) {
tmp='?'; cnt=0;
}else{
cnt=0;
}
}
cout << (char)toupper(tmp);
return 0;
}
map을 이용해서 다시 풀어 봤다.
다시 푼 풀이
- map 이용 (key - value)
#include <bits/stdc++.h>
using namespace std;
string s;
char c[1000003];
map<char, int> mp;
int maxCnt=0;
char result;
int main(){
cin >> s;
//1
for(int i=0; i<s.size(); i++){
c[i] = (char)toupper(s[i]);
//맵에 넣고 value 증가
mp[c[i]]++;
}
//2
for(auto it : mp){
if(it.second > maxCnt){
maxCnt = it.second;
result = it.first;
}else if(it.second == maxCnt) result='?';
}
cout << result;
return 0;
}
//1
* 대소문자를 구분하지 않는다고 했으니, toupper를 이용해서 모든 문자를 대문자로 만들어준다.
- toupper은 int형으로 표현된 아스키코드 값이 반환되므로 char형으로 바꿔주어야 한다.
* mp[c[i]]++ 로 키-값쌍을 저장하고 ++로 키의 값을 1씩 증가시킨다.
▶ 여기까지 하면 모든 문자의 갯수를 다 센 것이다.
//2
* map을 순회하면서 map의 키 값을 maxCnt와 비교한다.
map의 키의 값이 maxCnt의 값보다 크면 maxCnt에 map의 키 값을 넣는다. 이후 그 값의 키를 result에 저장하여 출력한다.
map의 키의 값이 maxCnt의 값과 같으면 result에 ?를 저장하여 출력한다.
'코테' 카테고리의 다른 글
백준 1173번-운동 (0) | 2023.07.31 |
---|---|
백준 1159번- 농구 경기 (0) | 2023.07.30 |
백준 1110번-사이클 (0) | 2023.07.28 |
백준 1051번- 숫자 정사각형 (0) | 2023.07.27 |
백준 1100번- 하얀 칸 (0) | 2023.07.27 |