쓰레기의 종류들을 문자열로 받고 쓰레기의 비용을 계산하여 최대한 쓰레기의 분리 배출 비용을 적게 했을때의 비용을 출력하는 문제이다.
#include <iostream> //c++
#include <stdio.h> //c
#include <vector> //c++ 배열
#include <algorithm> // 탐색, 정렬 등 알고리즘
#include <utility> //
#include <string>
#include <cmath>
#include <set>
#include <map>
#include <stack>
#define fio ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); // input, output 빠르게 하는 거
#define ll long long // long long이 너무 기니까 ll로 줄여요
#define pii pair<int,int> // pair<int,int>가 너무 길어요 그래서 pii로 줄여요
#define pll pair<ll,ll> // pair<long long, long long> 이 너어어어무 길어요. 그래서 pll로 줄여요
#define MOD 1e9+7 // 모듈러 계산할 때 쓰이는 값, 근데 문제마다 바뀌니까 알아서 바꾸세요
using namespace std;
int main()
{
fio;
ll n;
cin>>n;
string a[n];
int b[n];
ll sum=0;
int con=0;
for(ll i=0;i<n;i++)
{
con=0;
cin>>a[i];
for(ll j=0;j<a[i].size();j++)
{
if(a[i][0]!=a[i][j] || a[i][j]=='O')
{
con++;
b[i]=6;
//cout<<"걸렸다!"<<"\\n";
break;
}
}
if(con==0)
{
//cout<<"안걸렸다..";
if(a[i][0]=='P')
{
//cout<<"P"<<"\\n";
b[i]=0;
}
if(a[i][0]=='C')
{
//cout<<"C"<<"\\n";
b[i]=1;
}
if(a[i][0]=='V')
{
//cout<<"V"<<"\\n";
b[i]=2;
}
if(a[i][0]=='S')
{
//cout<<"S"<<"\\n";
b[i]=3;
}
if(a[i][0]=='G')
{
//cout<<"G"<<"\\n";
b[i]=4;
}
if(a[i][0]=='F')
{
//cout<<"F"<<"\\n";
b[i]=5;
}
}
}
ll recycle[7];
for(int i=0;i<7;i++)
{
cin>>recycle[i];
//cout<<recycle[i]<<"\\n";
}
for(ll i=0;i<n;i++)
{
if(recycle[b[i]]>recycle[6])
{
sum+=recycle[6]*a[i].size();
continue;
}
sum+=recycle[b[i]]*a[i].size();
}
cout<<sum;
}
쓰레기들을 문자열들로 받고 각각의 문자열을 하나하나 탐색하면서 모든 쓰레기의 원소가 같지 않거나 ‘O’ 가 포함되어 있으면 그 쓰레기는 일반 쓰레기의 계산을 하게한후 sum에 더한다. 만약 일반 쓰레기가 아닐 경우 일반 쓰레기로서의 계산값과 해당 원소로서의 계산값을 서로 비교한 뒤 더 작은 값을 sum에 더한다. 마지막에 최종 sum의 값을 출력하는 방법이다.
문자열을 받고 그 문자열의 같은 문자 사이에 다른 문자가 껴있는 경우가 있는 지 여부를 판단하는 문제이다.
#include <iostream> //c++
#include <stdio.h> //c
#include <vector> //c++ 배열
#include <algorithm> // 탐색, 정렬 등 알고리즘
#include <utility> //
#include <string>
#include <cmath>
#include <set>
#include <map>
#define fio ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); // input, output 빠르게 하는 거
#define ll long long // long long이 너무 기니까 ll로 줄여요
#define pii pair<int,int> // pair<int,int>가 너무 길어요 그래서 pii로 줄여요
#define pll pair<ll,ll> // pair<long long, long long> 이 너어어어무 길어요. 그래서 pll로 줄여요
#define MOD 1e9+7 // 모듈러 계산할 때 쓰이는 값, 근데 문제마다 바뀌니까 알아서 바꾸세요
using namespace std;
int main()
{
int a;
cin>>a;
int result=0;
for(int i=0;i<a;i++)
{
string x;
cin>>x;
int y[124]={0,};
int con=0;
for(int j=0;j<x.size();j++)
{
int rep=1;
if(y[x[j]]!=0)
{
con++;
}
//만약 y 배열을 통해 겹치는 수를 발견할 경우 con에 1추가
while(rep)
{
y[x[j]]++;
if(x[j]==x[j+1])
{
rep=1;
j++;
}
else rep=0;
}
//연속된 문자가 다 나올때까지 y배열에 저장
}
if(con==0) result++;
//con이 0이면 result에 값 1 추가
}
cout<<result;
}
문자열을 하나하나 탐색하면서 y배열에 연속하여 그 문자가 얼마나 있는지 저장하고 매 순간 문자를 만날 때마다 y배열에 이미 한 번 저장했던 문자인지 여부를 판단하고 만약 그럴 경우 최종 result에 값 1이 추가 되지 않도록 하는 방법이다.
n개의 숫자를 입력 받아서 n개의 숫자를 이용해 짝을 지었을 때 짝의 합이 x를 만족하는 짝의 개수를 세는 문제이다.