본문 바로가기
코테

백준 1157번 - 단어 공부

by arirang_ 2023. 7. 28.

처음에 짠 코드

- 시간 초과다...

#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