'코딩 문제 풀이' 카테고리의 다른 글

백준 - 2720 세탁소 사장 동혁  (0) 2024.08.13
백준 2566번 최댓값  (0) 2024.08.12
백준-1654 랜선 자르기  (0) 2024.08.12
백준 10994 별 찍기 - 19  (0) 2024.08.09
백준 10990번 별 찍기 -15  (0) 2024.08.08

내 풀이

 

 

 

 

챗 GPT 보안

 

 

코드 설명

  1. 입력 처리:
    • K: 갖고 있는 랜선의 개수입니다.
    • N: 필요한 랜선의 개수입니다.
    • arr: 각 랜선의 길이를 저장하는 배열입니다. 이 배열의 크기는 K입니다.
  2. 이진 탐색 초기화:
    • min = 1: 최소 길이로 설정합니다. 랜선은 길이가 최소 1 이상이므로 1로 시작합니다.
    • max = arr.Max(): 주어진 랜선 중 가장 긴 길이를 max로 설정합니다.
    • result: 가능한 최대 랜선 길이를 저장할 변수입니다.
  3. 이진 탐색 반복:
    • mid: 현재 탐색 중인 랜선 길이의 중간값을 구합니다.
    • count: 현재 mid 길이로 랜선을 잘랐을 때 얻을 수 있는 랜선의 개수를 계산합니다.
  4. 조건문:
    • count >= N: 필요한 랜선 개수 이상이 나오면 result를 업데이트하고, 더 긴 길이를 탐색합니다 (min을 증가).
    • count < N: 필요한 랜선 개수보다 부족하면, 더 짧은 길이를 탐색합니다 (max를 감소).
  5. 결과 출력:
    • 반복이 끝나면, 가능한 최대 랜선 길이가 result에 저장되며 이를 출력합니다.

주의사항

이진 탐색 과정에서 mid 계산 및 count 계산 시 큰 수가 나올 수 있으므로 long 타입을 사용해 오버플로우를 방지합니다.

'코딩 문제 풀이' 카테고리의 다른 글

백준 2566번 최댓값  (0) 2024.08.12
백준 - 2501 약수 구하기  (0) 2024.08.12
백준 10994 별 찍기 - 19  (0) 2024.08.09
백준 10990번 별 찍기 -15  (0) 2024.08.08
백준 1008번 A/B  (0) 2024.08.02

using System;

namespace ConsoleApp_FirstApp
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] lotto = new int[6];
            int i, cnt = 0;
            Random rand = new Random();

            cnt = 0;
            while (cnt < 6)
            {
                int r = rand.Next(1, 46);   // 1 ~ 45의 난수 생성
                for (i = 0; i < cnt; i++) // 중복 검색: 이미 생성된 개수 만큼만 반복
                    if (lotto[i] == r) break;
                if (cnt == i) lotto[cnt++] = r;
            }
            Array.Sort(lotto);    // 크기 순으로 정렬

            for (i = 0; i < 6; i++)
                Console.Write("{0,2}  ", lotto[i]);
            Console.WriteLine();
        }
    }
}

출처: https://coding-abc.kr/148 [coding-abc.kr:티스토리]

유니티 다운로드 방법

 

1. 홈페이지 접속

https://unity.com/kr/download

 

창의적인 프로젝트 시작 및 Unity Hub 다운로드 | Unity

간단한 3단계로 Unity를 다운로드하고 전 세계적으로 가장 큰 인기를 누리는 2D/3D 멀티플랫폼 경험 및 게임 제작용 개발 플랫폼을 사용하세요.

unity.com

 

1-1) 유니티에 회원가입을 하고 로그인 하신뒤에 라이선스를 Personal(무료)로 발급 받아주세요! [매우 쉬움]

 

2. 운영체제에 맞는 링크를 클릭해줍니다.

 

3. 파일이 다운로드되면 바로 실행시켜주고, 저는 다 기본적인 옵션으로 설치를 진행했습니다.

 

4. Unity Hub가 다운로드 되면 로그인 해주고 2024년 7월 29일 현재 기준 최신버전인 2022.3.39f1 버전 인스톨 해줬습니다.

옵션을 선택해서 다운로드 해줍니다.

저는 사진속에 체크돼있는 것들만 체크 했습니다.

 

다운로드중....(오래걸립니다)

5. 위에 옵션에 보시면 Microsoft Visual...블라블라 라고 적힌 최상단 옵션은 에디터입니다.

이 에디터를 같이 설치하기 때문에 유니티 설치 중간에 아래와 같은 화면이 나올텐데요

다른 건 몰라도 유니티를 사용한 게임 개발은 반드시 체크해서 인스톨해주시기 바랍니다. 나머지 옵션들은 읽어보시고 필요하신걸 받아주시면 됩니다.

 

6. 다운로드가 완료되면 이런창이 나올겁니다. 처음 다운로드를 하신 분들이라면 아무것도 나오지 않을텐데, 정상입니다.

이로써 유니티 다운로드는 완료했고 New project 버튼으로 원하는 프로젝트를 생성해서 사용하시면 됩니다.

 

'유니티 공부' 카테고리의 다른 글

normalized 하는 이유  (0) 2024.08.29
오브젝트 이동(2)  (0) 2024.08.29
오브젝트 이동(1)  (0) 2024.08.29
Time.deltaTime이란?  (0) 2024.08.29
유니티의 생명주기(Lifecycle)  (0) 2024.08.29

 

// 패턴 출력 과정에서 시간 초과로 인한 코드 변경

 

StringBuilder 사용: 대량의 데이터를 한 번에 출력하기 위해 StringBuilder를 사용합니다. 이렇게 하면 여러 번의 Console.Write 호출을 줄일 수 있습니다

//using System.Text; 적용해야됌

 

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < size; i++)
        {
            for (int j = 0; j < size; j++)
            {
                sb.Append(pattern[i, j]);
            }
            sb.AppendLine();
        }
        Console.Write(sb.ToString());

 

.

'코딩 문제 풀이' 카테고리의 다른 글

백준 - 2501 약수 구하기  (0) 2024.08.12
백준-1654 랜선 자르기  (0) 2024.08.12
백준 10990번 별 찍기 -15  (0) 2024.08.08
백준 1008번 A/B  (0) 2024.08.02
간단한 숫자 연산  (0) 2024.08.01

전역변수,지역변수

 

C# DateTime 구조체: 날짜와 시간을 다루는 강력한 도구

C#에서 날짜와 시간을 다루는 데 가장 중요한 역할을 하는 것이 DateTime 구조체입니다. 이 글에서는 DateTime 구조체의 기본 개념, 주요 구성 요소, 그리고 활용 방법에 대해 자세히 설명하겠습니다.

1. DateTime 구조체란?

DateTime 구조체는 .NET 프레임워크에서 날짜와 시간을 표현하는 데 사용되는 구조체입니다. 이를 통해 날짜 및 시간 정보를 저장하고 조작할 수 있으며, 다양한 날짜와 시간 관련 작업을 간편하게 수행할 수 있습니다.

2. 주요 구성 요소

DateTime 구조체는 다음과 같은 주요 속성을 가지고 있습니다:

  • Year: 연도를 반환합니다.
  • Month: 월을 반환합니다.
  • Day: 일을 반환합니다.
  • Hour: 시간을 반환합니다.
  • Minute: 분을 반환합니다.
  • Second: 초를 반환합니다.
  • Millisecond: 밀리초를 반환합니다.
  • DayOfWeek: 요일을 반환합니다.
  • DayOfYear: 연중 일을 반환합니다.

3. 기본 생성 및 초기화

DateTime 구조체를 생성하는 방법은 여러 가지가 있습니다. 주로 현재 날짜와 시간을 가져오거나, 특정 날짜와 시간으로 초기화할 수 있습니다.

현재 날짜와 시간 가져오기:

csharp
코드 복사
DateTime now = DateTime.Now; // 현재 날짜와 시간

특정 날짜와 시간으로 초기화하기:

csharp
코드 복사
DateTime specificDate = new DateTime(2024, 8, 9); // 2024년 8월 9일 DateTime specificDateTime = new DateTime(2024, 8, 9, 14, 30, 0); // 2024년 8월 9일 14시 30분

4. 날짜 및 시간 조작

DateTime 구조체는 날짜와 시간을 쉽게 조작할 수 있는 다양한 메서드를 제공합니다. 주로 날짜를 더하거나 빼는 작업이 자주 사용됩니다.

날짜 추가 및 빼기:

csharp
코드 복사
DateTime today = DateTime.Today; // 오늘 날짜 DateTime tomorrow = today.AddDays(1); // 내일 DateTime yesterday = today.AddDays(-1); // 어제 DateTime nextMonth = today.AddMonths(1); // 다음 달

시간 추가 및 빼기:

csharp
코드 복사
DateTime now = DateTime.Now; // 현재 시간 DateTime inTwoHours = now.AddHours(2); // 2시간 후 DateTime oneMinuteAgo = now.AddMinutes(-1); // 1분 전

5. 날짜 및 시간 비교

DateTime 구조체는 날짜와 시간을 비교할 수 있는 다양한 메서드를 제공합니다.

비교 작업:

csharp
코드 복사
DateTime date1 = new DateTime(2024, 8, 9); DateTime date2 = new DateTime(2024, 8, 10); bool isEqual = date1.Equals(date2); // 날짜가 같은지 확인 bool isEarlier = date1 < date2; // date1이 date2보다 이전인지 확인 bool isLater = date1 > date2; // date1이 date2보다 이후인지 확인

6. 포맷팅과 파싱

DateTime 구조체는 날짜와 시간을 문자열로 변환하거나 문자열을 날짜와 시간으로 변환하는 기능을 제공합니다.

문자열로 변환하기:

csharp
코드 복사
DateTime now = DateTime.Now; string formattedDate = now.ToString("yyyy-MM-dd HH:mm:ss"); // "2024-08-09 14:30:00"

문자열을 날짜로 변환하기:

csharp
코드 복사
string dateString = "2024-08-09 14:30:00"; DateTime parsedDate = DateTime.Parse(dateString);

서식 지정:

csharp
코드 복사
DateTime now = DateTime.Now; string shortDate = now.ToString("d"); // 짧은 날짜 형식 string longDate = now.ToString("D"); // 긴 날짜 형식 string customDate = now.ToString("MMMM dd, yyyy"); // "August 09, 2024"

7. 결론

C#의 DateTime 구조체는 날짜와 시간을 처리하는 데 필수적인 도구입니다. 다양한 메서드와 속성을 통해 날짜와 시간을 생성, 조작, 비교, 포맷팅할 수 있으며, 이를 통해 시간 기반의 다양한 작업을 효과적으로 처리할 수 있습니다. 날짜와 시간이 필요할 때, DateTime 구조체의 기능을 잘 활용해 보세요.

 

이 코드는 C#에서 델리게이트(delegate)와 람다 표현식(lambda expression)을 사용하여 함수를 정의하는 방법을 보여줍니다. Func<int, string> 타입의 델리게이트를 사용하고 있으며, 이 델리게이트는 정수(int)를 입력받아 문자열(string)을 반환하는 람다 표현식을 나타냅니다. 아래에 이 코드에 사용된 개념들을 설명하고 블로그에 적기 좋은 형식으로 정리해 보겠습니다.


C#에서 Func<int, string>과 람다 표현식 사용하기

C#에서는 델리게이트(delegate)를 사용하여 메서드나 익명 메서드를 변수처럼 다룰 수 있습니다. 델리게이트는 특정한 메서드 시그니처(매개변수와 반환 타입)를 가진 메서드 참조를 나타냅니다. 이번 포스트에서는 Func<T, TResult> 델리게이트와 람다 표현식을 사용하여 간단한 함수를 정의하는 방법을 살펴보겠습니다.

1. Func<T, TResult> 델리게이트

Func<T, TResult>는 C#에서 제공하는 기본 델리게이트 중 하나입니다. 이 델리게이트는 하나 이상의 매개변수를 받고, 결과를 반환하는 메서드를 나타낼 수 있습니다.

  • T: 입력 매개변수의 타입을 나타냅니다.
  • TResult: 반환 타입을 나타냅니다.

예를 들어, Func<int, string>은 정수형 매개변수를 받아 문자열을 반환하는 메서드를 참조할 수 있습니다.

2. 람다 표현식(Lambda Expression)

람다 표현식은 익명 메서드를 간결하게 표현하는 방법입니다. 람다 표현식의 일반적인 형식은 다음과 같습니다:

csharp
코드 복사
(parameters) => expression
  • parameters: 입력 매개변수 목록입니다.
  • expression: 매개변수를 이용하여 실행할 코드입니다.

람다 표현식을 사용하면 간단한 메서드를 짧고 명확하게 표현할 수 있습니다.

3. 예제 코드

아래의 코드는 정수를 입력받아 그 값을 2배로 곱한 후, 그 결과를 문자열로 변환하는 함수를 람다 표현식을 이용하여 정의한 것입니다.

csharp
코드 복사
Func<int, string> square = x => (x * 2).ToString();

코드 설명

  • Func<int, string>: 이 델리게이트는 정수형 매개변수 x를 받아 문자열을 반환하는 함수를 나타냅니다.
  • x => (x * 2).ToString(): 람다 표현식으로 정의된 함수입니다. 이 함수는 입력된 정수 x를 받아, 그 값을 2배로 곱한 후, 이를 문자열로 변환하여 반환합니다.

4. 사용 예제

이제 위에서 정의한 함수를 호출해 보겠습니다.

csharp
코드 복사
int input = 5; string result = square(input); Console.WriteLine(result); // 출력: "10"

위 코드에서 input 값으로 5를 전달하면, 람다 표현식에 의해 5 * 2는 10이 되고, 최종적으로 "10"이라는 문자열이 result에 저장됩니다.

5. 결론

Func<T, TResult> 델리게이트와 람다 표현식을 사용하면 간단한 함수를 매우 간결하게 정의할 수 있습니다. 이 방법은 코드의 가독성을 높이고, 불필요한 메서드 선언을 줄이는 데 유용합니다. C#에서 람다 표현식을 적극 활용하여 더 깔끔한 코드를 작성해 보세요!

 

///// 추가 정리 

 

C#에서 람다식(Lambda Expression)은 익명 함수를 간결하게 표현하는 방식입니다. 
람다식은 매개변수를 받아서, 특정 작업을 수행하고, 결과를 반환하는 함수를 정의하는 데 사용됩니다. 
이러한 람다식은 특히 LINQ 쿼리, 컬렉션의 데이터 조작, 이벤트 처리 등에 많이 사용됩니다.

람다식 기본 구조
람다식의 기본 구조는 다음과 같습니다:

람다식의 기본구조

 

parameters: 함수의 매개변수 목록입니다. 매개변수가 하나인 경우 괄호를 생략할 수 있습니다.
=>: 람다 연산자, 'goes to'로 읽습니다.
expression_or_statement_block: 실행할 식이나 문 블록입니다. 단일 식인 경우 중괄호 {}를 생략할 수 있습니다.

 

람다식 예제


단일 식 람다식

단일 식 람다식

 

Func<int, int>은 입력과 출력이 모두 int 타입인 함수를 나타냅니다.
x => x * x는 x를 입력으로 받아 x * x 값을 반환하는 람다식입니다.


매개변수가 없는 람다식

매개변수가 없는 람다식

 

Action은 매개변수가 없고 반환 값도 없는 람다식을 나타냅니다.
() => Console.WriteLine("Hello, World!")는 인수가 없고 Hello, World!를 출력하는 람다식입니다.


여러 매개변수를 가진 람다식

매개변수가 여러개!

 

★Func<int, int, int>은 두 개의 int를 입력으로 받아 int를 반환하는 함수입니다.★
(x, y) => x + y는 두 개의 매개변수를 받아 더한 값을 반환하는 람다식입니다.


문 블록을 가진 람다식

{} 문 블록을 가진 람다식

이 예제에서는 여러 줄의 코드를 실행하기 위해 중괄호 {}를 사용했습니다.
return 키워드를 사용해 값을 반환할 수 있습니다.


람다식과 델리게이트
람다식은 델리게이트와 함께 자주 사용됩니다. C#에서는 Func<>, Action<>, Predicate<>와 같은 내장 델리게이트 타입을 활용하여 람다식을 델리게이트로 사용합니다.

Func<...> : 반환 값이 있는 델리게이트 타입입니다.

    예: Func<int, int, string>은 두 개의 int를 입력받아 string을 반환하는 함수입니다.


Action<...> : 반환 값이 없는 델리게이트 타입입니다.
    예: Action<int, string>은 int와 string을 입력받아 아무 것도 반환하지 않는 함수입니다.


Predicate<...> : 입력을 받아 bool을 반환하는 델리게이트 타입입니다.
    예: Predicate<int>는 int를 입력받아 bool을 반환하는 함수입니다.


람다식의 활용


LINQ와 람다식

LINQ

 

Where 메서드는 Predicate<int> 델리게이트를 매개변수로 받아 리스트에서 짝수만 필터링합니다.
n => n % 2 == 0은 입력된 숫자가 짝수인지 확인하는 람다식입니다.


이벤트 처리와 람다식

 

Click 이벤트는 EventHandler 델리게이트를 사용합니다.
(sender, e) => Console.WriteLine("Button clicked!")는 이벤트가 발생했을 때 실행될 코드를 람다식으로 표현한 것입니다.

람다식의 장점
간결성: 코드가 짧고 간결해져서 가독성이 좋아집니다.
유연성: 코드 내에서 인라인으로 간단하게 익명 함수를 정의할 수 있어, 굳이 메서드를 정의하지 않아도 됩니다.
고차 함수와의 호환성: 다른 함수의 매개변수로 전달될 때 유용합니다.

람다식의 단점
디버깅 어려움: 너무 복잡한 람다식은 디버깅이 어렵고, 가독성을 해칠 수 있습니다.
복잡한 로직에는 부적합: 여러 줄의 복잡한 로직을 수행해야 하는 경우, 별도의 메서드를 정의하는 것이 더 적합할 수 있습니다.


람다식은 C#에서 매우 강력한 기능으로, 특히 컬렉션을 다루거나 이벤트를 처리할 때 
유용하게 사용됩니다. 적절한 상황에서 활용하면 코드의 가독성과 효율성을 크게 향상시킬 수 있습니다.

 

.

'c# 기초 문법' 카테고리의 다른 글

C# 메서드(2)  (0) 2024.08.08
c# 메서드(1)  (0) 2024.08.07
c# 배열의 선언과 초기화방법  (0) 2024.08.07
c# 배열뒤집기  (0) 2024.08.07
c# 배열 - array, list  (0) 2024.08.07

'코딩 문제 풀이' 카테고리의 다른 글

백준 - 2501 약수 구하기  (0) 2024.08.12
백준-1654 랜선 자르기  (0) 2024.08.12
백준 10994 별 찍기 - 19  (0) 2024.08.09
백준 1008번 A/B  (0) 2024.08.02
간단한 숫자 연산  (0) 2024.08.01

+ Recent posts