오늘은 내일 발표 전 팀장님의 발표의 내부 리허설을 진행했고, 내용을 더 걷어낼 것이 없는지 살펴보는 시간을 가졌다.
진짜 기대 하나도 안하고 그저 감사한 마음만 가지고 있었는데 영상 내용도 정말 알찼고, 준비하신 스크립트의 내용도 고민을 많이 하신 흔적이 느껴졌다.
팀장님의 캐리력을 목도할 수 있었다.
걷어낼 부분을 눈에 불을 켜고 찾아봤지만 내용이 너무 알차버린 바람에 많은 의견을 내지는 못했다..
최고다..최고..
이 외의 시간에는 우리 팀의 경우 어제까지 코딩을 끝냈기 때문에 오늘은 전에 미루었던 부분들에 대해서 공부하는 하루를 가졌다.
두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
이 문제는 오늘 코드카타 시간에 푼 문제 중 하나이다.
처음 풀땐 swap과 for문으로 차례대로 수를 더해서 쉽게 풀었지만 등차수열의 합으로 더 짧고 좋은 코드를 만들 수 있어서 기록해본다.
using System;
public class Solution {
public long solution(int a, int b) {
if(a == b) return a;
return ((long)(Math.Abs(a - b)+1) * (b + a)) / 2;
}
}
수포자에겐 이런 것도 새롭다. 수학도 틈틈히 꾸준히 해야겠다.
피보나치수열을 단순히 재귀함수의 호출로만 구현하면 구하려는 수가 커질 수록 함수의 호출 수가 기하급수적으로 많아진다.
이런 현상을 방지하기 위한 것이 메모이제이션 동적 계획법이다.
알고리즘 문제 "문자열을 정수로 바꾸기"에서 int.Parse()
만 이용해서 한 줄로 문제를 간단히 풀었었다.
숫자 형태의 문자열을 숫자로 바꾸는 함수를 구현해보고싶어서 구현해봤다.
int StringToInt(char strNum[])
{
int answer = 0;
for (int i=0; i<strlen(strNum); ++i)
{
answer = answer * 10 + (int)(strNum[i]-48);
}
return answer;
}
int main()
{
char strNum[] = "10304";
StringToInt(strNum);
}
아스키 코드표에서 정수형 문자 "0"~"9"는 48~57번째이다.
만약 문자 "0"을 int로 캐스팅한다면 48의 정수를 만날 것이다.
그래서 먼저 48을 빼준 후에 int로 캐스팅하면 원하는 정수 값을 받아낼 수 있다.
int로 캐스팅한 값을 answer에 10씩 곱하며 누적시킨다.
음의 정수도 받도록 만들어봤다.
int StringToInt(char strNum[])
{
int answer = 0;
int i = 0;
bool isMinus = strNum[0] == '-' ? true : false;
if (isMinus) ++i;
for (; i<strlen(strNum); ++i)
{
answer = answer * 10 + (int)(strNum[i]-48);
}
if (isMinus) answer *= -1;
return answer;
}
약간의 하드코딩 느낌이 난다. ㅎㅎ
문자 배열의 맨 첫 번째 요소가 "-"라면 isMinus에 true를 쥐어주고 i값을 1로 증가시켜준다.
i 값에 따라서 문자 배열의 요소를 숫자로 변경시켜 10씩 곱하며 누적한다.
반환 전에 isMinus 값에 따라 음,양을 결정해준다.
static int StrToInt(string strNum)
{
int answer = 0;
int i = 0;
bool isMinus = strNum[0] == '-' ? true : false;
if (isMinus) ++i;
for (; i < strNum.Length; ++i)
{
answer = answer * 10 + (int)(strNum[i] - 48);
}
if (isMinus) answer *= -1;
return answer;
}
static void Main(string[] args)
{
Console.WriteLine(StrToInt("-13579"));
}
C#은 이런 느낌이다. 세세한 것 말고는 변함 없다.
델리게이트가 좀 헷갈려서 오늘 깊숙히 파보는 시간을 가졌다.
우선 델리게이트가 무엇인지, 그리고 콜백 매커니즘에 델리게이트가 어떻게 이용되는지 써놓았다.
이 외에도 이벤트 처리나 비동기처리, 여러 메서드를 할당할 수 있는 델리게이트 체인이 있지만 시간 상 2편, 3편으로 더 써볼 생각이다.
개념이 헷갈렸지만 또 깊게 파서 내 글로 만들고 보니 꽤 쓸만하고 그렇게 어렵게 느껴지지 않는 것 같아 뿌듯하다.