콘텐츠로 이동

TIL - 2024. 09.

이전 페이지

2024. 10. 01

C# permutation 만들기

c# - Listing all permutations of a string/integer - Stack Overflow

위의 답변들 중 주어진 아이템들 중 특정한 개수만 써서 permutation을 만드는 방법에 응용할 수 있을 만한 코드는 아래 첨부한 것밖에 없었다.

static IEnumerable<IEnumerable<T>>
    GetPermutations<T>(IEnumerable<T> list, int length)
{
    if (length == 1) return list.Select(t => new T[] { t });

    return GetPermutations(list, length - 1)
        .SelectMany(t => list.Where(e => !t.Contains(e)),
            (t1, t2) => t1.Concat(new T[] { t2 }));
}

// GetPermutations(Enumerable.Range(0,n),k) 같은 방법으로 사용 가능

인덱스로 쓸 숫자들로 먼저 permutation을 만든 다음 주어진 리스트에서 permutation에 들어있는 인덱스에 해당하는 아이템을 뽑아서 쓰는 방식으로 활용하면 좋을듯.

2024. 10. 02

c# DistinctBy

IEnumerable을 받아서 아이템에 특정한 함수를 먹였을때 나온 결과가 distinct하도록 거른다. 16499번: 동일한 단어 그룹화하기 (acmicpc.net) 문제를 풀때 문자열의 문자를 sort해서 결과가 같은 값들을 한 번만 count할때 활용했다.

그런데 그렇다면 특정 함수를 먹였을때 distinct하지만 아이템 자체는 서로 다른 경우에는 DistinctBy는 어떤 값을 리턴할까? 아래 실험을 보면 distinct한 값 중 첫 번째 아이템을 남기는 것으로 보인다.

string s() => Console.ReadLine();
var a = new int[int.Parse(s())].Select(_ => s());
foreach (var x in a.DistinctBy(j => string.Concat(j.OrderBy(i => i)))) Console.WriteLine(x);

// 주어진 인풋:
// 4
// cat
// dog
// god
// tca

// 리턴 값:
// cat
// dog

2024. 10. 04

c# winform 텍스트를 입력받아서 검색하기

c# with visual studio windows form | How to search a textbox input into a file and return the search - Stack Overflow

이런 식으로 구현하면 바로 되겠구나 아이디어 잡은 정도의 의미. 실제 구현에 ToLower 쓰면 편하다는 것도 리마인드.

`item.ToLower().Contains(text_SearchTerm.Text.ToLower())`

c# winform oauth2 아이디어

How to implement oauth2 in C# winforms - CodeProject

큰 아이디어 참고용.

2024. 10. 05

2024. 10. 06

c# AutoCAD layout 만들기

Creating an AutoCAD layout with custom plot and viewport settings using .NET - Through the Interface (keanw.com)

다음의 내용들을 다룬다.

  • layout 만들기(이름 중복 피하는 방법도 구현되어 있다.)
  • viewport 크기 세팅
  • plot 세팅
  • 새로 만든 레이어에 zoom 적용

2024. 10. 07

c# setup project custom action

Visual Studio Installer Project - Custom Action 추가 방법 (tistory.com) 설치파일 실행시 서버와 통신하게 하는 것이 목표. 이를 위해 custom action을 어떻게 추가하는지부터 확인하고 있다.

2024. 10. 08

c# datetime 및 format

DateTime.Minute Property (System) | Microsoft Learn

Custom date and time format strings - .NET | Microsoft Learn

다음과 같이 사용 가능하다.

$"{DateTime.Now.ToString("yyMMdd-H.mm.ss")}"

2024. 10. 09

c# newline을 포함한 문자열

Interpolated string expression newline - C# feature specifications | Microsoft Learn

interpolation을 활용하면 된다.

"""c# string x = @"a b c"; """

2024. 10. 10

c# 부동 소수점 자릿수

부동 소수점 숫자 형식 - C# reference | Microsoft Learn

30490번: Battle Bots (acmicpc.net) 문제를 풀때 decimal을 사용해야 답이 나왔다.

  • float: ~6-9개 자릿수, 4바이트
  • double: ~15-17개 자릿수, 8바이트
  • decimal: 28-29개의 자릿수, 16바이트

2024. 10. 11

2024. 10. 12

2024. 10. 13

2024. 10. 14

c# AutoCAD 레이아웃에 있는 viewport 제거하기

.net - Autocad C# delete layout viewports - Stack Overflow

Creating an AutoCAD layout with custom plot and viewport settings using .NET - Through the Interface (keanw.com)

두 링크에 있는 내용을 합쳐서 아래와 같은 코드 작성.

using (Transaction tr = db.TransactionManager.StartTransaction())
{
    Layout layout = (Layout)tr.GetObject(layoutId, OpenMode.ForWrite);
    var vpIds = layout.GetViewports();
    foreach (ObjectId vpId in vpIds)
    {
        Viewport vp = tr.GetObject(vpId, OpenMode.ForRead) as Viewport;
        if (vp != null)
        {
            vp.UpgradeOpen();
            vp.Erase();
        }
    }
    tr.Commit();
}

2024. 10. 15

c# AutoCAD dimension style

Creating and overriding AutoCAD dimension styles using .NET - Through the Interface (keanw.com)

Dimension variable group codes에 대해 설명되어 있다. 일부를 발췌하자면,

DIMPOST     3
DIMAPOST    4
DIMSCALE   40
DIMASZ     41
...

2024. 10. 16

c# 문자열에 가장 많이 등장한 문자 찾기

c# - Find character with most occurrences in string? - Stack Overflow

LINQ의 GroupBy를 활용하면 된다. 15238번: Pirates (acmicpc.net) 문제를 푸는 데에 활용했다.

input.GroupBy(x => x).OrderByDescending(x => x.Count()).First().Key

2024. 10. 17

2024. 10. 18

2024. 10. 19

2024. 10. 20

2024. 10. 21

2024. 10. 22

2024. 10. 23

2024. 10. 24

2024. 10. 25

c# 소수점 반올림 방법들

Math.Round Method (System) | Microsoft Learn

만약 Math.Round함수에 mode를 인자로 넣지 않으면 "Rounds a double-precision floating-point value to the nearest integral value, and rounds midpoint values to the nearest even number." 와 같은 방식으로 작동하므로, 0.5를 반올림했을때 1이 아닌 0이 된다. 그래서 mode값을 인자로 넣어서 무조건 위로 반올림 하도록 할 수 있는데, 아래와 같은 방식으로 사용한다.

int m = (int)Math.Round(n*.15, MidpointRounding.AwayFromZero);

이전 페이지