[ BOJ / C++ ] 1244번 스위치 끄기

황승환·2021년 8월 9일
0

C++

목록 보기
31/65

이번 문제는 특별한 알고리즘을 사용하지 않고 구현하는 문제였다. 남학생일 경우는 쉽게 구현할 수 있었지만 여학생인 경우가 조금 어려웠다.

  • 남학생인 경우 인덱스가 받은 수의 배수인 경우의 스위치의 상태를 바꾸므로 for문 안에 %를 사용하여 스위치 상태를 바꾼다.
  • 여학생인 경우 while문의 조건으로 주어진 범위를 벗어나지 않고 받은 인덱스 k에서 j만큼 뺀 경우의 수와 j만큼 큰 경우의 수가 같을 때로 준다.
  • while문 조건에 만족한다면 스위치 상태를 바꿔주고 j를 ++해준다.

Code

#include <iostream>
#define MAX 101
using namespace std;

int n;
bool swtch[MAX];
int num;
int s, k;

void Input(){
    cin>>n;
    for(int i=1; i<=n; i++){
        cin>>swtch[i];
    }
}


void Solution(){
    if(s==1){
        for(int j=1; j<=n; j++){
            if(j%k==0){
                swtch[j]=!swtch[j];
            }
        }
    }
    if(s==2){
        int j=0;
        while (k-j>=1&&k+j<=n&&swtch[k-j]==swtch[k+j]) {
            swtch[k-j]=swtch[k+j] = !swtch[k-j];
            j++;
        }
    }
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    Input();
    cin>>num;
    for(int m=0; m<num; m++){
        cin>>s>>k;
        Solution();
    }
    for(int i=1; i<=n; i++){
        if(swtch[i])
            cout<<1<<' ';
        else if(!swtch[i])
            cout<<0<<' ';
        if(i%20==0)
            cout<<endl;
    }
    cout<<endl;
    return 0;
}

한 줄에 20개씩만 호출하는 조건을 빼먹어서 출력형식 오류가 발생했고 이를 설정하고 난 뒤에는 정답 처리 되었다.

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글