백준 1244 스위치 켜고 끄기 / C++

이유참치·2025년 7월 31일

백준

목록 보기
16/249

문제 : 1244

풀이 point

남학생과 여학생의 작동 방식을 구현하면 된다.
남학생은 배수일 때 i%n == 0

여학생은 대칭일 때
for(int i{0}; sw[n-i] === sw[n+i]; ++i)

범위를 벗어날 때를 신경써주면 된다.

풀이 방법

구현은 그렇게 어렵지 않다.
대칭일 때가 구현이 어려울 수 있다.

코드

//백준 1244, 스위치 켜고 끄기

#include <iostream>

int main (){
    int s, p;
    bool sw[101] = {0};

    std::cin >> s;
    for(int i{1}; i<=s; ++i) std::cin >> sw[i];
    std::cin >> p;
    while(p--){
        int se, num;
        std::cin >> se >> num;
        if(se == 1){
            for(int i{1}; i<=s; ++i){
                if(i % num == 0) sw[i] = !sw[i];
            }
        }
        else{
            sw[num] = !sw[num];
            for(int i{1}; sw[num+i] == sw[num-i]; ++i){
                if(num+i > s || num-i < 1) break;
                sw[num+i] = !sw[num+i];
                sw[num-i] = !sw[num-i];
            }
        }
    }

    for(int i{1}; i<=s; ++i){
        std::cout << sw[i] << ' ';
        if(i%20 == 0) std::cout << '\n';
    }

    return 0;
}

사족

여학생일 때 어떻게 구할지 한참 생각하고 답을 봤는데 간단하게 for문을 통해 구할 수 있었다... 자꾸 중심이라는 생각에 for문의 시작을 중심으로 놔야겠다는 생각이 들어 오류를 범한 것 같다.

2025-01-17T00:49:31.974Z

profile
임아리 - 대학생

0개의 댓글