반응형
문제를 읽어보다가 원형 테이블이 생각이 나서 Deque를 사용해서 풀어야겠다는 생각이 들었다!
01 회전 함수
C#은 Library에 deque를 가져와서 사용할 수가 없다. 그래서 List를 이용해서 구현하였다.
반시계 방향(== -1)인 경우 왼쪽으로 이동시키도록 하고 시계 방향(==1)인 경우 오른쪽으로 이동시켰다.
public static void turn(ref List<string> list, int dir)
{
if (dir == -1)
{
string first = list[0];
list.RemoveAt(0);
list.Add(first);
}
else
{
string last = list[list.Count - 1];
list.RemoveAt(list.Count - 1);
list.Insert(0, last);
}
}
02 양옆이 다른지 확인
public static bool check(List<string> left,List<string> right)
{
return left[2] != right[right.Count - 2];
}
03 언제 양옆이 다른지 확인하는지 확인
문제를 똑바로 안읽어서 톱니바퀴를 회전하고 양옆을 확인하는 줄 알았다.. 하핳.. 문제를 꼼꼼히 읽는게 정말정말 중요하다! 먼저 양옆을 확인하므로 양옆을 모두 확인한 후 톱니바퀴를 돌려준다.
case 1:
if (check(list1, list2))
{
if (check(list2, list3))
{
if (check(list3, list4)) turn(ref list4, -dir);
turn(ref list3, dir);
}
turn(ref list2, -dir);
}
turn(ref list1, dir);
break;
코드 전문
using System.Collections.Generic;
using System;
class Solution
{
public static void turn(ref List<string> list, int dir)
{
if (dir == -1)
{
string first = list[0];
list.RemoveAt(0);
list.Add(first);
}
else
{
string last = list[list.Count - 1];
list.RemoveAt(list.Count - 1);
list.Insert(0, last);
}
}
public static bool check(List<string> left,List<string> right)
{
return left[2] != right[right.Count - 2];
}
public static void Main(string[] args)
{
string list1_array = Console.ReadLine();
string list2_array = Console.ReadLine();
string list3_array = Console.ReadLine();
string list4_array = Console.ReadLine();
List<string> list1 = new List<string>();
List<string> list2 = new List<string>();
List<string> list3 = new List<string>();
List<string> list4 = new List<string>();
for (int i = 0; i < 8; i++)
{
list1.Add(list1_array[i].ToString());
list2.Add(list2_array[i].ToString());
list3.Add(list3_array[i].ToString());
list4.Add(list4_array[i].ToString());
}
int n = int.Parse(Console.ReadLine());
while (n > 0)
{
n--;
int[] input = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
int num = input[0];
int dir = input[1];
switch (num)
{
case 1:
if (check(list1, list2))
{
if (check(list2, list3))
{
if (check(list3, list4)) turn(ref list4, -dir);
turn(ref list3, dir);
}
turn(ref list2, -dir);
}
turn(ref list1, dir);
break;
case 2:
if (check(list2, list3))
{
if (check(list3, list4)) turn(ref list4, dir);
turn(ref list3, -dir);
}
if (check(list1, list2)) turn(ref list1, -dir);
turn(ref list2, dir);
break;
case 3:
if (check(list2, list3))
{
if (check(list1, list2)) turn(ref list1, dir);
turn(ref list2, -dir);
}
if (check(list3, list4)) turn(ref list4, -dir);
turn(ref list3, dir);
break;
case 4:
if (check(list3, list4))
{
if (check(list2, list3))
{
if (check(list1, list2)) turn(ref list1, -dir);
turn(ref list2, dir);
}
turn(ref list3, -dir);
}
turn(ref list4, dir);
break;
}
}
int answer = 0;
answer += int.Parse(list1[0]) == 0 ? 0 : 1;
answer += int.Parse(list2[0]) == 0 ? 0 : 2;
answer += int.Parse(list3[0]) == 0 ? 0 : 4;
answer += int.Parse(list4[0]) == 0 ? 0 : 8;
Console.Write(answer);
}
}
반응형
'코딩테스트 준비 > 백준 C#' 카테고리의 다른 글
백준 C# - 1992 +) 풀이 (0) | 2024.04.06 |
---|---|
백준 C# - 14425 +) 풀이 (0) | 2024.04.03 |
백준 C# - 2630 +) 풀이 (0) | 2024.04.01 |
백준 C# - 1021 +) 풀이 (0) | 2024.03.31 |
백준 C# - 14425 (0) | 2024.03.31 |
댓글