240102-TIL

2024. 1. 2. 20:54내일배움캠프

1월2일

주말과 신정을 보내고 나니 아침에 일어나는게 너무 힘들었다.

 

그래도 오늘 할건 해야지

 

졸린 눈을 비비며 컴퓨터 앞에 앉아 뇌를 깨우기 위해 알고리즘 코드카타로 들어가 문제 하나를 풀어보자

 

 

오늘 풀어볼 알고리즘이다

 

하샤드 수란 주어진 수의 각 자릿수 숫자의 합으로 그 수가 나우어지는 양의 정수를 말한다.

 

문제가 요구하는걸 봐보자

 

 

x라는 값을 줄태니깐 이 x가 하샤드 수인지 아닌지 판별하라고 한다.

 

자 얼마전에 나는 무엇을 해결했지?

 

 

고생고생 하면서 풀었던건 기억에 오래 남는 법이지....

 

나는 각 자릿수를 더하는 방법을 알고 있고?

 

각 자릿수를 더해서 x와 나눴을때 나머지가 0이면 하샤드 수이고? 아니면 하샤드 수가 아닌거잖아?

 

바로 코드로 작성해보도록 하자

 

 

항상 자기가 작성한 코드를 말로 설명할 수 있어야 한다고 생각한다. 잘 설명을 해보자

 

주어진 x값을 x.ToString()을 이용해 temp에 담는다.

 

 

그리고 Char.GetNumericValue(temp,i)로 각 자릿수 숫자를 sum에 다 더해준다.

 

다시한번 집고 넘어가자 GetNumericValue란?

 

 

이렇게까지 해두면 죽을때까지 잊어먹을 일은 없겠지??

 

어려운 부분은 끝났다.  이제 중요한건

 

x 와 sum을 나눴을때 나눠 떨어지느냐 그렇지 않느냐만 확인하면 된다.

 

 

나눠 떨어지면? true인 answer을 그대로 반환

 

그렇지 않다면? answer을 false로 바꿔서 반환해주도록 만들어주고 코드를 실행시켜보자

 

 

캬 성장했구나!! 

 

이렇게 문제를 풀고나면 잠이 확 깬다. 

 

잠도 깼으니 지난주에 뭘 했는지 다시 한번 정리해보고 진행중이었던걸 이어나가 보자

 

지난주 부터 나는 Unity의 근간이 되는 언어인 C#을 학습하고 있다.

 

이번주차의 목표는 C#을 학습해 개인과제를 제출하는 것이다.

 

지난주에는 C#의 변수와 자료형 연산자와 문자열 처리 조건문과 반복문을 학습했는데.

 

이 모든걸 TIL에 적는것은 비효율이라고 판단. 학습도중에 내가 어려웠던것 TIL에 정리해두고

 

두고두고 꺼내보면 좋은것들을 골라서 TIL에 작성하고 있었다.

 

오늘도 내가 배운내용 기억해야 할 내용을 메모해보자

Collection

더보기

컬렉션(Collection)은 자료를 모아 놓은 데이터 구조를 의미한다.

 

- 컬렉션은 배열과 비슷한 자료구조

- 배열과는 다르게 크기가 가변적이다

- C#에서는 다양한 종류의 컬렉션을 제공한다.

- System.Collections.Generic 네임스페이스를 추가해야 사용할 수 있다.

 

1. List

-List는 가변적인 크기를 갖는 배열

-List를 생성할 때는 List에 담을 자료형을 지정

 

List<int> numbers = new List<int>(); // 빈 리스트 생성
numbers.Add(1); // 리스트에 데이터 추가
numbers.Add(2);
numbers.Add(3);
numbers.Remove(2); // 리스트에서 데이터 삭제

foreach(int number in numbers) // 리스트 데이터 출력
{
    Console.WriteLine(number);
}

 

2. Dictinary

- 딕셔너리(DIctinary)는 키와 값으로 구성된 데이터를 저장

- 중복된 키를 가질 수 없으며, 키와 값의 쌍을 이루어 데이터를 저장한다.

 

using System.Collections.Generic;

Dictionary<string, int> scores = new Dictionary<string, int>(); // 빈 딕셔너리 생성
scores.Add("Alice", 100); // 딕셔너리에 데이터 추가
scores.Add("Bob", 80);
scores.Add("Charlie", 90);
scores.Remove("Bob"); // 딕셔너리에서 데이터 삭제

foreach(KeyValuePair<string, int> pair in scores) // 딕셔너리 데이터 출력
{
    Console.WriteLine(pair.Key + ": " + pair.Value);
}

3. Stack

- Stack은 후입선출 구조를 가진 자료구조.

Stack<int> stack1 = new Stack<int>();  // int형 Stack 선언

// Stack에 요소 추가
stack1.Push(1);
stack1.Push(2);
stack1.Push(3);

// Stack에서 요소 가져오기
int value = stack1.Pop(); // value = 3 (마지막에 추가된 요소)

4. Queue

- Queue는 선입선출 구조를 가진 자료구조

Queue<int> queue1 = new Queue<int>(); // int형 Queue 선언

// Queue에 요소 추가
queue1.Enqueue(1);
queue1.Enqueue(2);
queue1.Enqueue(3);

// Queue에서 요소 가져오기
int value = queue1.Dequeue(); // value = 1 (가장 먼저 추가된 요소)

5. HashSet

- HashSet은 중복되지 않은 요소들로 이루어진 집합

HashSet<int> set1 = new HashSet<int>();  // int형 HashSet 선언

// HashSet에 요소 추가
set1.Add(1);
set1.Add(2);
set1.Add(3);

// HashSet에서 요소 가져오기
foreach (int element in set1)
{
    Console.WriteLine(element);
}

 

메서드(Method)

더보기

메서드(Method)는 일련의 코드 블록으로, 특정한 작업을 수행하기 위해 사용되는 독립적인 기능 단위이다.

 

★매서드의 중요성★

  • 코드의 재사용성: 메서드를 사용하면 동일한 작업을 반복해서 구현하지 않아도 됩니다. 필요할 때 메서드를 호출하여 작업을 수행할 수 있습니다.
  • 모듈화: 메서드를 사용하여 코드를 작은 단위로 분리하고 관리할 수 있습니다. 각 메서드는 특정한 기능을 수행하므로 코드의 구조가 더욱 명확해집니다.
  • 가독성과 유지보수성: 메서드를 사용하면 코드가 간결해지고 가독성이 좋아집니다. 또한, 코드 수정이 필요한 경우 해당 메서드만 수정하면 되므로 유지보수가 용이해집니다.
  • 코드의 중복 제거: 반복적인 작업을 메서드로 묶어서 사용하면 코드 중복을 방지할 수 있습니다.
  • 코드의 추상화: 메서드를 통해 작업 단위를 추상화하고, 메서드 이름을 통해 해당 작업이 어떤 역할을 하는지 파악할 수 있습니다.

메서드의 구조와 문법

    [접근 제한자] [리턴 타입] [메서드 이름]([매개변수])
    {
        // 메서드 실행 코드
    }

  • 접근 제한자(Access Modifier): 메서드에 접근할 수 있는 범위를 지정합니다. 주로 public, private, protected 등을 사용합니다.
  • 리턴 타입(Return Type): 메서드가 반환하는 값의 데이터 타입을 지정합니다. 반환 값이 없을 경우 void를 사용합니다.
  • 메서드 이름(Method Name): 메서드를 호출하기 위해 사용하는 이름입니다. 호출할 때 이 이름을 사용합니다.
  • 매개변수(Parameters): 메서드에 전달되는 입력 값으로, 필요한 경우 0개 이상의 매개변수를 정의할 수 있습니다.
  • 메서드 실행에 코드(Method Body): 중괄호({}) 안에 메서드가 수행하는 작업을 구현하는 코드를 작성합니다.

 

 

 

 

구조체

더보기

구조체란?

  • 여러 개의 데이터를 묶어서 하나의 사용자 정의 형식으로 만들기 위한 방법입니다.
  • 구조체는 값 형식(Value Type)으로 분류되며, 데이터를 저장하고 필요한 기능을 제공할 수 있습니다.
  • 구조체는 struct 키워드를 사용하여 선언합니다.
  • 구조체의 멤버는 변수와 메서드로 구성될 수 있습니다.

struct Person
{
    public string Name;
    public int Age;

    public void PrintInfo()
    {
        Console.WriteLine($"Name: {Name}, Age: {Age}");
    }
}

 

구조체의 사용 

  Person person1;
  person1.Name = "John";
  person1.Age = 25;
  person1.PrintInfo();

 

오늘은 컬렉션, 메소드, 구조체를 배웠다.

 

슬슬 머리가 아파오지만 정말 중요한 내용이다. 반복 학습을 통해 꼭 기억해서 잘 활용해 보도록 하자.

 

240102 TIL은 여기서 마치도록 하겠다.

'내일배움캠프' 카테고리의 다른 글

240104-TIL  (0) 2024.01.04
240103-TIL  (0) 2024.01.03
231229-TIL  (0) 2023.12.29
231228 -TiL  (0) 2023.12.28
231227-TiL  (0) 2023.12.27