백준: Silver③ - 1343, 1359, 1388, 1417
</br>
계속 풀이
</br>
1343: 폴리오미노
https://www.acmicpc.net/problem/1343
XX.XXXXXXXXXX…XXXXXX 같은 거 BB.AAAAAAAABB…AAAABB 처럼 채우기
s += '.';
vector<int> v;
int prev = -1;
for(int i = 0; i < s.size(); i++){
if( s[i] == '.' ){
int cnt = i-prev-1;
if( cnt != 0 ){
if( cnt % 2 != 0 ){
cout << -1 << endl;
return 0;
}
v.push_back(cnt);
}
prev = i;
}
}
int ind = 0;
for(int i = 0; i < s.size()-1; i++){
if( s[i] == '.' ){
cout << '.';
continue;
}
int Xs = v[ind++];
i += Xs-1;
while( Xs ){
if( Xs/4 ){
cout << "AAAA";
Xs -= 4;
}
else{
cout << "BB";
Xs -= 2;
}
}
}
XX 덩어리들을 나눠서 저장한다. 저장할 때 그 크기가 2로 나누어 떨어지지 않는다면 -1을 출력하고 바로 끝낸다.
이후 출력할 때, XX 덩어리의 크기에 따라 AAAA를 최대한 채우고 BB를 출력한다.
</br>
1359: 복권
https://www.acmcpc.net/problem/1359
n개 중에 m개 골라서 k개가 같으면 당첨
int p = comb(n, m);
int c = 0;
while( m >= k ){
if( n-m < m-k ){
k++;
continue;
}
c += comb(m, k) * comb(n-m, m-k);
k++;
}
cout << (double)c / (double)p << endl;
(m개 중 k개 고르기) * (n-m개 중 m-k개 고르기)의 합 / (n개 중 m개 고르기)
k일 때, k+1일 때, … 를 다 더해 주면 된다.
</br>
1388: 바닥 장식
https://www.acmcpc.net/problem/1388
장판 몇 갠지 세기
for(int i = 0; i < n; i++){
string s;
cin >> s;
for(int j = 0; j < m; j++){
if( s[j] == '-' ) mmap[i][j] = 0;
else mmap[i][j] = 1;
}
}
int cnt = 0;
for(int i = 0; i < n; i++){
for(int j = 0; j < m-1; j++){
if( mmap[i][j] == 0 && mmap[i][j+1] == 1 ) cnt++;
}
if( mmap[i][m-1] == 0 ) cnt++;
}
for(int i = 0; i < m; i++){
for(int j = 0; j < n-1; j++){
if( mmap[j][i] == 1 && mmap[j+1][i] == 0 ) cnt++;
}
if( mmap[n-1][i] == 1 ) cnt++;
}
cout << cnt << endl;
가로 방향으로 확인하면서, 만약 세로 장판을 만난다면 카운트를 증가한다.
마찬가지로 세로 방향으로 확인하면서, 만약 가로 장판을 만난다면 카운트를 증가했다.
</br>
1417: 국회의원 선거
https://www.acmicpc.net/problem/1417
매수해서 내가 표 제일 많이 얻기
priority_queue<int, vector<int>, less<int>> pq;
int n;
cin >> n;
int ds;
cin >> ds;
for(int i = 1; i < n; i++){
int a;
cin >> a;
pq.push(a);
}
if( pq.size() == 0 ){
cout << 0 << endl;
return 0;
}
int cnt = 0;
while( ds <= pq.top() ){
int t = pq.top();
pq.pop();
cnt++;
ds++;
pq.push(t-1);
}
cout <<cnt << endl;
다솜이의 점수를 따로 저장하고, 나머지는 우선순위 큐에 넣는다.
한 표 씩 매수하면서, 만약 우선순위 큐의 맨 앞보다 다솜이가 더 크다면 매수를 종료한다.
</br>
재밌다 재밌어
이제 좀 한 방에 맞추기 시작한다
</br>
댓글남기기