241208

lililllilillll·2024년 12월 8일

개발 일지

목록 보기
14/350

✅ 오늘 한 일


  • Project Etude
  • C# 교과서
  • 백준 1문제


🎮 Project Etude


디자인 계속 다듬어보다가

이 느낌으로 가보기로 함

이제 해야될 거

박자 속도에 맞게 플레이어 이동
박자 맞게 누르면 라이팅 및 이펙트 및 소멸
박자 못 맞추면 게임 오버
개발용 노트 블럭 에디터
클래식 곡 구하기
맵 배경 구하기
튜토리얼 만들기
레벨 선택 화면 만들기
게임 시작 화면 만들기 (피아노 너머로 파란 하늘이 보이고 커텐이 나부끼는 창문, 3D, 
사양 딸리면 영상으로 대체하라는 알림창)
시작할 때 리듬 오프셋 조절



📖 C# 교과서


24 클래스 사용하기

클래스

  • 속성: 데이터
  • 메서드: 로직

클래스의 정의

  • 개체를 생성하는 틀(탬플릿)
  • 무엇인가를 만들어내는 설계도

클래스 레벨의 메서드 호출하기

class ClassNote
{
    static void Run()
    {
        Console.WriteLine("ClassNote 클래스의 Run 메서드");
    }

    static void Main()
    {
        Run(); // 메서드 레벨: 같은 클래스의 메서드 호출
        ClassNote.Run(); // 클래스 레벨: 클래스.메서드(); 형태로 호출
    }
}

static과 정적 메서드

C#에서는 static을 정적으로 표현한다.
다시 말해, static이 붙는 클래스의 모든 멤버는 해당 클래스 내의 누구나 공유해서 접근할 수 있다.
static이 붙는 메서드를 정적 메서드, 공유 메서드라 한다.

정적 메서드와 인스턴스 메서드

class MyFirstClass
{
    static void StaticMethod() => Console.WriteLine("[1] 정적 메서드");

    void InstanceMethod() => Console.WriteLine("[2] 인스턴스 메서드");

    static void Main()
    {
        MyFirstClass.StaticMethod();
        MyFirstClass my = new MyFirstClass();
        my.InstanceMethod();
    }
}

static 붙은 정적 메서드는 그냥 호출해도 되고
static 안 붙은 인스턴스 메서드는 인스턴스 만든 후 해당 인스턴스 개체를 사용하여 호출

24.4 클래스 시그니처

public class Car { }

public 액세스 한정자를 생략하면 기본값인 internal을 갖는다.
internal: 해당 프로그램 내에서 언제든지 접근 가능하다.

클래스 본문인 중괄호 안에는 메서드, 필드, 속성, 생성자, 소멸자 등이 올 수 있다.
이 모두를 가리켜 클래스 멤버라고 한다.

클래스 이름 짓기

클래스 이름은 의미 있는 이름을 사용하면 좋다. 명사를 사용한다.
첫 글자는 꼭 대문자여야 한다. 축약형, 특정 접두사, 언더스코어 같은 특수 문자 쓰지 않는다.

24.5 내장 클래스

인스턴스 생성한 다음에 써야 하는 것도 있고 바로 쓸 수 있는 것도 있고

  • String 클래스: 문자열 처리와 관련한 속성과 메서드 제공
  • StringBuilder 클래스: 대용량 문자열 처리와 관련된 속성 및 메서드 제공
  • Array 클래스: 배열과 관련된 주요 속성 및 메서드 제공
  • Environment 클래스: 프로그램 종료, 시스템 폴더, 닷넷 기준 버전, 운영 체제 버전, 컴퓨터 이름, 사용자 이름, 현재 폴더, 문서 폴더 등
  • Process 클래스: Start() 메서드로 exe 파일 실행 가능
  • Random 클래스: 난수 발생. 사용하려면 인스턴스 생성해야함. (UnityEngine Random이 따로 있어서 이거 쓸 일은 없을듯)
  • Stopwatch 클래스: Start()와 Stop() 메서드를 이용해 프로그램 실행 시간 잴 수 있음. 출력은 timer 클래스의 TotalMilliseconds와 Seconds 같은 속성 사용하면 됨.
  • regex 클래스: 정규식

24.15 is 연산자로 형식 비교하기

개체.GetType() == typeof(형식)의 줄임 표현으로 개체 is 형식이 가능하다.
ex) a is int, b is string

24.16 as 연산자로 형식 변환하기

as 연산자는 특정 데이터를 특정 데이터 형식으로 변환하는 데 사용한다.
해당 데이터 형식이면 반환하고 그렇지 않으면 null을 반환한다.

> object x = 1234;
> string s = x as string;
> s
null
> object x = "1234";
> string s = x as string;
> s
"1234"


⚔️ 백준


2339 석판 자르기

보석 결정체가 옆에 붙어있으면 석판으로 나누기 불가.

불순물 기준으로 영역을 정하던가,
보석 결정체 기준으로 영역을 결정하던가?

불순물의 자르는 방향만 중요한게 아니라 순서도 중요함.
방향은 경우의 수 2^n, 순서는 경우의 수 n!

보석 결정체는 15개까지라고 했으면서
불순물 개수 최대는 안 정해줬으므로 최악의 경우는
n에 399개가 들어가는 것. 브루트 포스 불가능.

보석 결정체 기준으로 나누려고 하면 석판 나누는 경우를 모두 탐색하기가 곤란.
애초에 불순물을 중심으로 나누는 것이기 때문.

그렇다면 불순물을 중심으로 나누는 경우의 수를 하나하나 따져봐야 한다는 건데
그 중에서 보석 결정체를 자르는 경우의 수는 탈락, 끝까지 나눠보니 보석이 2개인 구역이 생기면 탈락.

와 진짜 개어렵네; 아예 감도 안옴.

https://blog.naver.com/jhc9639/221866427886

아니 문제 조건 보니까

석판의 결 때문에 가로 또는 세로 방향으로만 석판을 자를 수 있다. 석판을 자를 때에는 이전에 자른 방향과 같은 방향으로는 자를 수 없다.

이게 있었네; 아오
근데 이렇게 해도 순서 때문에 경우의 수 n! 나오지 않음?

https://choosla.tistory.com/10

각각의 석판 안에 불순물이 없으면서 단 하나의 보석 결정체만이 있도록

이 조건으로 케이스 줄이는 거였네

profile
너 정말 **핵심**을 찔렀어

0개의 댓글