오늘부터 챗 GPT에게 C#문제를 내달라고 하고 풀어볼 예정이다. 우선 5가지 문제를 내달라고 했다.
계속 프로젝트가 진행중이라 바쁘지만, 최대한 여유가 있을때 마다 C#공부를 병행하려고 한다.
검색하지않고 온전히 머릿속에 있는것만으로 풀려고 하니 정말 막막했고, 많은 도전을 했지만 하나도 제대로 풀어내지 못했다.
하지만 이런 과정을 거친 후 풀이를 보게된다면 기억에 오래 남을것이다.
이걸 보는사람이 있고, 공부중이라면 함께 풀어보고 풀이를 보며 공부하는것을 추천한다.
문제 1: 기본적인 문자열 처리
문제: 사용자로부터 문자열을 입력받아, 그 문자열이 회문(앞뒤가 같은 문자열)인지 확인하는 프로그램을 작성하세요. 대소문자는 무시합니다. 예를 들어, "Radar"는 회문입니다.
문제 2: 배열과 반복문
문제: 정수 배열이 주어졌을 때, 배열에서 가장 큰 값과 가장 작은 값을 찾는 함수를 작성하세요. 이 함수는 배열을 매개변수로 받고, 가장 큰 값과 작은 값을 반환해야 합니다.
문제 3: 객체 지향 프로그래밍
문제: "Car"라는 클래스를 작성하세요. 이 클래스는 "Brand", "Model", "Year" 속성을 가지고, "StartEngine()"과 "StopEngine()"이라는 메서드를 포함해야 합니다. 또한, 이 클래스의 인스턴스를 생성하고 메서드를 호출하는 예제를 작성하세요.
문제 4: 예외 처리
문제: 사용자가 숫자를 입력하면, 그 숫자의 제곱근을 계산하여 출력하는 프로그램을 작성하세요. 사용자가 음수를 입력할 경우, "잘못된 입력입니다"라는 메시지를 출력하도록 예외 처리를 해주세요.
문제 5: 파일 입출력
문제: 사용자로부터 텍스트를 입력받아, "user_input.txt"라는 파일에 저장하고, 파일의 내용을 다시 읽어와 콘솔에 출력하는 프로그램을 작성하세요.
아래는 풀이입니다. 어려운 부분은 이해하기 쉽게 주석을 정말 열심히 썼으니 확인하길 바랍니다.
문제1
using System;
class Program
{
static void Main()
{
Console.WriteLine("문자열을 입력하세요:");
string input = Console.ReadLine();
string lowerInput = input.ToLower(); // 대소문자 무시를 위해 소문자로 변환
// 문자열을 뒤집기
//문자열을 문자 배열로 변환
char[] charArray = lowerInput.ToCharArray();
//Array.Reverse함수를 이용해 charArray 를 뒤집음
Array.Reverse(charArray);
//위에서 뒤집은 charArray를 다시 문자열로 변환하여 reversedInput에 저장
string reversedInput = new string(charArray);
// string 끼리 비교하여 회문 여부 판단
if (lowerInput == reversedInput)
{
Console.WriteLine("입력한 문자열은 회문입니다.");
}
else
{
Console.WriteLine("입력한 문자열은 회문이 아닙니다.");
}
}
}
문제2
using System;
class Program
{
static void Main()
{
//이 로직은 보면 이해를 할 수 있기에 별다른 주석을 추가하지 않겠습니다.
int[] numbers = { 5, 3, 8, 2, 9, 1, 4 };
int max = numbers[0];
int min = numbers[0];
foreach (int number in numbers)
{
if (number > max)
{
max = number;
}
if (number < min)
{
min = number;
}
}
Console.WriteLine($"최대값: {max}, 최소값: {min}");
}
}
문제3
using System;
class Car
{
public string Brand { get; set; }
public string Model { get; set; }
public int Year { get; set; }
public void StartEngine()
{
Console.WriteLine($"{Brand} {Model}의 엔진이 시작되었습니다.");
}
public void StopEngine()
{
Console.WriteLine($"{Brand} {Model}의 엔진이 꺼졌습니다.");
}
}
class Program
{
static void Main()
{
Car myCar = new Car
{
Brand = "Hyundai",
Model = "Elantra",
Year = 2021
};
myCar.StartEngine();
myCar.StopEngine();
}
}
문제4
using System;
class Program
{
static void Main()
{
Console.WriteLine("숫자를 입력하세요:");
try // 예외가 발생할 수 있는 코드를 실행하고, 예외 발생시 catch 블록으로 이동
{
double number = Convert.ToDouble(Console.ReadLine());
//number이 음수라면
if (number < 0)
{
//ArgumentException을 발생시켜 catch로 보냄
throw new ArgumentException("잘못된 입력입니다. 음수의 제곱근은 계산할 수 없습니다.");
}
//Math.Sqrt(숫자) = 제곱근을 계산하는 함수
double sqrt = Math.Sqrt(number);
Console.WriteLine($"{number}의 제곱근은 {sqrt}입니다.");
}
// FormatException = 숫자로 변환할 수 없는 문자열을 변환하려 할 때 발생
catch (FormatException)
{
Console.WriteLine("잘못된 형식입니다. 숫자를 입력하세요.");
}
// ArgumentException = 특정 조건에서 개발자가 직접 발생시키는 예외
catch (ArgumentException ex)
{
Console.WriteLine(ex.Message);
}
}
}
문제5
using System;
using System.IO;
class Program
{
static void Main()
{
Console.WriteLine("저장할 텍스트를 입력하세요:");
string userInput = Console.ReadLine();
// 파일에 텍스트 저장
File.WriteAllText("user_input.txt", userInput);
Console.WriteLine("텍스트가 파일에 저장되었습니다.");
// 파일에서 텍스트 읽기
string readText = File.ReadAllText("user_input.txt");
Console.WriteLine("파일에서 읽은 내용:");
Console.WriteLine(readText);
}
}
생각보다 코드는 간단하다.
문제를 풀지 못해도, 아무것도 몰라도 괜찮다.
하지만 공부를 하는 입장에서 모르는건 괜찮지만 배우지 않는건 괜찮지 않다고 생각한다.
다들 화이팅!