[C#] Comprehension Test

Lingtea_luv·2025년 3월 21일
0

C#

목록 보기
8/37
post-thumbnail

Basic


  1. 다음 중 C#의 형변환으로 적합하지 않은 것을 고르시오.
  1. int intValue = (int)1.4;
  2. float floatValue = (float)"12.3";
  3. float floatValue = 3;
  4. int intValue = int.Parse("123");
  5. double doubleValue = 3.14f;

해설 : string을 의미하는 "~~"의 경우 암시적 형변환이 불가능하다. 따라서 2번의 경우 명시적 형변환을 해야한다. float floatValue = float.Parse("12.3");
3,5번처럼 주어진 값보다 더 넓은 범위 해당하는 자료형에는 값을 바로 할당할 수 있다.

정답 : 2번

  1. 다음 코드의 출력을 적으시오.
enum Season
{
	Spring, Summer, Autumn, Winter
}
static void Main()
{
	Console.WriteLine((Season)21);
    Console.WriteLine((Season)50);
}

해설 : enum의 요소 중 대응되는 것이 없는 경우 단순히 입력한 정수가 출력된다.

정답 :

Winter
50

Advanced


파트를 입력부와 출력부로 나누어, 각각을 조건에 맞게 작성했다.
입력부는 구현하고자 하는 함수의 매개변수 값을 사용자가 넣을 수 있도록 하고
출력부는 문제 조건에 맞는 함수를 구현했다.

  1. 주어진 문자열에서 특정 문자의 위치를 찾는 함수
Console.Write("문자열 입력 : ");			
string text = Console.ReadLine();
Console.Write("확인할 문자 입력 : ");
char key = char.Parse(Console.ReadLine());

Console.WriteLine(FindKeyIndex(text, key));
public static int FindKeyIndex(string text, char key)
{
    int count = 0;

    foreach (char a in text)
    {
        if(a == key)
        {
            break;
        }
        count++;
    }
    if(count == text.Length)
    {
        count = -1;
    }
    return count;
}

문자열의 문자와 주어진 문자가 같은지 여부를 파악하는 반복문을 만들고 반복 횟수로 위치를 찾을 수 있도록 했다. 그리고 반복 횟수가 문자열 길이와 같으면 전부 비교할 동안 같은 문자가 없었다는 뜻이므로 문자열에 특정 문자가 없다는 의미로 -1을 출력하도록 했다.

  1. 주어진 숫자가 소수인지 아닌지 판별하는 함수
Console.Write("숫자 입력 : ");
int number = int.Parse(Console.ReadLine());

Console.WriteLine(IsPrime(number));
public static bool IsPrime(int number)
{
    for(int i =2; i<number; i++)
    {
        if(number % i == 0)
        {
            return false;
        }
    }
    return true;
}

주어진 숫자를 2부터 나누어서 나머지가 0인지를 확인했을 때, 하나라도 0이 되면 false 즉 합성수이고, 나머지가 전부 0이 아니면 소수이다. 이를 반복문으로 구현했다.

  1. 각 자리 수의 합을 구하는 함수
Console.Write("숫자 입력 : ");
int number1 = int.Parse(Console.ReadLine());
SumOfDigits(number1);
public static int SumOfDigits(int number)
{
    int sum = 0;
    if(number == 0)
    {
        sum += number % 10;
        number /= 10; 
    }
    return sum;
}

숫자를 10으로 나누는 과정을 num = p1 * 10 + q1 식으로 표현이 가능한데, 이때 p1 = p2 * 10 + q2 로 계속 반복하여 p가 0이 될때까지의 q를 더하면 각 자릿수의 합이 되므로 이를 반복문으로 구현했다.

  1. 주어진 두 배열의 공통항목을 찾는 함수
Console.Write("배열1 입력 : ");
string[] strarray1 = Console.ReadLine().Split(' ');
int[] array1 = new int[strarray1.Length];
for (int i = 0; i < strarray1.Length; i++)
{
    array1[i] = int.Parse(strarray1[i]);
}
Console.Write("배열2 입력 : ");
string[] strarray2 = Console.ReadLine().Split(' ');
int[] array2 = new int[strarray2.Length];
for (int i = 0; i < strarray2.Length; i++)
{
    array2[i] = int.Parse(strarray2[i]);
}
Console.Write("{ ");
foreach (int a in Common(array1, array2))
{
    Console.Write($"{a}, ");
}
Console.Write("\b\b }");
public static int[] Common(int[] array1, int[] array2)
{
    List<int> list = new List<int>();
    for(int i = 0; i < array1.Length; i++)
    {
        for (int j = 0; j < array2.Length; j++)
        {
            if (array1[i] == array2[j])
            {
                list.Add(array1[i]);
                break;
            }   
        }
    }        
    for(int i =0; i<list.Count; i++)
    {
        for(int j = i + 1; j< list.Count; j++)
        {
            if (list[i] == list[j])
            {
                list.RemoveAt(j);
            }
        }
    }
    return list.ToArray();
}
  • 두 배열의 공통 요소를 List에 추가
    반복문을 통해 동일 요소를 찾아 List.Add로 추가했다.
  • 공통 요소가 List에 2개 이상 있는 경우 중복 제외
    List.RemoveAt 함수로 중복된 요소를 찾으면 뒤의 요소를 삭제하여 구현했다.
  • List를 배열로 변환하고 이를 return값으로 지정
  1. 주어진 숫자와 가장 가까운 수를 구하는 함수
Console.Write("배열 입력 : ");
string[] strarray3 = Console.ReadLine().Split(' ');
int[] array3 = new int[strarray3.Length];
for (int i = 0; i < strarray3.Length; i++)
{
    array3[i] = int.Parse(strarray3[i]);
}
Console.Write("숫자 입력 : ");
int number3 = int.Parse(Console.ReadLine());
Console.WriteLine(Close(array3, number3));
public static int Close(int[] array, int number)
{
    List<int> list = new List<int>();
    int differ;
    for (int i = 0; i < array.Length; i++)
    {               
        if(array[i] - number >= 0) 
        {
            differ = array[i] - number;
            list.Add(differ);
        }
        else
        {
            differ = number - array[i];
            list.Add(differ);
        }                   
    }
    return array[list.IndexOf(list.Min())];
}
  • 배열 요소와 숫자의 차이 절댓값으로 계산
    차이를 differ에 할당하여 절댓값 계산을 if문으로 구현했다.
  • 차이를 List에 추가
    List.Add로 differ를 추가해 배열 요소를 차이의 절댓값으로 변환시켰다.
  • List의 최솟값 위치에 해당하는 배열 요소 출력
    List.Min으로 최솟값을 지정하고 1번에서 구현했지만, 여기서는 내장함수 List.IndexOf를 활용하여 위치를 찾아 해당 배열 요소를 출력하도록 구현했다.
  1. 주어진 배열에서 가장 많이 나타나는 숫자를 구하는 함수
Console.Write("배열 입력 : ");
string[] strarray4 = Console.ReadLine().Split(' ');
int[] array4 = new int[strarray4.Length];
for (int i = 0; i < strarray4.Length; i++)
{
    array4[i] = int.Parse(strarray4[i]);
}
Console.WriteLine(ModeNum(array4));
public static int ModeNum(int[] array)
{
    int mode = 0;
    int count = 0;
    for (int i = 0; i < array.Length; i++)
    {
        int temp = 0;
        for (int j = 0; j < array.Length; j++)
        {
            if (array[i] == array[j])
            {
                temp++;
            }
        }
        if (temp > count)
        {
            count = temp;
            mode = array[i];
        }
    }
    return mode;    
}
  • 배열 중복 요소 찾기
    이중 for문을 활용하여 요소가 몇 번 중복되는지 temp를 활용하여 나타냈다.
  • 중복 요소중 최빈 값 찾기
    더 큰 temp값으로 count를 지정하고 반복이 끝나면 가장 큰 temp값이 count가 되어 최빈값이 되도록 구현했다.
profile
뚠뚠뚠뚠

0개의 댓글