소개
로또 번호 생성기를 만드는 예제가 책에 있어서 그냥 프롬프트를 쓰지 말고 md 파일에 원하는 것을 다 정리한 후에 파일을 주고 만들어 보라고 할까?
내가 진행한걸 학생들에게도 만들어 보게 할까? 싶어서 한 번 도전해 봤습니다.
진행 방법
어떤 도구를 사용했고, 어떻게 활용하셨나요?
claude를 사용했습니다.
Tip: 사용한 프롬프트 전문을 꼭 포함하고, 내용을 짧게 소개해 주세요.
로또 번호 생성기
RandomNumber.cs 파일에 45개의 숫자를 랜덤하게 뽑는 프로그래밍을 구현해줘
45개의 파일에서 숫자가 중복되는지 여부를 판단하는 메소드는 따로 RandomNumber.cs에 구현해주고, 메인에서는 사용자에게 물어봐. "로또 생성기를 사용해보시겠습니까? 1. 응 2. 아니를 선택하도록 하고, 1을 선택했을 때는 숫자를 뽑아주고, 2를 선택하면 "안녕~"이라는 메시지를 출력하고 종료되는 프로그램을 작성해줘.
md 파일을 분석해서 부족한 부분이 있으면 업데이트해줘.객체지향으로 프로그래밍 해줘. 라고 하면 그냥 static으로 개발을 해줘서 수정하면 되긴 하지만 그것마져 에너지가 없어서 파일명을 지정해 줬더니 너무 잘 만들어 주더라구요.
Tip: 활용 이미지나 캡처 화면을 꼭 남겨주세요.
한국어 웹사이트 스크린샷
Tip: 코드 전문은 코드블록에 감싸서 작성해주세요. ( / 을 눌러 '코드 블록'을 선택)
using System;
using System.Collections.Generic;
namespace LottoGenerator
{
/// <summary>
/// 로또 번호 생성 및 유효성 검사를 담당하는 클래스
/// </summary>
public class RandomNumber
{
private static readonly Random _random = new Random();
private const int MinNumber = 1;
private const int MaxNumber = 45;
private const int LottoCount = 6;
/// <summary>
/// 1~45 범위에서 중복 없는 로또 번호 6개를 생성합니다.
/// </summary>
/// <returns>정렬된 로또 번호 리스트</returns>
public List<int> GenerateLottoNumbers()
{
List<int> numbers = new List<int>();
while (numbers.Count < LottoCount)
{
int candidate = _random.Next(MinNumber, MaxNumber + 1);
if (!IsDuplicate(numbers, candidate))
{
numbers.Add(candidate);
}
}
numbers.Sort();
return numbers;
}
/// <summary>
/// 주어진 숫자가 리스트 내에 이미 존재하는지(중복 여부) 판단합니다.
/// </summary>
/// <param name="numbers">현재 뽑힌 번호 리스트</param>
/// <param name="candidate">중복 여부를 확인할 후보 숫자</param>
/// <returns>중복이면 true, 아니면 false</returns>
public bool IsDuplicate(List<int> numbers, int candidate)
{
foreach (int number in numbers)
{
if (number == candidate)
return true;
}
return false;
}
/// <summary>
/// 번호 리스트가 유효한 로또 번호 조건을 충족하는지 검증합니다.
/// (6개, 1~45 범위, 중복 없음)
/// </summary>
/// <param name="numbers">검증할 번호 리스트</param>
/// <returns>유효하면 true, 아니면 false</returns>
public bool IsValidLottoNumbers(List<int> numbers)
{
if (numbers == null || numbers.Count != LottoCount)
return false;
foreach (int number in numbers)
{
if (number < MinNumber || number > MaxNumber)
return false;
}
// 중복 검사: 각 번호를 나머지와 비교
for (int i = 0; i < numbers.Count; i++)
{
for (int j = i + 1; j < numbers.Count; j++)
{
if (numbers[i] == numbers[j])
return false;
}
}
return true;
}
/// <summary>
/// 번호 리스트를 보기 좋은 문자열 형식으로 반환합니다.
/// </summary>
/// <param name="numbers">출력할 번호 리스트</param>
/// <returns>예: [3, 12, 21, 34, 40, 45]</returns>
public string FormatNumbers(List<int> numbers)
{
return "[" + string.Join(", ", numbers) + "]";
}
}
}
using System;
using System.Collections.Generic;
namespace LottoGenerator
{
/// <summary>
/// 로또 번호 생성기 메인 프로그램
/// </summary>
class Program
{
static void Main(string[] args)
{
RandomNumber randomNumber = new RandomNumber();
Console.WriteLine("=============================");
Console.WriteLine(" 🎱 로또 번호 생성기 ");
Console.WriteLine("=============================");
bool isRunning = true;
while (isRunning)
{
Console.WriteLine();
Console.WriteLine("로또 생성기를 사용해보시겠습니까?");
Console.WriteLine(" 1. 응");
Console.WriteLine(" 2. 아니");
Console.Write("선택 >> ");
string input = Console.ReadLine()?.Trim();
switch (input)
{
case "1":
Console.WriteLine();
Console.WriteLine("🎰 번호를 추첨합니다...");
Console.WriteLine();
List<int> lottoNumbers = randomNumber.GenerateLottoNumbers();
// 생성된 번호 유효성 검증
if (!randomNumber.IsValidLottoNumbers(lottoNumbers))
{
Console.WriteLine("⚠️ 번호 생성 중 오류가 발생했습니다. 다시 시도해 주세요.");
break;
}
Console.Write("행운의 로또 번호: ");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine(randomNumber.FormatNumbers(lottoNumbers));
Console.ResetColor();
Console.WriteLine();
Console.WriteLine("🍀 행운을 빕니다!");
break;
case "2":
Console.WriteLine();
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("안녕~");
Console.ResetColor();
isRunning = false;
break;
default:
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("⚠️ 1 또는 2를 입력해 주세요.");
Console.ResetColor();
break;
}
}
Console.WriteLine();
Console.WriteLine("프로그램을 종료합니다.");
}
}
}
결과와 배운 점
배운 점과 나만의 꿀팁을 알려주세요.
요즘은 모든 파일들을 md로 만들어서 저장을 하고 있습니다.
보고서 초안도 따로 md 파일을 생성한 후에 그걸 토대로 문서 작업을 하니까 대략적인 개요 작성을 잘 해줘서 좋고. 그 폴더 안에 파일들을 읽어서 제 스타일을 잘 잡아주더라구요.
과정 중에 어떤 시행착오를 겪었나요?
기존에는 객체지향으로 만들어줘. 라고 하니까 좀 답답하고 내가 뭔가 작업을 해야 해서 번거로웠는데요.
파일을 다운로드 할 수 있도록 만들어주니 편합니다.
앞으로의 계획이 있다면 들려주세요.
논문 스터디랑은 관련이 없는 것 같은데 지식 체계를 구축한다는 느낌으로 사례글 올려 보았습니다.