문제: 두 개의 정수 n과 m이 주어집니다.
별(*)을 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
string[] s = Console.ReadLine().Split();
int n = int.Parse(s[0]);
int m = int.Parse(s[1]);
for (int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
Console.Write("*");
}
Console.WriteLine();
}
}
}
}

문제: 함수 'solution'은 정수 x와 자연수 n을 입력 받아,
x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다.
다음 제한 조건을 보고, 조건을 만족하는 함수 'solution'을 완성해주세요.
(조건1) x는 -10000000 이상, 10000000 이하인 정수입니다.
(조건2) n은 1000 이하인 자연수입니다.
public class Solution
{
public long[] solution(int x, int n)
{
long[] answer = new long[n];
for (int i = 0; i < n; i++)
{
answer[i] = (long)x * (i + 1);
}
return answer;
}
}


using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int input = int.Parse(Console.ReadLine());
int start = input; //초기값
int count = 0;
while (true)
{
int a = input / 10; //앞자리
int b = input % 10; //뒷자리
input = (a * 10) + (a + b) % 10; //재결합
count++;
if (input == start)
{
break;
}
}
Console.WriteLine(count);
}
}
}

using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int[] full = { 1, 1, 2, 2, 2, 8 }; //체스판 원본
string[] get = Console.ReadLine().Split(); //얻은 체스말
for (int i = 0; i < full.Length; i++)
{
full[i] -= int.Parse(get[i]); //체스판 원본에서 얻은 체스말
}
for (int i = 0; i < full.Length; i++)
{
Console.Write(full[i] + " ");
}
}
}
}
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int[] full = { 1, 1, 2, 2, 2, 8 }; //체스판 원본
string[] get = Console.ReadLine().Split(); //얻은 체스말
int[] getParse = Array.ConvertAll(get, int.Parse); //배열을 미리 형변환해서 새로 만듦
for (int i = 0; i < full.Length; i++)
{
full[i] -= getParse[i]; //체스판 원본에서 얻은 체스말
}
for (int i = 0; i < full.Length; i++)
{
Console.Write(full[i] + " ");
}
}
}
}
알아야 하는 것:
return true는 함수를 진행시킵니다.
return false는 함수를 빠져나옵니다.
break는 반복문만 빠져나옵니다.
로직 이해하기:
(1) 정수 0, 1은 i보다 작기 때문에 걸러집니다.
(2) 정수 2는 허용합니다.
(3) 정수 3보다 큰 값 중, 짝수는 while문(n%i==0)에서 걸러집니다.
(4) 특정한 정수가 while문의 elif까지 문제없이 도달했을때 n이 i제곱보다 값이 크다면 i의 값을 1올리고 다시 반복합니다.
n에 5를 넣어봅시다.
i^2 4보다 크므로 break를 무시하고 i++을 실행, i는 3이되고 함수는 처음으로 돌아갑니다.
이후 elif에서 5<3*3 으로 break에 걸려 5는 while문을 성공적으로 빠져나오고 return true되어 res에 값이 추가됩니다.
이 규칙으로 20까지 실행보면 2, 3, 5, 7, 11, 13, 17, 19가 나옵니다.
이 코드는 소수를 구하는 함수이며 이 값들은 res+=i로 모두 합쳐집니다.
문제에서 요구하는 res의 값이 합인 77이 정답입니다.
코드는 대부분 규칙성을 가지고 있어 20까지 일일히 넣지 않더라도 2, 3, 5, 7 에서 대부분 알아차렸을 것 같습니다.

알아야 하는 것:
while은 0이 아닌 값이 들어오면 무한하게 반복됩니다.
로직 이해하기:
(1) while (n1 != n2)도 무한히 반복하지만 만약 두 값이 같아지면 정지하게 됩니다.
(2) n1이 크면 n1 - n2를 합니다.
(3) n2가 크면 n2 - n1을 합니다.
(4) 서로 값이 같아질 때까지 큰 값에서 작은 값을 빼다보면 n1 == n2가 되며 while문을 탈출합니다
(5) 그 때 n1의 값은 결과가 될 것입니다.
344 (n1) - 215 (n2) = 129 (n1)
215 (n2) - 129 (n1) = 86 (n2)
129 (n1) - 86 (n2) = 43 (n1)
86 (n2) - 43 (n1) = 43 (n2)
n1==n2의 값인 43이 정답입니다.