문제링크 : https://www.acmicpc.net/problem/28238
28238번: 정보 선생님의 야망
송도고의 정보 선생님, 박상진 선생님은 송도고를 코딩을 좋아하는 친구라면 누구든지 들어오고 싶어 하는 명성이 자자한 학교로 만들고자 하는 야망이 있다. 박상진 선생님은 이를 위해 주 $2$
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;
int arr[1000001][5];
int cnt, maxV = -1;
int idx[5];
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
for(int i=0; i<N; i++)
{
for(int j=0; j<5; j++)
{
cin >> arr[i][j];
}
}
for(int i=0; i<4; i++)
{
for(int j=i+1; j<5; j++)
{
cnt = 0;
for(int k=0; k<N; k++)
{
if(arr[k][i] && arr[k][j]) cnt++; //2열씩 체크 후 카운팅
}
if(maxV < cnt)
{
memset(idx, 0, sizeof(idx));
maxV = cnt; //최댓값 저장
idx[i]=1; //첫번째 위치 저장
idx[j]=1; //두번째 위치저장
}
}
}
cout << maxV << "\n";
for(int i=0; i<5; i++)
{
cout << (idx[i]==1 ? 1 : 0) << " "; //앞에서 저장한 위치면 1출력 이외엔 0출력
}
return 0;
}
열을 기준으로 현재 열과 그 다음에 올 수 있는 열의 값을 확인하여 둘다 1인 경우를 카운팅한다.
이렇게 카운팅한 값이 최대일때 해당 첫번째 열의 위치값과 두번째 열의 위치값을 각각 저장해준다.
이후 반복문을 돌려서 해당 위치값에 해당하면 1을 아니면 0을 출력해준다.
이 문제에서 주의해야 할 것은 최대값을 저장하는 변수를 처음에 0보다 낮은 값으로 해줘야한다.
왜냐하면 최대값이 0이 될 수도 있기 때문에 최대값을 저장하는 변수가 0이면 최대값이 0일때 열의 위치값을 저장하지 않아서 틀린 답이 되어버린다.
나도 이때문에 계속 틀리다가 해당 문제의 질문게시판을 보고 왜 틀린지 알 수 있게 되었다.
'백준 > 실버' 카테고리의 다른 글
[백준 28250번] 이브, 프시케 그리고 푸른 MEX의 아내 (C++) (0) | 2023.07.25 |
---|---|
[백준 28324번] 스케이트 연습 (C++) (0) | 2023.07.24 |
[백준 9656번] 돌 게임 2 (C++) (0) | 2023.07.22 |
[백준 13301번] 타일 장식물 (C++) (0) | 2023.07.21 |
[백준 13699번] 점화식 (C++) (0) | 2023.07.20 |