문제 https://www.acmicpc.net/problem/1244
풀이
정답 비율이 낮아서 지레 겁먹었는데 그냥 차근차근 풀면 되는 문제이다. 정답 비율이 낮은 것은 출력 조건까지 읽지 않은 사람이 많아서 인 것 같다.. 한 줄에 20개만 출력해야 한다는 조건이 있어서 그 조건도 출력할 때 고려해줘야 한다.
대단한 알고리즘이 필요한 문제는 아니고 그냥 1이 입력되면(남학생이면) 뒤에 입력받은 수의 배수들을 돌면서 값을 바꿔주고, 2가 입력되면(여학생이면) 앞뒤 배열을 살펴보며 대칭일 경우에 값을 바꿔주면 된다.
코드
#include <iostream>
using namespace std;
bool arr[100];
void change(int index)
{
if(arr[index]==true) arr[index]=false;
else arr[index] = true;
}
int main()
{
int n;
cin>>n;
for(int i=0; i<n; i++)
{
int a;
cin>>a;
arr[i]=a;
}
int mem;
cin>>mem;
for(int i=0; i<mem; i++)
{
int a,b;
cin>>a>>b;
if(a==1)
{
for(int j=b; j<=n; j++)
{
if(j%b==0) change(j-1);
}
}
else
{
change(b-1);
int left = b-2; //(b-1)-1
int right = b; //(b-1)+1
while(1)
{
if(left<0 || right>=n) break;
if(arr[left]==arr[right])
{
change(left);
change(right);
}
else break;
left--;
right++;
}
}
}
for(int i=0; i<n; i++)
{
if(i!=0 && i%20==0) cout<<'\n';
cout<<arr[i]<<" ";
}
}
'알고리즘 > 문제 풀이' 카테고리의 다른 글
백준 2776 - 암기왕(C++) (0) | 2022.06.25 |
---|---|
백준 8979 - 올림픽(C++) (0) | 2022.06.23 |
백준 2178 - 미로 탐색(C++) (0) | 2022.06.20 |
백준 4963 - 섬의 개수(C++) (0) | 2022.06.19 |
프로그래머스 - 전화번호 목록(c++) (0) | 2022.06.17 |