ABC386 문제 분석 및 풀이
A - Full House 2
주어진 네 개의 정수 A, B, C, D에 대해 추가로 하나의 정수 E를 선택하여 3+2 패턴을 만들 수 있는지 판단하는 문제입니다. 가능한 조합은 다음과 같습니다:
- A = B, C = D, 그리고 B ≠ C인 경우
- A = B = C, 그리고 C ≠ D인 경우
정렬 후 비교 로직을 통해 결과를 도출합니다. 아래는 구현 코드입니다:
// Problem: A - Full House 2
// Contest: AtCoder - AtCoder Beginner Contest 386
// URL: https://atcoder.jp/contests/abc386/tasks/abc386_a
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n';
#define rep(n) for(int i = 0;i < (n);i++)
const int N = 1e6 + 10,M = 2e6 + 10;
int a[4];
bool cmp(int x, int y)
{
return x < y;
}
signed main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
for(int i = 0;i < 4;i++)
{
cin >> a[i];
}
sort(a , a + 4 ,cmp);
if(a[0] == a[1] && a[2] == a[3] && a[1] != a[2])
{
cout << "Yes" << endl;
}else if(a[0] == a[1] && a[1] == a[2] && a[2] != a[3])
{
cout << "Yes" << endl;
}else if(a[1] == a[2] && a[2] == a[3] && a[0] != a[1])
{
cout << "Yes" << endl;
}else
{
cout << "No" << endl;
}
return 0;
}
B - Calculator
계산기에서 입력된 숫자 문자열을 최소한의 키 입력으로 표현할 수 있는지를 계산하는 문제입니다. 핵심은 다음과 같습니다:
- '0' 다음에 또 '0'이 오면 '00'으로 처리
- '0'이 단독으로 나타나면 '0'으로 처리
코드는 다음과 같습니다:
// Problem: B - Calculator
// Contest: AtCoder - AtCoder Beginner Contest 386
// URL: https://atcoder.jp/contests/abc386/tasks/abc386_b
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n';
#define rep(n) for(int i = 0;i < (n);i++)
const int N = 1e6 + 10,M = 2e6 + 10;
int cnt;
string s;
signed main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin >> s;
for(int i = 0;i < s.size();i++)
{
if(s[i] != '0')
{
cnt++;
}else if(s[i] == '0')
{
if(i + 1 < s.size())
{
if(s[i + 1] == '0')
{
cnt++;
i++;
}else
{
cnt++;
}
}else
{
cnt++;
}
}
}
cout << cnt << endl;
return 0;
}
C - Operate 1
문자열 간의 차이를 하나만 허용하는지 확인하는 문제로, 두 문자열이 서로 얼마나 다른지를 체크하는 알고리즘을 적용합니다.
구현 방식은 다음과 같습니다:
// Problem: C - Operate 1
// Contest: AtCoder - AtCoder Beginner Contest 386
// URL: https://atcoder.jp/contests/abc386/tasks/abc386_c
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define rep(n) for(int i = 0; i < (n); i++)
const int N = 1e6 + 10, M = 2e6 + 10;
signed main() {
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int k;
string s, t;
cin >> k;
cin >> s >> t;
if (k == 1) {
int len_s = s.size();
int len_t = t.size();
if (abs(len_s - len_t) > 1) {
cout << "No" << endl;
return 0;
}
int diff = 0;
int i = 0, j = 0;
while (i < len_s && j < len_t) {
if (s[i]!= t[j]) {
diff++;
if (diff > 1) {
cout << "No" << endl;
return 0;
}
if (len_s < len_t) {
j++;
} else if (len_s > len_t) {
i++;
} else {
i++;
j++;
}
} else {
i++;
j++;
}
}
if (i < len_s || j < len_t) {
diff++;
}
if (diff <= 1) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
}
return 0;
}