[BOJ 28358] 생일 맞추기
2023. 7. 22. 19:30ㆍBaekjoon/제 7회 천하제일 코딩대회 본선
728x90
https://www.acmicpc.net/problem/28358
- 문제 요약
많은 사람이 아이디를 지을 때 생일과 관련된 숫자를 넣지만, 찬우의 아이디에서 등장하는 숫자는 태어난 달이나 태어난 일에 등장하는 숫자들과 하나도 겹치지 않는다.
찬우의 아이디에 어떤 숫자가 포함되어 있는지 주어지면, 찬우의 생일이 될 수 있는 날짜의 수를 구해보자.
찬우가 태어난 해는 윤년이다.
즉, 찬우의 생일은 월 일이 될 수도 있다.
또한 태어난 달이나 일이 한 자리라면 십의 자리는 빈칸으로 생각한다.
따라서 찬우의 생일이 월 일이라면 생일에 이 등장하지 않는 것이고, 월 일 또는 월 일이라면 생일에 이 등장하는 것이다.
첫째 줄에 테스트 케이스의 수 가 주어진다. (1≤T≤1234)
둘째 줄부터 개의 줄에 걸쳐 한 줄에 하나씩 테스트 케이스가 주어진다.
각 줄에는 개의 정수가 공백으로 구분되어 주어진다.
해당 테스트 케이스에서 이 찬우의 아이디에 등장한다면 번째 정수는 , 등장하지 않는다면 이다. (1≤i≤10)
- 알고리즘 정리
테스트 케이스의 수가 그리 많지 않으므로 1월 1일부터 12월 31일까지 브루트포스를 돌려줍니다.
1월부터 12월의 일수를 담아놓은 배열인 M[]을 만들고, 반복문을 돌리면서 월 또는 일에 0이 들어가는지를 확인해 주면 쉽게 문제를 해결할 수 있습니다.
- 코드 작성
#include<bits/stdc++.h>
using namespace std;
#define MAX 10
int t,arr[MAX],M[13]={0,31,29,31,30,31,30,31,31,30,31,30,31},cnt;
bool f(int x){
for(int i=0;i<10;i++){
if(arr[i]&&to_string(x).find(i+'0')!=string::npos){
return false;
}
}
return true;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin>>t;
while(t--){
cnt=0;
for(int i=0;i<10;i++){
cin>>arr[i];
}
for(int i=1;i<=12;i++){
for(int j=1;j<=M[i];j++){
if(f(i)&&f(j)){
cnt++;
}
}
}
cout<<cnt<<'\n';
}
}
728x90
'Baekjoon > 제 7회 천하제일 코딩대회 본선' 카테고리의 다른 글
[BOJ 28360] 양동이 게임 (0) | 2023.07.23 |
---|---|
[BOJ 28357] 사탕 나눠주기 (0) | 2023.07.22 |
[BOJ 28359] 수열의 가치 (0) | 2023.07.22 |
[BOJ 28356] 부정행위 멈춰! (0) | 2023.07.21 |
[BOJ 28361] 크리스마스 (0) | 2023.07.21 |