<1. 홀수출력>
코드 확인using System;
using System.Collections.Generic;
using System.Linq;
public class Solution
{
static void Main(string[] args)
{
int i;
for (i =1; i <=100; i++)
CheckOddNum(i);
i = 0; // 초기화
while (i < 100)
{
i++;
CheckOddNum(i);
}
i = 0;
do
{
i++;
CheckOddNum(i);
} while (i < 100);
}
public static void CheckOddNum(int i)
{
if (i % 2 != 0)
Console.WriteLine(i);
}
}
<2. 배열을 사용한 합계 및 평균 계산>
코드 확인using System;
using System.Collections.Generic;
using System.Linq;
public class Solution
{
static void Main(string[] args)
{
//linq를 사용해 받은 입력을 바로 string -> int로 변환 후 배열로 정리
int[] input = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
CheckSumAverage(input);
}
public static void CheckSumAverage(int[] arr)
{
int sum = 0;
foreach (int i in arr)
sum += i;
Console.WriteLine($"Sum: {sum}");
Console.WriteLine($"Average: {sum / arr.Length}");
}
}
입력을 받고 나면 그 이후에는 크게 어려움 없이 답을 낼 수 있으나, 제출해야 하는 평균이 정수값인지 실수값인지에 따라 세심한 확인이 필요할 것으로 보입니다.
+) 추가적인 자주 사용되는 Linq 함수들
OrderBy : 컬렉션을 오름차순(혹은 내림차순) 정렬합니다.
ThenBy : 앞선 정렬 이후 추가적인 정렬 조건을 설정합니다.
GroupBy : 특정 기준에 따라 그뤂으로 묶습니다.
Select : 컬렉션의 각요소를 다른 형태로 변환합니다.
Where : 컬렉션에서 조건에 맞는 요소들을 필터링 합니다.
To~~ : ~~에 해당하는 형태로 변환합니다. (딕셔너리, 배열, 리스트)
Skip : 컬렉션에서 특정 구간의요소를 건너뛰어야 할때 사용 가능합니다.
<3. 팩토리얼 계산>
코드 확인using System;
using System.Collections.Generic;
using System.Linq;
public class Solution
{
static void Main(string[] args)
{
int input = int.Parse(Console.ReadLine());
Factorial(input);
}
public static void Factorial(int num)
{
int ans = 1;
for(int i = 1; i <= num; i++)
ans *= i;
Console.WriteLine($"Factorial of {num} is {ans}");
}
}
DP를 이용:
이전 값을 저장해서 사용하면 중복 연산을 줄일 수 있으나, 메모리를 추가로 사용
재귀 :
스택 오버플로우 문제가 발생할 수 있습니다.
미리 계산한 값 사용 :
미리 배열에 팩토리얼 값을 저장하고 불러오기, O(1)의 시간 복잡도를 가지나, 숫자가 너무 크면 최초 계산에 시간이 많이 걸릴 수 있고, 메모리를 추가적으로 사용합니다.
추가적으로 숫자가 너무 큰 경우에는 "스털링 근사법" 을 사용해서 O(1)에 계산할수 있으나, 값이 완벽하게 정확하지는 않습니다.
정리하자면 아래와 같다.
단순한 경우 반복문(O(n)) 방식 추천
여러 번 계산해야 한다면 메모이제이션(O(n)) 사용
n이 매우 크다면 스털링 근사법(O(1)) 사용
매우 작은 범위(n ≤ 20)에서는 미리 계산한 값 사용(O(1)) 가능
<4. 숫자 맞추기 게임>
코드 확인using System;
using System.Collections.Generic;
using System.Linq;
public class Solution
{
static void Main(string[] args)
{
Random randInt = new Random();
int ans = randInt.Next(1, 100);
while (true)
{
Console.Write("Enter your guess (1-100):");
int input = int.Parse(Console.ReadLine());
if (input > ans)
Console.WriteLine("Too high! Try again.");
else if (input < ans)
Console.WriteLine("Too low! Try again.");
else
{
Console.WriteLine("Congratulations! You guessed the number.");
break;
}
}
}
}
While문 과 if 문을 통해서 조건을 계속해서 확인하고, else문( == ) 에 해당하는 값이 나왔을때 break를 통해 while문을 탈출하도록 작성했습니다. 이때, 게임이 끝나도 계속해서 새로운 숫자로 플레이하고 싶다면, 별도의 함수로 구분해두고, 재귀 형식으로 구현하면 무한히 플레이할 수 있도록 수정할 수 있습니다.
<5. 이중 반복문을 이용한 구구단 출력>
코드 확인using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
public class Solution
{
static void Main(string[] args)
{
Console.WriteLine("Select print mode : 0 = vertical, 1 = horizontal");
PrintMultiplication(int.Parse(Console.ReadLine()));
}
static void PrintMultiplication(int mode)
{
StringBuilder sb = new StringBuilder();
if (mode != 0 && mode != 1)
{
Console.WriteLine("Mode input is Not 0 or 1. Plz input correct num");
PrintMultiplication(int.Parse(Console.ReadLine()));
}
else
{
// 반복되는 write를 제어하는 StringBuilder 사용
for (int i = 2; i <= 9; i++)
{
for (int j = 1; j <= 9; j++)
{
if (mode == 0 && j != 1)
sb.Append($"{j} x {i} = {i * j,-4}");
if (mode == 1)
sb.Append($"{i} x {j} = {i * j,-4}");
}
sb.Append("\n");
}
}
Console.WriteLine(sb);
}
}
<6. 배열 요소의 최대값과 최소값 찾기>
코드 확인using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
public class Solution
{
static int max = int.MinValue;
static int min = int.MaxValue;
static void Main(string[] args)
{
int[] inputArr = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
CheckMaxMin(inputArr);
Console.WriteLine($"Min : {min}, Max : {max}");
}
static void CheckMaxMin(int[] arr)
{
for(int i =0; i < arr.Length; i++)
{
if (arr[i] > max)
max = arr[i];
if (arr[i]< min)
min = arr[i];
}
}
}
<7. 행맨 게임>
코드 확인using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
public class Solution
{
static void Main(string[] args)
{
char[] secretWord = new char[] { 'h', 'a', 'n', 'g', 'm', 'a', 'n' };
int len = secretWord.Length;
char[] guessWord = new char[len];
for (int i = 0; i < len; i++) // 초기화
guessWord[i] = '_';
int attempts = 6;
bool wordGuessed =false;
int leftWord = len;
while (true)
{
if(attempts == 0)
{
Console.WriteLine( "패배하였습니다.");
break;
}
StringBuilder sb = new StringBuilder();
foreach(var value in guessWord)
sb.Append(value + " ");
Console.WriteLine($"현재 완성된 단어는 {sb} 입니다");
Console.WriteLine($"남은 기회는 {attempts}회 입니다");
Console.Write("확인하고 싶은 단어를 입력하세요 : ");
char checkChar = char.Parse(Console.ReadLine());
for(int i =0; i< len; i++)
{
if (secretWord[i] == checkChar)
{
guessWord[i] = checkChar;
leftWord -= 1;
wordGuessed = true;
}
}
if (!wordGuessed)
{
Console.WriteLine($"\n{checkChar}는 없는 문자입니다.\n");
attempts--;
}
else
Console.WriteLine($"\n{checkChar}는 있는 문자입니다.\n");
wordGuessed = false;
if (leftWord == 0)
{
Console.WriteLine($"축하합니다!");
break;
}
}
}
}