본문 바로가기
알고리즘/문제

[백준] 1244. 스위치 켜고 끄기 <C++>

by 코드 이야기 2020. 4. 13.
728x90

www.acmicpc.net/problem/1244

 

1244번: 스위치 켜고 끄기

첫째 줄에는 스위치 개수가 주어진다. 스위치 개수는 100 이하인 양의 정수이다. 둘째 줄에는 각 스위치의 상태가 주어진다. 켜져 있으면 1, 꺼져있으면 0이라고 표시하고 사이에 빈칸이 하나씩

www.acmicpc.net

 

 

#include <iostream>
using namespace std;

int main() {
  int n, arr[101], std, g, y, i, k;

  cin>>n;  //스위치의 개수 입력 받기

  for(i=1; i<=n; i++)
  {
    cin>>arr[i];  //스위치의 상태 입력 받기
  }

  cin>>std;   //학생 수 입력 받기
  for(k=0; k<std; k++)
  {
    cin>>g>>y;  //학생의 성별, 번호 입력

    if(g==1)  //남학생일 때
    {
      for(i=1; i<=n; i++)
      {
        if(i%y==0)  //배수일 때
          arr[i]=!arr[i];  //스위치의 상태를 바꾼다.
      }
    }

    else  //여학생일 때
    {
      arr[y]=!arr[y];  //우선 자기자신(중심)의 상태를 바꾼다.
      for(i=1; arr[y+i] == arr[y-i]; i++)  // <x o x> || <x가 같다면 실행> 
      {
        if(y+i>n || y-i<1)  //인덱스가 벗어나면 멈춘다.
          break;
        arr[y+i]=!arr[y+i];   //뒤집
        arr[y-i]=!arr[y-i];   //뒤집
      }
    }
  }

  for(i=1; i<=n; i++)  
  {
    cout<<arr[i]<<" ";
    if(i%20==0)  //20개의 숫자를 출력했다면 줄바꾸기
      cout<<"\n";
  }

}
728x90

댓글