[C#] 백준 2661번 좋은수열

2024. 5. 2. 22:53·Language/C#
반응형

[ 문제 ]

숫자 1, 2, 3으로만 이루어지는 수열이 있다. 임의의 길이의 인접한 두 개의 부분 수열이 동일한 것이 있으면, 그 수열을 나쁜 수열이라고 부른다. 그렇지 않은 수열은 좋은 수열이다.

다음은 나쁜 수열의 예이다.

  • 33
  • 32121323
  • 123123213

다음은 좋은 수열의 예이다.

  • 2
  • 32
  • 32123
  • 1232123

길이가 N인 좋은 수열들을 N자리의 정수로 보아 그중 가장 작은 수를 나타내는 수열을 구하는 프로그램을 작성하라. 예를 들면, 1213121과 2123212는 모두 좋은 수열이지만 그 중에서 작은 수를 나타내는 수열은 1213121이다.

 

[ 코드 ]

1. 내 코드

using System;

class Program
{
    static int N;
    static string result;
    static bool finish = false; 

    static void Solve(string tmp, int cnt)
    {
        if (finish) return;
        int size = tmp.Length;
        for (int i = 1; i <= size / 2; i++)
        {
            if (tmp.Substring(size - i, i) == tmp.Substring(size - 2 * i, i)) return;
        }
        if (cnt == N)
        {
            result = tmp;
            finish = true;
        }
        for (int i = 0; i < N; i++)
        {
            Solve(tmp + "1", cnt + 1);
            Solve(tmp + "2", cnt + 1);
            Solve(tmp + "3", cnt + 1);
        }
    }

    static void Main(string[] args)
    {
        N = int.Parse(Console.ReadLine());
        Solve("", 0);
        Console.Write(result);
    }
}

 

2. 다른 사람 코드

using System;

namespace 좋은수열
{
    class Program
    {
        static char[] result;
        static int N;

        static bool IsGood(char[] str, int length)
        {
            if (length <= 1)
                return true;

            for (int startIndex = 0; startIndex < length - 1; ++startIndex)
            {
                for (int subLength = 1; subLength * 2 + startIndex <= length; ++subLength)
                {
                    if (IsSame(str, startIndex, startIndex + subLength, subLength))
                        return false;
                }
            }

            return true;
        }

        static bool IsSame(char[] str, int start1, int start2, int length)
        {
            for (int i = 0; i < length; ++i)
            {
                if (str[start1 + i] != str[start2 + i])
                    return false;
            }

            return true;
        }

        static bool FindGood(int remain, int index)
        {
            if (remain == 0)
                return true;

            for (char c = '1'; c <= '3'; ++c)
            {
                result[index] = c;
                if (IsGood(result, index + 1))
                {
                    if (FindGood(remain - 1, index + 1))
                        return true;
                }
            }

            return false;
        }

        static void Main(string[] args)
        {
            N = int.Parse(Console.ReadLine());
            result = new char[N];
            FindGood(N, 0);

            Console.WriteLine(new string(result, 0, N));
        }
    }
}

 

[ 추가 ]

 

> 브루트 포스와 그리디 알고리즘의 차이와 그리디 알고리즘과 백트래킹 알고리즘의 차이....

진짜 비슷해서 너무 짱나고 어렵다...... 거기서 거기인 느낌

https://hangbok-archive.com/computer-science/algorithm/%EA%B7%B8%EB%A6%AC%EB%94%94-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/#%EA%B7%B8%EB%A6%AC%EB%94%94_%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98_DP_%EB%B0%B1%ED%8A%B8%EB%9E%98%ED%82%B9

 

브루트 포스 vs 그리디 알고리즘 (개념, 특징, 문제) - H-A

본질적으로 그리디 알고리즘은 전역적으로 최적의 솔루션으로 이어질 것이라는 희망을 가지고 각 단계에서 가능한 최선의 선택을 하는 패러다임입니다. 우선 향후 결과를 고려하지 않고 각 단

ec2-3-35-198-107.ap-northeast-2.compute.amazonaws.com

 

[ 실행화면 ]

case: 1


문제링크: https://www.acmicpc.net/problem/2661

 

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Language > C#' 카테고리의 다른 글

[C#] 백준 25640번 MBTI  (0) 2024.05.07
[C#] 백준 31403번 A + B - C  (1) 2024.05.04
[C#] 백준 7795번 먹을 것인가 먹힐 것인가  (0) 2024.05.01
[C#] 백준 10867번 중복 빼고 정렬하기  (1) 2024.04.28
[C#] 백준24480번 알고리즘 수업 - 깊이 우선 탐색 2 (내림차순)  (0) 2024.04.28
'Language/C#' 카테고리의 다른 글
  • [C#] 백준 25640번 MBTI
  • [C#] 백준 31403번 A + B - C
  • [C#] 백준 7795번 먹을 것인가 먹힐 것인가
  • [C#] 백준 10867번 중복 빼고 정렬하기
석영
석영
관심 분야는 AR, VR, 게임이고 유니티 공부 중 입니다. (정보처리기사,컴퓨터그래픽스운용기능사 취득)
반응형
석영
유석영의 개발공부
석영
전체
오늘
어제
  • 분류 전체보기
    • Unity
      • Project
      • Tip
      • Assets
    • Record
      • TIL
      • Game
    • Language
      • C#
      • Node.js
      • HTML, JS
    • Study
      • Linear Algebra

인기 글

최근 글

hELLO· Designed By정상우.v4.5.2
석영
[C#] 백준 2661번 좋은수열

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.