이번 시간에는 C#을 활용하여 취업을 위한 알고리즘 문제를 해결해보는 시간을 가져보겠습니다. 주제는 많이들 즐겨하는 댄스 리듬 게임인 DDR(Dance Dance Revolution)을 바탕으로 한 문제를 다뤄보겠습니다. DDR 게임에서 요구되는 입력 패턴을 코드로 구현하고, 해당 패턴을 처리하는 알고리즘을 작성해보도록 하겠습니다.
문제 설명
당신은 DDR 게임의 패턴을 분석하는 개발자입니다. DDR에서는 각 방향판(상, 하, 좌, 우)에 해당하는 인풋을 받습니다. 입력은 특정 시간 간격으로 주어지는 일련의 방향 키 패턴으로 구성됩니다. 각 방향은 다음과 같이 나타낼 수 있습니다:
- U: 위
- D: 아래
- L: 왼쪽
- R: 오른쪽
당신에게 주어진 입력 패턴을 보고, 사용자가 얼마나 정확하게 해당 패턴을 입력했는지를 판단해야 합니다. 패턴의 길이와 일정 시간 내에 적절히 입력했는지를 체크하여 점수를 매기도록 하겠습니다.
입력 형식
- 첫 번째 줄에는 패턴의 길이 N이 주어집니다. (1 ≤ N ≤ 100)
- 두 번째 줄에는 N개의 문자로 구성된 패턴이 주어집니다.
- 세 번째 줄에는 사용자의 입력 패턴 X가 주어집니다.
출력 형식
사용자의 입력이 패턴과 얼마나 일치하는지를 나타내는 정확도 점수를 출력합니다. 점수는 다음과 같이 계산됩니다.
- 패턴의 길이와 사용자의 입력의 길이가 같을 때만 점수를 계산합니다.
- 일치하는 문자마다 10점씩 부여합니다.
- 일치하지 않는 경우, 해당 인덱스에서 점수를 잃고, 잃는 점수는 5점입니다.
- 최종 점수를 출력합니다.
예시 입력
5 UDLRU UDLRD
예시 출력
35
문제 해결 과정
이제 문제를 해결하기 위해 어떻게 코드를 작성할지 단계별로 살펴보겠습니다. 우선 요구되는 기능들을 정리해보겠습니다.
- 패턴의 길이(N)와 입력 패턴을 저장할 수 있는 변수를 선언합니다.
- N 길이만큼 패턴을 배열 또는 리스트로 저장합니다.
- 사용자의 입력 패턴을 배열 또는 리스트에 저장합니다.
- 입력 패턴과 기존 패턴을 비교하여 일치하는 부분을 체크하고 점수를 계산합니다.
- 최종 점수를 출력합니다.
C# 코드 작성
이제 위의 요구사항에 따라 C# 코드를 작성해보겠습니다.
using System;
class DDR
{
static void Main()
{
// 패턴의 길이 N을 입력받기
int N = int.Parse(Console.ReadLine());
// DDR 패턴과 사용자 입력 패턴을 각각 저장할 문자열 배열 선언
string pattern = Console.ReadLine();
string userInput = Console.ReadLine();
// 점수 변수 초기화
int score = 0;
// 입력 길이가 패턴과 같은지 체크
if (N != userInput.Length)
{
Console.WriteLine("입력 길이가 패턴 길이와 일치하지 않습니다.");
return;
}
// 패턴과 사용자 입력 비교하여 점수 계산
for (int i = 0; i < N; i++)
{
if (pattern[i] == userInput[i])
{
score += 10; // 일치할 때마다 10점
}
else
{
score -= 5; // 불일치할 때마다 5점 삭감
}
}
// 최종 점수 출력
Console.WriteLine(score);
}
}
위 코드는 상대적으로 간단하게 DDR 패턴을 입력받고 사용자 입력을 비교하여 점수를 계산하는 로직으로 작성되었습니다. 이 코드를 실행하면 사용자에게 패턴과 입력을 요구하고, 점수를 계산하여 출력합니다.
코드 설명
1. using System;
: C#의 기본적 라이브러리를 사용하기 위한 선언입니다.
2. class DDR
: DDR이라는 클래스를 정의합니다.
3. static void Main()
: 프로그램의 진입점입니다. 모든 코드 실행이 여기서 시작됩니다.
4. 사용자의 입력을 int.Parse(Console.ReadLine())
로 받아 정수형 변수 N
에 저장합니다.
5. 패턴과 사용자 입력을 각각 받아 문자열로 저장합니다.
6. 점수 변수 score
를 초기화합니다.
7. 사용자 입력의 길이가 패턴의 길이와 일치하는지 체크합니다. 맞지 않으면 프로그램을 종료합니다.
8. 패턴을 비교하여 일치할 때 10점을 부여하고, 불일치할 때 5점을 감소시키는 로직입니다.
9. 최종 점수를 출력합니다.
결론
이번 강좌에서는 DDR 패턴을 기반으로 문제를 구성하고, C#으로 이를 해결하는 방법에 대해 알아보았습니다. 알고리즘 문제 풀이를 통해 패턴 분석 및 점수 계산 로직을 작성해보았습니다. 이러한 문제를 풀면서 현재의 알고리즘 및 코드 작성 숙련도를 높일 수 있기를 바랍니다. 앞으로도 다양한 주제를 가지고 함께 공부해 나갑시다.