- 문제
- 출제 의도 분석
- 제출한 정답
- 문제에 대한 피드백
정수형 배열을 입력받아 배열의 모든 요소의 합을 출력하는 함수를 완성해주세요.
class Program
{
static int Sum(int[] arr)
{
// TODO : 배열의 모든 요소의 합을 계산하는 코드 작성
//////////////////////////////////////////
}
static void Main(string[] args)
{
int[] ints = { 3, 6, 7, 9 };
Console.WriteLine(Sum(ints));
}
}
● 출제 의도 분석
- 배열과 반복문을 이해하고 있는가
- 메서드의 구조와 반환값 처리에 대해 이해하고 있는가
● 제출한 정답
class Program
{
static int Sum(int[] arr)
{
int sum = 0;
for (int i = 0; i < arr.Length; i++)
{
sum += arr[i];
}
return sum;
}
static void Main(string[] args)
{
int[] ints = { 3, 6, 7, 9 };
Console.WriteLine(Sum(ints));
}
}
● 자가 피드백
- x
다음 결과를 출력하도록 아래 밑줄 친 곳들의 코드를 완성하시오.

class Program
{
private static void Add( )
{
result += i;
}
static void Main(string[] args)
{
int total = 10;
Console.WriteLine(total);
Add(200, );
Console.WriteLine(total);
}
}
● 출제 의도 분석
- 값 타입과 참조 타입의 차이를 이해하고 있는가
● 제출한 정답
class Program
{
private static void Add(int i, ref int result)
{
result += i;
}
static void Main(string[] args)
{
int total = 10;
Console.WriteLine(total);
Add(200, ref total);
Console.WriteLine(total);
}
}
● 자가 피드백
- ref, out, in 3가지 키워드의 결과와 차이에 대해 정확하게 이해하기
다음 코드에서는 오류가 발생합니다. 잘못된 것은 무엇인지 설명해보시오.
class Square
{
float width;
float height;
float Area() { return width * height; }
}
class Program
{
static void Main(string[] args)
{
Square box = new Square();
Console.WriteLine(box.Area());
}
}
● 출제 의도 분석
- 접근 제한자에 대해 이해하고 있는가
- 캡슐화에 대해 이해하고 있는가
● 제출한 정답
- Area()의 접근 제어자가 private라서 Main 메서드에서 접근 불가
● 자가 피드백
- 왜 Area()가 private이 됐는지 설명이 부족 → Area() 메서드에 접근 제어자를 명시하지 않아 기본적으로 private이 됨
- 해결 방법 제안 → Area() 메서드에 접근 제어자 public을 추가한다.
다음 코드의 출력 결과를 작성하고, x의 값이 순서대로 어떻게 변화하는지 작성해주세요.
class Program
{
static void Main(string[] args)
{
int x = 2;
int y = 3;
x += x * ++y;
Console.WriteLine(x++);
}
}
● 출제 의도 분석
- 전위 / 후위 연산자의 차이점을 이해하고 있는가
- 연산자들의 계산 순서를 이해하고 있는가
● 제출한 정답
- 10
- 2 → 10 → 11
● 자가 피드백
- x
계속해서 정수를 입력받아 홀수인지 짝수인지 구분해주는 프로그램을 작성해보세요.
정수가 아닌 데이터를 입력받으면 프로그램이 종료되도록 만들어보세요.

class Program
{
static void Main(string[] args)
{
while (true)
{
Console.WriteLine("숫자를 입력하세요.");
string answer = Console.ReadLine();
bool isSuccess = int.TryParse(answer, out int result);
// TODO : 입력받은 정수가 홀수인지 짝수인지 구분하는 코드 작성하기
///////////////////////////////////////////////////
}
}
}
● 출제 의도 분석
- 반복문과 조건문을 활용하여 루프를 구성할 수 있는가
- TryParse() 메서드를 이용하여 입력값의 유효성을 검증할 수 있는가
- 프로그램 종료 조건을 명확히 구현할 수 있는가
● 제출한 정답
class Program
{
static void Main(string[] args)
{
while (true)
{
Console.WriteLine("숫자를 입력하세요.");
string answer = Console.ReadLine();
bool isSuccess = int.TryParse(answer, out int result);
if (!isSuccess) {
Console.WriteLine("");
break;
}
else
{
Console.WriteLine(result%2 == 0 ? "짝수입니다" : "홀수입니다");
}
}
}
}
● 자가 피드백
- 입력값의 유효성 검증이 출제 의도라는 점에서, 입력된 정수가 허용된 범위 내에 있는지도 함께 검증하는 것이 더 적절하다고 생각된다.
다음의 코드가 아래의 결과를 출력할 수 있도록
밑줄 부분을 채워 코드를 완성해주세요.

class Program
{
static void Main(string[] args)
{
int[] intArr = { 4, 7, 2, 5, 6, 8, 3 };
___________________
foreach(int i in intArr)
Console.Write(i + " ");
}
}
● 출제 의도 분석
- 배열의 정렬을 수행할 수 있는가
- 배열 내부의 데이터를 조작하고 출력할 수 있는가
● 제출한 정답
class Program
{
static void Main(string[] args)
{
int[] intArr = { 4, 7, 2, 5, 6, 8, 3 };
for (int i = 0; i < intArr.Length; i++)
{
for (int j = i + 1; j < intArr.Length; j++)
{
if (intArr[i] > intArr[j])
{
int temp = intArr[j];
intArr[j] = intArr[i];
intArr[i] = temp;
}
}
}
foreach(int i in intArr)
Console.Write(i + " ");
}
}
● 자가 피드백
- 정렬을 간단하게 구현했기 때문에 최적화 측면에서 부족 → 퀵정렬같은 고급 알고리즘으로 정렬을 구현하는게 적절하다.
다음 코드의 출력 결과를 작성하고, 왜 그렇게 되는지 이유를 설명해주세요.
class Program
{
public class Unit
{
public virtual void Move()
{
Console.WriteLine("두발로 걷기");
}
public void Attack()
{
Console.WriteLine("Unit 공격");
}
}
public class Marine : Unit
{
}
public class Zergling : Unit
{
public override void Move()
{
Console.WriteLine("네발로 걷기");
}
}
static void Main(string[] args)
{
Zergling zerg = new Zergling();
zerg.Move();
}
}
● 출제 의도 분석
- 가상 메서드(virtual)와 재정의(override) 개념을 이해하고 있는가
- 상속 구조에서 메서드 호출이 어떻게 결정되는지 이해하고 있는가
● 제출한 정답
- 출력 결과 : 네발로 걷기
- 이유 : Zergling 클래스가 Unit 클래스를 상속받아서 Move() 메서드를 오버라이드 했기 때문에
● 자가 피드백
- C#의 다형성 개념으로 컴파일 타임과 런타임에 대해서 추가하면 답변이 더욱 풍성해질 수 있다.
- [답변 예시]
- Unit.Move() 메서드가 virtual로 선언되어 있고, Zergling 클래스가 이를 override했기 때문이다.
C#의 다형성에서는 메서드 호출이 런타임에 객체의 실제 타입에 따라 결정되는 동적 바인딩이 이루어진다.
반면 일반 메서드는 컴파일 타임에 변수의 선언 타입에 따라 호출 메서드가 결정되는 정적 바인딩이 적용된다.
- Unit.Move() 메서드가 virtual로 선언되어 있고, Zergling 클래스가 이를 override했기 때문이다.
그림과 같은 트리가 있습니다.
이 트리를 깊이우선탐색(DFS, Depth-First Search)으로 검색했을 때의 방문하는 순서와
너비우선탐색(BFS, Breadth-First Search)으로 검색했을 때 방문하는 순서를 적어주세요.

● 출제 의도 분석
- 그래프 탐색 알고리즘을 이해하고 있는가
- 자료구조에 알고리즘을 적용할 수 있는가
● 제출한 정답
- 깊이 우선 탐색 : 3 → 6 → 9 → 6 → 3 → 7 → 3 → 1 → 4 → 8 → 4 → 1 → 2 → 1 → 5
- 너비 우선 탐색 : 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 → 9
● 자가 피드백
- 그래프 탐색 알고리즘에 대한 공부가 부족하다.
- 각 노드는 한번만 방문.
다음 코드의 출력 결과를 작성하고, 왜 그렇게 되는지 이유를 설명해주세요.
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
Stack<int> stack = new Stack<int>();
stack.Push(1);
stack.Push(2);
stack.Push(3);
stack.Pop();
Console.WriteLine(stack.Pop());
stack.Push(4);
stack.Push(5);
while (stack.Count > 0)
Console.WriteLine(stack.Pop());
}
}
● 출제 의도 분석
- 자료구조 Stack에 대해 이해하고 있는가
- Push()와 Pop()이 일어날 때, 스택의 상태를 추적할 수 있는가
● 제출한 정답
- 출력 : 2 5 4 1
- 이유 : 스택에 1 2 3 존재 → 3 pop → 2 pop 후 출력 (스택에 1 존재) → 스택에 4 5 push (스택에 1 4 5 존재)→ top부터 하나씪 pop → 5 4 1 출력
● 자가 피드백
- 문장의 가독성이 낮다. 한 문장씩 끊어서 구조화 하는 것이 가독성에 도움이 됨.
- [답변예시]
- 스택에 1, 2, 3 순으로 push → 스택 : [1, 2, 3]
- 3이 pop → 스택 : [1, 2]
- 2가 pop 되어 출력 → 스택 : [1]
- 4, 5 가 차례로 push → 스택 : [1, 4, 5]
- while 루프에서 top 부터 pop 되어 출력 → 출력 : 5, 4, 1
- Stack의 특징에 대한 설명 부족하다.
- LIFO 방식에 대한 설명을 추가
유저의 숫자 입력을 받아오고 이것을 오름차순으로 정렬시키는 알고리즘을 직접 구현하세요.
(기본 제공 함수(닷넷 API) 사용 금지)
● 출제 의도 분석
- 정렬 알고리즘의 구조에 대해 이해하고 있는가
- 구현력과 흐름 설계 능력이 충분한가
● 제출한 정답
class Program
{
static List<float> Sort(List<float> nums)
{
for (int i = 0; i < nums.Count; i++)
{
for (int j = i + 1; j < nums.Count; j++)
{
if (nums[i] > nums[j])
{
float temp = nums[j];
nums[j] = nums[i];
nums[i] = temp;
}
}
}
return nums;
}
static void Main(string[] args)
{
List<float> nums = [];
Console.WriteLine("숫자를 하나씩 입력해주세요. 숫자가 아닌 문자가 입력되면 종료됩니다.");
while(true)
{
string answer = Console.ReadLine();
bool isSuccess = float.TryParse(answer, out float result);
if (!isSuccess) {
Console.WriteLine("");
break;
}
else
{
nums.Add(result);
}
}
foreach (float n in Sort(nums))
Console.Write($"{n} ");
}
}
● 자가 피드백
- List 대신 Array로 구현하는게 '기본 제공 함수 사용 금지' 의도에 더욱 적절하다.
- 상황에 따라 버블정렬은 적용이 어려울 수 있기 때문에 고급 정렬 알고리즘 구현을 익히는 것이 중요하다.
'Unity 개발 일지' 카테고리의 다른 글
Unity 조사하기 (0) | 2025.03.18 |
---|---|
Unity 트랙을 신청한 이유 (0) | 2025.03.17 |