📕 문제
📌 링크
![](https://velog.velcdn.com/images/wowns226/post/6cdb2268-9d55-4026-bc7a-a3372a135994/image.png)
📗 접근 방식
- 남학생의 동작인 경우, 주어진 숫자의 배수 위치에 있는 스위치의 상태를 변경
- 여학생의 동작인 경우, 주어진 숫자를 중심으로 좌우로 스위치의 상태를 변경
좌우로 스위치 상태가 대칭이라면 계속 진행하고, 대칭이 아니면 종료
📘 코드
using System.Text;
namespace BOJ_1244
{
class Program
{
private static int[] switches;
static void Main()
{
int n = int.Parse(Console.ReadLine());
int[] inputs = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
switches = new int[n + 1];
for (int i = 1; i <= n; i++)
{
switches[i] = inputs[i-1];
}
int studentCount = int.Parse(Console.ReadLine());
for (int i = 0; i < studentCount; i++)
{
inputs = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
if (inputs[0] == 1)
{
Male(inputs[1]);
}
else
{
Female(inputs[1]);
}
}
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= n; i++)
{
sb.Append($"{switches[i]} ");
if (i % 20 == 0)
{
sb.AppendLine();
}
}
Console.WriteLine(sb.ToString());
}
static void Change(int index)
{
if (switches[index] == 1)
{
switches[index] = 0;
}
else
{
switches[index] = 1;
}
}
static void Male(int num)
{
int index = num;
for (int i = index; i < switches.Length; i += num)
{
Change(i);
}
}
static void Female(int num)
{
int index = num;
int right = index + 1;
int left = index - 1;
while (right < switches.Length && left >= 1)
{
if (switches[left] != switches[right]) break;
Change(left);
Change(right);
right += 1;
left -= 1;
}
Change(index);
}
}
}
📙 오답노트
- 여자일때의 로직을 잘못 이해하고 구현하였다.
- 출력 형식을 제대로 확인하지 못하고 제출하였다.
📒 알고리즘 분류