백준: Silver④ - 1427, 1436, 1439, 1475
</br>
계속 풀이
</br>
1427: 소트인사이드
https://www.acmicpc.net/problem/1427
수의 각 자리수를 정렬하기
string n;
cin >> n;
sort(n.begin(), n.end(), greater<>());
cout << n << endl;
c++엔 너무 좋은 함수가 있어요
</br>
1436: 영화감독 숌
https://www.acmcpc.net/problem/1436
666이 들어가는 n번째로 큰 수 구하기
int cnt = 0;
string ans;
for(int i = 666; cnt < n; i++){
ans = to_string(i);
for(int j = 0; j < ans.size()-2; j++){
if( ans[j] == '6' && ans[j+1] == '6' && ans[j+2] == '6' ){
cnt++;
break;
}
}
}
cout << ans << endl;
그냥 1씩 늘리면서 666 있는 지 확인하니까 시간도 널널하고 바로 통과
</br>
1439: 뒤집기
https://www.acmcpc.net/problem/1439
1100111 같은 거 뭉탱이로 뒤집어서 다 똑같이 만들기 ex) 1100111 -> 00 뒤집기 -> 1111111
s += s[s.size()-1];
int cnt0 = 0, cnt1 = 0;
for(int i = 0; i < s.size(); i++){
if( s[i] != s[i+1] ){
if( s[i] == '0' ) cnt0++;
else cnt1++;
}
}
cout << min(cnt0, cnt1) << endl;
이것도 벌써 세 번째 같은데 0과 1이므로 한 번만 뒤집어 준다
0의 덩어리 개수와 1의 덩어리 개수를 세고, 적은 쪽을 뒤집어 주면 된다.
</br>
1475: 방 번호
https://www.acmicpc.net/problem/1475
숫자 세트(0~9)를 사서 방 번호 만들기, 6과 9는 혼용 가능
for(int i = 0; i < s.size(); i++){
numset[s[i]-'0']++;
}
numset[6] += numset[9];
numset[6] = (numset[6]+1) / 2;
int ans = 1;
for(int i = 0; i < 9; i++){
ans = max(ans, numset[i]);
}
cout << ans << endl;
numset[]
에 각 숫자마다 개수를 저장한다.
6에 9의 개수까지 더하고, 이를 2로 나눈 것을 1을 더하여 저장한다.
numset[]
에서 가장 큰 것을 찾으면 그 만큼 숫자세트가 필요하다는 뜻이므로 출력해 준다. 생각해 보니까 max_element()
를 왜 안 썼지
</br>
난이도가 너무 쉬운 건지 좀 실력이 나아진 건지 한 방에 잘 통과한다
</br>
댓글남기기