230821 내일배움캠프 10일차

Minsang Kim·2023년 8월 21일
0

TIL

목록 보기
10/41

주말 열심히 놀고 왔다. 그럼 뭐해 이제 공부해야지. 업보 받을 시간. 일해라.


파이썬 이거저거

오늘도 코테를 위한 파이썬 안까먹기 한 문제. 조합에 대한 새로운 접근을 배울 수 있었다.
예를 들면 4개의 원소에 대해 Combination이 필요하다면 from itertools import combinations를 썼었다. 일단 우리가 필요한건 (0), (1), (2), (3), (0, 1), (0, 2), ,,, (0, 1, 2, 3) 이런 거. 느낌 오지. 이런식으로 해서 리스트에 접근할 인덱스의 조합을 짜는 거. 역시 itertools를 쓰면 편하겠지. 나도 그렇게 해서 오늘 문제 하나 풀었고. 그런데 다른 사람 풀이를 보면서 새로운 접근법을 깨달았다.

저런 방식으로 말고 어차피 4개의 인덱스만 필요하다면 2진수의 4자리 숫자로도 대체 가능하다.

라는 점. 무슨 말이냐
(0) -> 1000 = 8 / (1) -> 0100 = 4 -> /// (0, 1, 2, 3) -> 1111 = 15
이런식으로 16 - 1(0000의 경우) = 15개의 숫자로 조합을 나타낼수 있다. 이진법으로 계산해서 range(1, 2^^4)으로 해도 되지만 있어 보이게 range(1, 1 << 4) 이렇게. 비트 연산자, 있어보이잔슴. 이런식으로 해서 (중간 생략) 하고 bin(i)[2:].zfill(4) 이렇게 필요한 모양을 만들어서 풀어보았다. 그치만 시간 복잡도는 itertools 쓰는게 더 빠른거 같기도,,, 어쨌든 새로운 접근법 하나 배웠으니까 !

C# 이거저거

  • 문자열 패딩

C#의 문자열도 패딩이 된다는 사실. .PadLeft(), .PadRight()가 있다. left는 왼쪽에, right는 오른쪽에 빈 문자열을 채워준다. 얼만큼 ? 정수형 매개변수 만큼. 당연히 빈 문자열이 아니라 char형 문자로 채우는 것도 가능하다. 이걸 활용해서 콘솔에서 UI를 만드는데 일정한 간격을 만들어 주고 있다.

라고 간단하게 생각했지만, 한글의 경우 일정하게 맞추기가 힘들었다. 한글은 한 문자에 2byte이기 때문에 패딩을 해줘도 일정하게 간격 유지가 되지 않아서 까다로웠다. 한글이 2byte인 이유는 ASCII 코드는 1byte이고, UNICODE는 2byte이기 때문에 26글자인 영어는 1byte로도 충분하지만, 당연히 한글은 안되기 때문에 후에 UNICODE가 생기고 나서야 가능하게 되었다라는 이야기...

그래서 구글링을 하다가 str + "".PadRight(padLen - Encoding.Default.GetBytes(str).Length) 이런 방식을 찾았다. 이걸로 내가 원하는 대로 기능하게 되었다.

  • 콘솔 색상 변경

콘솔에서 출력되는 문자의 배경색과 글자색도 바꿀 수 있다.
Console.BackgroundColor로 문자 배경색을 바꾸고 Console.ForegroundColor로 문자 색을 바꿀 수 있다. 변경가능한 색의 폭이 은근 넓어서 놀랐다. 그리고 바꾸면 바뀐 설정이 계속 되기 때문에 Console.ResetColor()로 설정을 초기화 해주자.
지금 만들고 있는 콘솔 게임에도 적용시켜 보았다. 일단은 기본은 흰색 글씨인데 왜 함수에는 기본 값으로 노란색이냐면. 흰색이면 그냥 Console.WriteLine() 하면 되니까. 끄덕. 그래서 그 다음으로 많이 쓸 거 같은 색인 노란색을 기본으로 했다. 배경은 굳이 안바꿀 거 같긴 한데 혹시 몰라서 넣어봤다. 안 쓰면 나중에 지우면 되지 뭐.

public static void ColorWriteLine(string _str, ConsoleColor _writeColor = ConsoleColor.Yellow, ConsoleColor _backColor = ConsoleColor.Black)
    {
        Console.BackgroundColor = _backColor;
        Console.ForegroundColor = _writeColor;
        Console.WriteLine(_str);
        Console.ResetColor();
    }

세줄 요약

  • 주말 놀았으니까 일해라
  • 다른 사람 풀이법도 보자
  • 프로젝트 열심히 하는 중
profile
게임만 하다가 개발자로

0개의 댓글