에라토스테네스의 체를 생각하며 가장 작은 수부터 리스트에 추가하고 동시에 추가된 수들을 회전시켜 얻은 시계수가 아닌 수들은 걸러내는 방법을 적용했다.
1111을 가장 먼저 리스트에 추가하면 1111을 회전시켜 얻은 1111, 1111, 1111을 확인한다. 모두 같으므로 패스.
1112는 걸러지지 않았으므로 리스트에 추가한다. 1121, 1211, 2111을 제외한다.
이하 반복
입력된 수를 돌려 얻은 시계수가 리스트의 몇번째 항목인지만 확인해 출력하면 끝.
using System;
using System.Collections.Generic;
class Program
{
static string[] input;
static int[] clock = new int[5];
static bool[] check = new bool[10000];
static List<int> clockNumbers = new List<int>();
static void Main()
{
input = Console.ReadLine().Split();
for(int i = 0; i < 4; i++)
{
clock[1] *= 10;
clock[1] += int.Parse(input[i]);
}
for(int i = 0; i < 3; i++)
clock[2 + i] = (clock[1 + i] % 1000) * 10 + clock[1 + i] / 1000;
clock[0] = Math.Min(Math.Min(clock[1], clock[2]), Math.Min(clock[3], clock[4]));
for(int i = 1111; i < 10000; i++)
{
if (check[i]) continue;
if ($"{i}".Contains('0')) continue;
clockNumbers.Add(i);
int cnt = i;
for(int j = 0; j < 3; j++)
{
cnt = (cnt % 1000) * 10 + cnt / 1000;
check[cnt] = true;
}
}
Console.WriteLine(clockNumbers.IndexOf(clock[0]) + 1);
}
}
...
정보올림피아드 초등부 문제를 풀어보고 있다.
이게 1997년 초등부 2번 문제라는데 내 윗세대는 괴물들이 득실대는 곳이 분명하다.
쉬운 문제지만 이런 문제를 풀면 풀수록 난 이 곳에서 경쟁력이 없다는 것을 절실히 깨닫는다.
그냥 소소한 취미생활, 자기계발 쯤으로만 공부하고 결과는 크게 기대하지 말자...
내 진로는 여기 없는 것 같다...