https://www.acmicpc.net/problem/17300

 

17300번: 패턴

안드로이드 OS에는 휴대폰의 잠금을 풀기 위한 방법 중 패턴을 암호로 사용하는 방법이 있다. 3×3의 9개 점에 번호를 매겨 그중 일부로 하나의 수열을 만들었을 때, 수열에서 인접한 번호의 점을

www.acmicpc.net

접근 방법

1-9, 4-6 과 같이 연속적이지 않은 패턴들을 구별하여 하드코딩을 해주었다..

 

문제 풀이

  • 연속적이지 않은 패턴의 쌍 8개를 구분하여 입력이 들어오면 flag를 false로 변환
  • 이미 간 곳도 다시 갈 수 없고, 5-5와 같이 같은 곳에 2번도 할 수 없으니 flag를 false로 변환
  • 출력

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Baekjoon.silver
{
    class _17300
    {
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            int[] arr = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
            bool[] check = new bool[10];


            (int, int) temp;
            bool flag = true;
            for(int i = 0; i< n-1; i++)
            {
                temp = (arr[i], arr[i + 1]);

                if (temp == (1, 3) || temp == (3, 1))
                {
                    if (!check[2])
                        flag = false;
                }
                else if (temp == (1, 7) || temp == (7, 1))
                {
                    if (!check[4])
                        flag = false;
                }
                else if (temp == (7, 9) || temp == (9, 7))
                {
                    if (!check[8])
                        flag = false;
                }
                else if (temp == (3, 9) || temp == (9, 3))
                {
                    if (!check[6])
                        flag = false;
                }
                else if (temp == (2, 8) || temp == (8, 2))
                {
                    if (!check[5])
                        flag = false;
                }
                else if (temp == (4, 6) || temp == (6, 4))
                {
                    if (!check[5])
                        flag = false;
                }
                else if (temp == (1, 9) || temp == (9, 1))
                {
                    if (!check[5])
                        flag = false;
                }
                else if (temp == (3, 7) || temp == (7, 3))
                {
                    if (!check[5])
                        flag = false;
                }
                //이미 간 곳 방지
                else if (check[arr[i + 1]])
                    flag = false;
                //같은 수 2번 방지
                else if (arr[i] == arr[i + 1])
                    flag = false;

                check[arr[i]] = true;
                if (!flag)
                    break;
            }

            if (flag)
                Console.WriteLine("YES");
            else
                Console.WriteLine("NO");
        }
    }
}

'문제 풀이 > C#' 카테고리의 다른 글

[1238] - 파티  (1) 2022.11.24
[1956] - 운동  (0) 2022.11.23
[22867] - 종점  (0) 2022.11.21
[11404] - 플로이드  (0) 2022.11.19
[13549] - 숨바꼭질 3  (0) 2022.11.18

+ Recent posts