[BOJ][C#] 1244 스위치 켜고 끄기

LimJaeJun·2023년 11월 6일
0

PS/BOJ

목록 보기
37/108

📕 문제

📌 링크

📗 접근 방식

  1. 남학생의 동작인 경우, 주어진 숫자의 배수 위치에 있는 스위치의 상태를 변경
  2. 여학생의 동작인 경우, 주어진 숫자를 중심으로 좌우로 스위치의 상태를 변경
    좌우로 스위치 상태가 대칭이라면 계속 진행하고, 대칭이 아니면 종료

📘 코드

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);
        }
    }
}

📙 오답노트

  1. 여자일때의 로직을 잘못 이해하고 구현하였다.
  2. 출력 형식을 제대로 확인하지 못하고 제출하였다.

📒 알고리즘 분류

  • 구현
  • 시뮬레이션
profile
Dreams Come True

0개의 댓글

관련 채용 정보