서론
저번주까지만 해도 유니티 내 UI와 씨름하며 눈물을 흘리던 나는 내 길이 아닌가 고민을 하며 집들이에 가서 술을 마시고 놀았다. 헤헤. 사실 내 길 맞음. 난 여기 없으면 안감. 못감.
그러다 오늘 C# 문법 강의를 듣기 시작했는데 진짜 내가 아는척하고싶어서 엉덩이가 들썩거린건 처음이다...
하... 최고야.. 이게 알고리즘 공부한 맛이지....
물론 비전공자가 많다보니 엄청 기초부터 가르쳐주시는데 나는 진짜 4년내내 듣고, 또 나 혼자 독학으로 공부하면서 보던걸 들으니깐 지루하긴 해도 아는거라서 너무 행복해....
그래서 더 열심히 하게되고 처음으로.. 질문을 해봤다.. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 사실 별거 아닌 질문이긴 했는데 다른 동기분께서 대답해주셨다.
Random.Next와 Random.Range의 차이
그렇게 어려운건 아니고 그냥 시스템에 내장되어 사용할 수 있는게 뭔지에 따라 다른 것 같았다.
내가 int로 반환하는 Range를 자주 사용하는데 이게 Next랑 진짜 똑같은 값을 내놓기때문에 무슨 차이지? 싶었다.
근데 사용할 수 있는 그게 나뉘는거였다니 이번에 알게되어서 좋다! 질문... 많이 해야징....
강의는 1주차 2주차를 둘다 들었는데 1주차 과제는 쉬워서 블로그에는 안올려도될 것 같고 2주차 부터는 도움이 될만한 글일 듯 하여 올린다.
그리고 또 팀장됨
아나 저번주에는 자진 팀장 했는데
이번에는 추하게 안한다고 빼다가 뽑기로 당첨됨;;
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
그래서 우리는 모든것을 도박으로 정하는 팀으로 컨셉을 정했다....... 화이팅!!!!!!!
본론
[ 구구단 출력하기 ]
- 1부터 9까지의 숫자를 각각 1부터 9까지 곱한 결과를 출력하는 프로그램을 작성해보세요.
using System.Text;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= 9; i++)
{
for(int j = 1; j <= 9; j++)
{
sb.AppendLine($"{i} x {j} = {i*j}");
}
}
Console.Write( sb.ToString() );
}
}
}
[ 별 찍기 ]
- 오른쪽으로 기울어진 직각삼각형 출력하기:
- 이 부분에서는 for 루프를 사용하여 오른쪽으로 기울어진 직각삼각형을 출력하는 프로그램을 작성해야 합니다. 삼각형의 높이는 5입니다.
- 역직각삼각형 출력하기:
- 역직각삼각형을 출력하는 프로그램을 작성해야 합니다. 이 삼각형의 높이 역시 5입니다.
- 피라미드 출력하기:
- 피라미드를 출력하는 프로그램을 작성해야 합니다. 이 피라미드의 높이는 5입니다.
using System.Text;
namespace ConsoleApp1
{
internal class Program
{
// 별찍기
static void Main(string[] args)
{
for (int i = 1; i <= 5; i++)
{
for(int j = 1; j <= i; j++)
{
Console.Write("*");
}
Console.WriteLine();
}
Console.WriteLine();
for (int i = 5;i >= 1; i--)
{
for (int j = 1; j <= i; j++)
{
Console.Write("*");
}
Console.WriteLine();
}
Console.WriteLine();
for(int i = 1; i <= 5; i++)
{
for(int j = 1; j <= 5 - i; j++)
{
Console.Write(" ");
}
for(int k = 1;k <= 2 * i - 1; k++)
{
Console.Write("*");
}
Console.WriteLine();
}
}
}
}
이미 풀었던 문제라 쉽게 풀었다.
> 내 블로그 링크: https://milkyquartz.tistory.com/35
[ 최대값, 최소값 찾기 ]
- 사용자로부터 일련의 숫자를 입력받아, 그 중에서 최대값과 최소값을 찾는 프로그램을 작성해보세요.
1. 내 코드
using System;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
int n = 5;
int min = int.MaxValue;
int max = int.MinValue;
for (int i = 0; i < n; i++)
{
Console.Write("숫자를 입력하세요: ");
int num = int.Parse(Console.ReadLine());
if(num > max)
{
max = num;
}
if(num < min)
{
min = num;
}
}
Console.Write($"최대값:{max}\n최소값:{min}");
}
}
}
2. 풀이 코드
using System;
class Program
{
static void Main()
{
int[] numbers = new int[5]; // 5개의 정수를 저장할 배열 선언
for(int i = 0; i < 5; i++)
{
Console.Write("숫자를 입력하세요: "); // 사용자에게 숫자 입력 요청
numbers[i] = int.Parse(Console.ReadLine()); // 사용자가 입력한 값을 배열에 저장
}
int max = numbers[0]; // 최대값을 배열의 첫 번째 요소로 초기화
int min = numbers[0]; // 최소값을 배열의 첫 번째 요소로 초기화
for(int i = 1; i < 5; i++)
{
if(numbers[i] > max) // 현재 요소가 최대값보다 크다면
{
max = numbers[i]; // 현재 요소를 새로운 최대값으로 설정
}
if(numbers[i] < min) // 현재 요소가 최소값보다 작다면
{
min = numbers[i]; // 현재 요소를 새로운 최소값으로 설정
}
}
Console.WriteLine("최대값: " + max); // 계산된 최대값 출력
Console.WriteLine("최소값: " + min); // 계산된 최소값 출력
}
}
배열에 담아서 최대값, 최소값을 구하셨는데 나는 그렇게 안했다. 근데 뭐 이건 어떻게든 풀 수 있는거라 그냥 다른 풀이일뿐이라고 생각한당.
[ 소수 판별하기 ]
- 사용자로부터 숫자를 입력받아 그 숫자가 소수인지 아닌지를 판별하는 프로그램을 작성해보세요.
using System.Text;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
Console.Write("숫자를 입력하세요: "); // 사용자에게 숫자 입력 요청
int num = int.Parse(Console.ReadLine()); // 사용자가 입력한 값을 정수로 변환하여 저장
if (IsPrime(num)) // 입력 받은 숫자가 소수라면
{
Console.WriteLine(num + "은 소수입니다."); // 소수임을 출력
}
else // 소수가 아니라면
{
Console.WriteLine(num + "은 소수가 아닙니다."); // 소수가 아님을 출력
}
}
private static bool IsPrime(int num)
{
if (num <= 1) return false;
else if (num <= 3) return true;
else if (num % 2 == 0 || num % 3 == 0) return false;
for (int i = 5; i * i <= num; i += 6)
{
if (num % i == 0 || num % (i + 2) == 0) return false;
}
return true;
}
}
}
2. 풀이 코드
using System;
class Program
{
// 주어진 숫자가 소수인지 판별하는 함수
static bool IsPrime(int num)
{
if (num <= 1) // 1보다 작거나 같은 수는 소수가 아니다.
{
return false;
}
for (int i = 2; i * i <= num; i++) // 2부터 숫자의 제곱근까지만 확인한다.
{
if (num % i == 0) // 숫자가 i로 나누어 떨어진다면 소수가 아니다.
{
return false;
}
}
return true; // 소수인 경우
}
static void Main()
{
Console.Write("숫자를 입력하세요: "); // 사용자에게 숫자 입력 요청
int num = int.Parse(Console.ReadLine()); // 사용자가 입력한 값을 정수로 변환하여 저장
if (IsPrime(num)) // 입력 받은 숫자가 소수라면
{
Console.WriteLine(num + "은 소수입니다."); // 소수임을 출력
}
else // 소수가 아니라면
{
Console.WriteLine(num + "은 소수가 아닙니다."); // 소수가 아님을 출력
}
}
}
나도 처음에는 풀이 코드처럼 풀었는데 백준 알고리즘을 많이 풀면서 더 효율적인 소수 찾는 방법을 알게되었다.
굳굳
저의 백준 풀이에 많이 있던 알고리즘 입니당! 헤헤 수월하네용
> 내 블로그 링크: https://milkyquartz.tistory.com/161
[ 숫자 맞추기 ]
컴퓨터는 1에서 100까지의 숫자를 임의로 선택하고, 사용자는 이 숫자를 맞추어야 합니다. 사용자가 입력한 숫자가 컴퓨터의 숫자보다 크면 "너무 큽니다!"라고 알려주고, 작으면 "너무 작습니다!"라고 알려줍니다. 사용자가 숫자를 맞추면 게임이 종료됩니다.
- 랜덤 클래스
- Random random = new Random(); int numberToGuess = random.Next(1, 101);
using System.Text;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("숫자 맞추기 게임을 시작합니다. 1에서 100까지의 숫자 중 하나를 맞춰보세요.");
Random random = new Random();
int result = random.Next(1, 101);
int count = 0;
while (true)
{
Console.Write("숫자를 입력하세요: ");
int num = int.Parse(Console.ReadLine());
if (num == result) break;
else if(num > result)
{
Console.WriteLine("너무 큽니다!");
count++;
}
else
{
Console.WriteLine("너무 작습니다!");
count++;
}
}
Console.Write($"축하합니다! {count}번 만에 숫자를 맞추었습니다.");
}
}
}
[ 틱택토 (콘솔) ]
- 3빙고 게임 같은거
using System;
namespace ConsoleApp1
{
internal class Program
{
public static char[,] board = {{'1', '2', '3'},{'4', '5', '6'},{'7', '8', '9'}};
static void Main(string[] args)
{
Console.WriteLine("플레이어 1: X 와 플레이어 2: O");
int index = 0;
while (true)
{
// 여긴 답지보고 수정했습니다.. 헤헤 선까지 쳐야하는거 몰랐네용
//for (int i = 0; i < 3; i++)
//{
// for(int j = 0; j < 3; j++)
// {
// Console.Write(board[i, j] + " ");
// }
// Console.WriteLine();
//}
Console.WriteLine(" | | ");
Console.WriteLine(" {0} | {1} | {2} ", board[0,0], board[0,1], board[0,2]);
Console.WriteLine("_____|_____|_____");
Console.WriteLine(" | | ");
Console.WriteLine(" {0} | {1} | {2} ", board[1,0], board[1,1], board[1,2]);
Console.WriteLine("_____|_____|_____");
Console.WriteLine(" | | ");
Console.WriteLine(" {0} | {1} | {2} ", board[2,0], board[2,1], board[2,2]);
Console.WriteLine(" | | ");
if (index % 2 == 0)
{
Console.WriteLine("플레이어 1의 차례");
int n1 = int.Parse(Console.ReadLine());
CheckMarker(n1, 'X'); // 숫자를 X로 바꿔주는 함수
if (CheckResult('X')) // 빙고되는지 확인하는 함수
{
Console.WriteLine("플레이어 1 승리");
break;
}
}
else
{
Console.WriteLine("플레이어 2의 차례");
int n2 = int.Parse(Console.ReadLine());
CheckMarker(n2, 'O');
if (CheckResult('O'))
{
Console.WriteLine("플레이어 2 승리");
break;
}
}
if(index == 8)
{
Console.WriteLine("무승부");
break;
}
index++;
}
}
private static bool CheckResult(char marker)
{
for (int i = 0; i < 3; i++)
{
if (board[i, 0] == marker && board[i, 1] == marker && board[i, 2] == marker)
{
return true;
}
if (board[0, i] == marker && board[1, i] == marker && board[2, i] == marker)
{
return true;
}
}
if ((board[0,0] == marker && board[1, 1] == marker && board[2, 2] == marker))
{
return true;
}
else if ((board[0, 2] == marker && board[1, 1] == marker && board[2, 0] == marker))
{
return true;
}
return false;
}
private static void CheckMarker(int n, char marker)
{
for (int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
if (board[i,j] == n.ToString()[0])
{
board[i,j] = marker;
return;
}
}
}
}
}
}
2. 풀이 코드
namespace _2_6
{
internal class Program
{
static char[] arr = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
static int player = 1;
static int choice;
static int flag = 0;
static void Main(string[] args)
{
do
{
Console.Clear();
Console.WriteLine("플레이어 1: X 와 플레이어 2: O");
Console.WriteLine("\n");
if (player % 2 == 0)
{
Console.WriteLine("플레이어 2의 차례");
}
else
{
Console.WriteLine("플레이어 1의 차례");
}
Console.WriteLine("\n");
Board();
string line = Console.ReadLine();
bool res = int.TryParse(line, out choice);
if(res == true)
{
if (arr[choice] != 'X' && arr[choice] != 'O')
{
if(player % 2 == 0)
{
arr[choice] = 'O';
}
else
{
arr[choice] = 'X';
}
player++;
}
else
{
Console.WriteLine("죄송합니다. {0} 행은 이미 {1}로 표시되어 있습니다.", choice, arr[choice]);
Console.ReadLine();
}
}
else
{
Console.WriteLine("숫자를 입려해주세요.");
}
flag = CheckWin();
}
while (flag != -1 && flag != 1);
if(flag == 1)
{
Console.WriteLine("플레이어 {0}이(가) 이겼습니다.", (player % 2) + 1);
}
else
{
Console.WriteLine("무승부");
}
Console.ReadLine();
}
static void Board()
{
Console.WriteLine(" | | ");
Console.WriteLine(" {0} | {1} | {2} ", arr[1], arr[2], arr[3]);
Console.WriteLine("_____|_____|_____");
Console.WriteLine(" | | ");
Console.WriteLine(" {0} | {1} | {2} ", arr[4], arr[5], arr[6]);
Console.WriteLine("_____|_____|_____");
Console.WriteLine(" | | ");
Console.WriteLine(" {0} | {1} | {2} ", arr[7], arr[8], arr[9]);
Console.WriteLine(" | | ");
}
static int CheckWin()
{
// 가로 승리 조건
if (arr[1] == arr[2] && arr[2] == arr[3])
{
return 1;
}
else if (arr[4] == arr[5] && arr[5] == arr[6])
{
return 1;
}
else if (arr[7] == arr[8] && arr[8] == arr[9])
{
return 1;
}
// 세로 승리 조건
else if (arr[1] == arr[4] && arr[4] == arr[7])
{
return 1;
}
else if (arr[2] == arr[5] && arr[5] == arr[8])
{
return 1;
}
else if (arr[3] == arr[6] && arr[6] == arr[9])
{
return 1;
}
// 대각선 승리조건
else if (arr[1] == arr[5] && arr[5] == arr[9])
{
return 1;
}
else if (arr[3] == arr[5] && arr[5] == arr[7])
{
return 1;
}
// 무승부
else if (arr[1] != '1' && arr[2] != '2' && arr[3] != '3' && arr[4] != '4' && arr[5] != '5' && arr[6] != '6' &&
arr[7] != '7' && arr[8] != '8' && arr[9] != '9')
{
return -1;
}
else { return 0; }
}
}
}
나는 2차원 배열로 했고 풀이 코드는 1차원 배열로 했다. 개인 취향
오늘의 회고
튜터님들이 분명 자책하지 말라했는데..
왜이렇게 세상에는 부지런하고 똑똑이들이 많은거야..
나는 게으르고 안똑똑이인데...
개인 프로젝트를 벌써 시작한 사람들이 많다니..
난 아직 강의도 다 안들었는데..!!!!
오늘안에 3주차 강의 과제까지 마무리하고 자야겠다 오늘의 TIL 끝~
사실 어려워서 자려고ㅜ접었읍니다..
내가 알게된 것도 공유하는 착한 사람.. 이 되고싶은데 오지라퍼 될까봐 소심하게 올리게된다.
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ ㅜㅜㅜㅜ
'Record > TIL' 카테고리의 다른 글
[Unity] 추상클래스 (2) | 2024.04.24 |
---|---|
[Unity] 추상클래스와 파일 세분화 중요성 (2) | 2024.04.23 |
[Unity] 첫 프로젝트 끝 싱숭생숭 (+KPT회고) (2) | 2024.04.19 |
[Unity] 난 감자 돌맹이 방구 코딱지 (4) | 2024.04.18 |
[Unity] 술 한잔 마셨습니다.. (2) | 2024.04.17 |