[ 백준 ] 1244 / 스위치 켜고 끄기

金弘均·2021년 9월 15일
0

Baekjoon Online Judge

목록 보기
40/228
post-thumbnail

# Appreciation

/*
 * Problem :: 1244 / 스위치 켜고 끄기
 *
 * Kind :: Simulation
 *
 * Insight
 * - 구현 문제인데 딱히 인사이트가 필요한 문제는 아닌 것 같다
 *   문제 설명을 잘 읽고 시키는 대로 잘하자
 *
 * Point
 * - 남학생은 for 문을 활용해서
 *   여학생은 while 문을 활용했다
 *   + 남학생을 while 문, 여학생을 for 문으로 구현해도 상관없다
 *     for 문, while 문 문법 배웠을 때 응용문제로 내면 딱 좋을 듯 하다
 *
 * - 스위치가 켜졌다면 true, 꺼졌다면 false 로 생각했다
 *   + 켜진 스위치를 끄고, 꺼진 스위치를 끌때
 *     굳이 각 케이스별로 if 문을 쓰고 싶지 않아서
 *     ^= 로 다루어주었다
 *     # true ^ true = false (켜진 스위치 끄기)
 *       false ^ true = true (꺼진 스위치 켜기)
 *
 * - 출력 조건(한 줄에 20개씩 출력)을 빠뜨리지 말자
 */

# Code

//
//  BOJ
//  ver.C++
//
//  Created by GGlifer
//
//  Open Source

#include <iostream>

using namespace std;

#define endl '\n'

// Set up : Global Variables
/* None */

// Set up : Functions Declaration
/* None */


int main()
{
    // Set up : I/O
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    // Set up : Input
    int N; cin >> N;
    bool S[N+1];
    for (int i=1; i<=N; i++)
        cin >> S[i];

    // Process
    int M; cin >> M;
    for (int i=0; i<M; i++) {
        int type, n;
        cin >> type >> n;

        if (type == 1) { /* 남학생 */
            for (int j=n; j<=N; j+=n) {
                S[j] ^= true;
            }
        }
        if (type == 2) { /* 여학생 */
            int j = 0;
            while (n-j >= 1 && n+j <= N && S[n-j] == S[n+j]) {
                S[n-j] = S[n+j] ^= true;
                j++;
            }
        }
    }

    // Control : Output
    for (int i=1; i<=N; i++) {
        cout << ((S[i]) ? 1 : 0);
        /* 출력 조건 : 한 줄에 20개씩 출력 */
        cout << ((i%20) ? ' ' : endl);
    }
}

// Helper Functions
/* None */
profile
이런 미친 게임을 봤나! - 옥냥이

0개의 댓글