백준: Silver⑦ - 1213, 1235, 1244, 1302
</br>
이제 실버 4에서 계속 풀이
</br>
1213: 팰린드롬 만들기
https://www.acmicpc.net/problem/1213
문자열 받으면 그거로 팰린드롬 만들기
for(int i = 0; i < s.size(); i++){
alphabets[s[i]-'A']++;
}
string ans = "";
char mid = '1';
for(int i = 0; i < 26; i++){
ans.append(alphabets[i]/2, i+'A');
if( alphabets[i] % 2 ){
if( mid != '1' ){
cout << "I'm Sorry Hansoo" << endl;
return 0;
}
mid = i + 'A';
}
}
string rev = ans;
reverse(rev.begin(), rev.end());
if( mid != '1' ) ans.append(1, mid);
ans.append(rev);
cout << ans << endl;
문자마다 몇 개 있는지 alphabets[]
에 저장한다.
사전순으로 앞서야 하므로, ‘A’부터 검사한다.
만약 ‘A’가 2k개 있다면 좌우에 k개씩 있으면 되므로 k개 넣는다.
그런데 만약 ‘A’가 2k + 1개 있다면, 좌우로 두고 남은 하나는 반드시 단어의 가운데에 있어야 한다.
만약 가운데에 있어야 할 문자가 두 개 이상 나오면 팰린드롬을 만들지 못하므로 return 한다.
마지막에 반대쪽도 거꾸로 복붙해 주면 끝
</br>
1235: 학생 번호
https://www.acmcpc.net/problem/1235
최소한 자리수로 구별되게 하기
for(int i = 1; i < v[0].size()+1; i++){
set<string> s;
for(int j = 0; j < n; j++){
s.insert(v[j].substr(v[j].size()-i, v[j].size()));
}
if( s.size() == v.size() ){
cout << i << endl;
break;
}
}
set은 중복 요소를 없애 주니까, 그냥 set에다가 다 넣어주고 원래 사이즈와 같다면 구별된다는 뜻일 거다.
</br>
1244: 스위치 켜고 끄기
https://www.acmcpc.net/problem/1244
규칙에 따라 스위치 켜고 끄기
for(int i = 0; i < m; i++){
int a, b;
cin >> a >> b;
if( a == 1 ){
for(int j = 1; j*b < n+1; j++){
sw[j*b] = 1 - sw[j*b];
}
}
else{
sw[b] = 1 - sw[b];
for(int j = 1; b+j < n+1 && b-j > 0; j++){
if( sw[b+j] == sw[b-j] ){
sw[b+j] = 1 - sw[b+j];
sw[b-j] = 1 - sw[b-j];
}
else break;
}
}
}
for(int i = 1; i < n+1; i++){
cout << sw[i] << ' ';
if( i % 20 == 0 ) cout << endl;
}
cout << endl;
인덱스를 실수해서 얘만 한 방에 맞추기 실패했다…ㅜㅜ
심지어 출처 보니까 정보올림피아드 초등부 문제라는데…
아무튼 구현 자체는 그냥 하면 된다
</br>
1302: 베스트셀러
https://www.acmicpc.net/problem/1302
제일 많이 나온 제목 구하기
for(int i = 0; i < n; i++){
string s;
cin >> s;
if( m.count(s) ) m[s]++;
else m.insert(pair<string, int>(s, 1));
}
string ans;
int cnt = 0;
for(auto it = m.begin(); it != m.end(); it++){
if( it->second > cnt ){
ans = it->first;
cnt = it->second;
}
else if( it->second == cnt && ans > it->first ){
ans = it->first;
}
}
cout << ans << endl;
map에다가 나올 때마다 횟수 추가해서 구해주기
</br>
콤보가 깨졌다 아쉽구만
</br>
댓글남기기