알고리즘 풀이

[C#] 백준 1244번 문제풀이

bimtaeur30 2026. 3. 6. 23:08

문제번호: 1244

문제명: 스위치 켜고 끄기

문제링크: https://www.acmicpc.net/problem/1244

문제내용과 예제 입/출력은 위 문제 링크에서 확인해 주시기 바랍니다

오늘은 구현문제를 풀었습니다. 남학생의 경우 스위치 상태를 바꾸는 조건은 스위치를 순회하며 스위치 순서 번호가 입력숫자로 나누어떨어진다면 상태를 바꾸도록 하였습니다.
여자의 경우가 남자의 경우보단 더 까다로웠습니다. 두 포인터를 사용하여 while문으로 순회하며 포인터를 양쪽으로 이동시키고 last포인터 변수를 이용하여 포인터위치를 저장시켰습니다. 그렇게 순회가 끝나고 마지막으로 선택된 범위들의 상태를 바꿔주었습니다.
이번 문제를 풀면서 XOR연산을 처음 써보았습니다(^). 스위치의 상태를 바꿀 때 switches[j] ^= 1; 와 같이 토글기능을 구현할 수 있었습니다.
다음은 정답코드입니다.

public static void Main()
{
    using StreamReader sr = new StreamReader(Console.OpenStandardInput());
    using StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());

    int N = int.Parse(sr.ReadLine());
    int[] switches = Array.ConvertAll(sr.ReadLine().Split(), int.Parse);
    int studentCount = int.Parse(sr.ReadLine());
    for (int i = 0; i < studentCount; i++)
    {
        int[] input = Array.ConvertAll(sr.ReadLine().Split(), int.Parse);
        int gender = input[0];
        int number = input[1];

        if (gender == 1) // 남자
        {
            for (int j = 0; j < switches.Length; j++)
            {
                if ((j + 1) % number == 0)
                {
                    switches[j] ^= 1;
                }
            }
        } 
        else if (gender == 2) // 여자
        {
            int center = number - 1;
            int left = center - 1;
            int right = center + 1;

            int left_lp = center;
            int right_lp = center;

            while (left >= 0 && right < switches.Length && switches[left] == switches[right])
            {
                left_lp = left;
                right_lp = right;

                left--;
                right++;

            }


            for (int j = left_lp; j <= right_lp; j++)
            {
                switches[j] ^= 1;
            }
        }
    }

    int writeCount = 0;
    foreach(int n in switches)
    {
        if (writeCount == 20)
        {
            writeCount = 0;
            sw.WriteLine();
        }
        sw.Write(n + " ");
        writeCount++;
    }
}

 

'알고리즘 풀이' 카테고리의 다른 글

[C#] 백준 30088번 문제풀이  (1) 2026.03.09
[C#] 백준 11660번 문제풀이  (0) 2026.03.07
[C#] 백준 1916번 문제풀이  (0) 2026.03.05
[C#] 백준 18185번 문제풀이  (2) 2026.03.04
[C#] 백준 11004번 문제풀이  (0) 2026.03.03