Home

읽기 설정

코드 리포트 영상에 오신 것을 환영합니다. 이번 영상에서는 문제 하나를 여덟 개 언어로 풀어보고 알고리즘의 아름다움과 중요성에 대해 이야기해 볼 예정입니다.00:00

오늘 우리가 풀어볼 문제는 '등차수열'이라고 제목이 붙어 있습니다. 저는 약 한 달 전인 Pearl Weekly Challenge의 351주, 2번 문제에서 이 문제를 접하게 됐습니다.00:13

그리고 제가 여행 중이었는데, 그때 생각했죠. 시간이 될 때 이 문제를 가지고 영상을 만들어야겠다고. 이제 시간이 됐으니까요. 그래서 문제는 아주 간단합니다.00:26

숫자 시퀀스가 주어지는데, 꼭 정수가 아니어도 괜찮습니다. 지금은 중요하지 않아 보일 수도 있지만, Rust 솔루션에 들어갈 때 중요해질 겁니다.00:37

따라서 정수이거나 부동소수점 수일 수 있으며, 이들이 등차수열로 변환될 수 있는지 계산해야 합니다.00:45

기본적으로 같은 차이, 같은 양으로 떨어지거나 오르는 숫자들의 집합이라고 할 수 있습니다.00:56

이 문제를 해결할 수 있는 몇 가지 방법이 있어요.01:07

문제를 해결하는 방법은 숫자들을 정렬하고, 인접한 숫자들 간의 차이를 계산하는 것입니다. 만약 이 차이들이 모두 같다면, 우리는 가능한 산술 수열을 가지고 있다고 판단할 수 있습니다. 따라서 배열 언어의 경우, true 또는 1 또는 0을 반환합니다.01:10

정말 간단합니다. 먼저 C++, Rust, 그리고 Python 세 가지 비 배열 언어를 살펴보고, 그 다음에 다섯 가지 배열 언어로 이 문제를 풀어볼 겁니다.01:30

C++ 솔루션은 다음과 같습니다.01:41

이 문제를 해결할 수 있는 방법은 여러 가지가 있습니다. 저는 알고리즘 기반의 범위 기반 솔루션을 선호하는 편입니다.01:44

그래서 저희는 세 가지 다른 알고리즘 또는 범위를 활용하고 있습니다. 첫 번째는 정렬(sort)이고, 그 다음으로 제가 직접 만든 모든 값이 동일한 함수가 있습니다.01:52

이 'all equal' 알고리즘은 주어진 범위 내의 모든 값이 서로 같은지 여부에 따라 참 또는 거짓을 반환합니다. 구현하기 전에 이 결과를 먼저 전달하는데, 이는 인접 변환을 수행하는 것과 같은 의미이며, 'pairwise'라고도 표현할 수 있습니다.02:02

변환하고 싶다면 그렇게 해도 좋지만, 저는 인접한 변환을 사용하는 것을 더 선호합니다. 이 두 가지 기능은 C++ 23에서 등장했습니다. 우리는 이진 연산을 수행하고 있으므로, 정수 템플릿 인자 2를 전달합니다. 그리고 우리의 이진 연산은 뺄셈입니다. 왜냐하면 값을 얻고 있으니까요.02:20

그리고 이러한 차이점들이, 우리가 쉽게 사용할 수 있는 시퀀스를 제공할 거고, 그걸 all_equal에 전달할 수 있습니다. all_equal은 먼저 빈 범위인지 확인하는데, 만약 그렇다면 false를 반환합니다.02:35

그리고 C++20 범위 알고리즘인 'all of' 함수를 호출하고 있습니다. 제가 써 본 코드 중에서 가장 아름다운 코드는 아니지만요.02:45

원한다면 'adjacent find' 함수를 호출할 수도 있습니다.02:55

하지만 이번 경우에는 all of를 사용하는 쪽을 더 선호해요. 그리고 모든 값이 첫 번째 값과 같은지 확인하고 있는 거죠.03:00

첫 번째 요소가 첫 번째 요소와 같은지 확인하는 과정에서 약간의 중복 작업이 발생합니다. 하지만, 이 방법은 문제를 해결해주고 C++에서 꽤 괜찮은 해결책이 될 수 있습니다.03:09

이전에 어재선 변환에 대해 언급했었죠. 이 알고리즘은 여러 언어에서 다양한 이름으로 알려져 있습니다. 처음에는 C++과 C++98에서 어재선 차이라는 이름으로 등장했습니다.03:20

그런데 그건 끔찍한 이름이에요. 왜냐하면 기본 이항 연산의 의미를 알고리즘 이름에 담아버렸거든요. 절대로 그렇게 해서는 안 되는데, 다른 이름으로도 불려요. 'map', 'adjacent', 'Haskell zip', 그리고 Kotlin에서는 'next', 그리고 배열 언어에서는 다양한 원시 연산으로 나타나기도 하죠. 이건 'ny'의 reduction이라고도 불립니다.03:34

APL과 친구들, 스텐실, 위와 같은 것들 위에 이 알고리즘을 적용하고, 여기에 더해 Q에서의 델타와 A에서의 차이를 활용하는 특화된 알고리즘도 존재합니다. 이 특화 알고리즘은 몇몇 언어 및 라이브러리에서 사용됩니다.03:53

참고로, 기억하시겠지만, 우리는 이전에 이웃 변환 C++23 범위에 std minus라는 이항 연산자를 전달했습니다. 이건 하드코딩된 델타와 디프와 동일한 거죠. 그리고 여기에서 볼 수 있듯이, 우리는 또한04:07

배열 솔루션에서 볼 몇 가지 표현식을 포함했습니다.04:23

APL과 CAP에서는 2wise reduction이 있습니다. BQN에서는 없으니, BQN의 Windows라는 primitive를 사용해야 할 겁니다.04:27

그리고 Wiwa에서는 아름다운 스텐실을 가지고 있습니다. 이걸 지나가면, 단순한 이진 연산을 통해, 2wise 축소 연산을 수행합니다.04:36

정말 아름답네요. 혹시 hoogletranslate.com (설명란에 링크 있어요) 에 들어가서 이것저것 해보시면서 표현이 어디서 나오는지 궁금하시다면, 기본적으로 표현들은 그리고 NumPy 같은 외부 라이브러리에서 가져옵니다.04:45

자막은 포함되어 있지 않으므로, 원하시면 켜야 합니다. C++ 솔루션으로 다시 돌아가보겠습니다.04:58

음, 이건 살짝 딴 얘기인데, C++ 코드를 만지작거리다가 문득 생각났어. C++23 프린트 라이브러리를 사용할 때마다 항상 그런데, 생성되는 코드가 늘 그렇더라고.05:03

정말 번거롭습니다. Clang과 GCC 컴파일 각각 5천, 6천 줄 정도 나오거든요. 그리고 O2 레벨에서는 잘 안 보이네요.05:19

이건 여기 옆에 숨겨져 있어서, 제가 보통 하는 대로 const expr을 저희 함수 둘 다에 추가해봤어요. 그런데 이것 자체는 아무런 변화도 없죠. 왜냐하면 print 라이브러리를 사용하고 있으니까요. 만약 이 모든 부분, 이 모든 부분을 주석 처리하고 그냥 반환하면...05:29

이것은 산수열입니다. 제가 입력하고 다시 계산해 보겠습니다.05:50

이제 GCC 컴파일 과정을 보면, 모든 걸 컴파일해서 결과를 반환하는 것뿐인데, 예상했던 그대로네요.05:57

청구서 컴파일 관련해서는 아직 122줄의 어셈블리 코드가 남았는데, 나쁘지 않은 편이지만 gcc의 경우 거의 없다고 생각하면 조금 걱정되네요. 그래서 다음 단계를 진행해서 상황을 파악하기 위해 상수(const)를 대체해 보았습니다.06:08

쇼 노트에 const eval 관련 링크를 넣어뒀으니 아직 보지 못하셨다면 슈퍼파워 오브 C++ 유튜브 영상을 확인해보세요. 보통 이 기능은 컴파일 시간에 실행 가능한 것만 컴파일 대상으로 삼습니다. 따라서, 어떤...06:29

코드에 문제가 있는데, 컴파일 시간에 실행할 수 없어서 오류가 발생합니다. 반면에 constexpr는 컴파일 시간 또는 런타임에 모두 실행할 수 있습니다. 혼란스러운 점은 제 코드가 오직 컴파일 시간에만 실행될 수 있다는 것입니다.06:47

constexpr을 클랭 컴파일할 때 사용하는 이유가 뭔지 모르는 이유로 인해 전혀 줄어들지 않지만, consteval로 constexpr을 대체하면 둘 다 완전히 사라집니다. 하여튼 왜 그런지는 모르겠습니다. 그냥 좀 궁금해서 이 영상에서 약간의 내용 추가를 했습니다.07:03

혹시 왜 그런지 아시는 분은 아래 댓글에 자유롭게 남겨주세요. 만약 아니라면, 제이슨 터너처럼 이 영상이 혹시라도 그의 눈에 띄면, C++ 위클리 영상을 통해 여기서 무슨 일이 일어나는지 설명해 줄 수도 있겠네요.07:18

자, C++ 해결 방법은 여기까지입니다. 이제 러스트 솔루션으로 다시 돌아가서 살펴보겠습니다.07:32

제가 고안한 Rust 솔루션인데, 어떤 면에서는 C++ 솔루션보다 나은 점도 있지만, 다른 면에서는 훨씬 못 미치는 부분도 있어요.07:38

더 큰 문제는 C++처럼 타입 추론 및 타입 유추 기능을 지원하지 않는다는 거예요.07:47

C++에서 다루는 개념들을 보면, Rust에서는 명시적으로 적어야 하는 많은 부분을 'auto' 키워드를 이용해서 추론할 수 있어요.07:55

음, 타입 트레잇 t, 콜론 복사 플러스 부분 순서 플러스 std 콜론 콜론 블라블라블라, 솔직히 저한테는 중요하지 않아요.08:05

이 문제에 대한 간단한 해결책을 코딩하려고 할 뿐이에요. 명시적으로 코드를 작성해야 하지만, 그 점에서는 C++이 조금 더 나은 것 같아요.08:13

러스트는 이처럼 메서드 체이닝을 할 수 있어서 더 마음에 드네요. nums.iter.copy.sorted.by.tuple_windows.map 처럼 말이죠. 다만 우리가 원하는 모든 연산이 있는 건 아니에요.08:24

맵 어자센트나 어자센트 트랜스폼이 없어서 튜플 윈도우즈에 따로 호출하고, 그 다음에 맵을 적용해야 합니다. 그래서 C++에서는 하나로 할 수 있는 일을 두 단계로 나눠서 해야 하는 거죠.08:36

또 다른 짜증나는 건, 아마 여러분이 생각할 수 있겠지만, 왜 그냥 iter tools 정렬을 사용하지 않는 거죠?08:48

왜 정렬해서 사용하냐고요? 그 이유는 제가 말씀드린 것처럼 테스트 케이스에서 정수와 부동 소수점 숫자가 같이 사용되기 때문입니다.08:54

부동 소수점 숫자는 정렬에 필요한 O-R-D 특성을 만족하지 않습니다.09:03

따라서 테스트 케이스에 부동 소수점 숫자가 포함될 가능성이 있다면 sorted() 함수를 사용할 수 없습니다.09:10

그래서 sorted by를 호출하고 partial compare의 unwrap을 사용해야 합니다. 정말 보기 흉하네요. 안전을 위해 필요한 것 같아요. 제가 말씀드린 것처럼, 저는 Rust와 C++에서 이 문제를 아름답고 빠르게 해결하려고 노력했을 뿐입니다.09:18

아무튼, 이게 Rust 솔루션입니다. 더 좋은 Rust 솔루션이 있다면 저는 Rust 전문가가 아니니까요. GitHub 저장소도 있어요.09:33

댓글로 남겨주셔도 되고, 아니면 제가 이 유튜브 영상에 대해 만든 솔루션들을 담고 있는 깃허브 저장소에서 풀 리퀘스트를 열어서 기여해주셔도 좋아요.09:41

마지막으로 배열이 아닌 언어들 중에서 파이썬을 살펴보면, 제가 보기에는 배열 기반의 솔루션이 아닌 것들 중 가장 괜찮은 편이지만, 여전히 많은 개선의 여지가 있다고 생각합니다.09:50

nums 배열에 정렬 메서드를 적용해서 숫자들을 정렬하고, 그 다음에 4AB iterable unpacking zip tail 트릭을 사용하고 있습니다.10:03

쌍으로 묶어서 사용할 수도 있었지만, pairwise 기능을 사용하기 위해 iter tools를 가져오지 않기로 했습니다.10:13

여기서부터 이 모든 것을 집합으로 전달할 수 있는데, 그러면 중복된 값들이 제거되고 유일한 값만 남게 됩니다. 그리고 그 집합의 길이가 1과 같다면, 우리는 산술 수열을 가지고 있다는 것을 알 수 있습니다.10:18

세 가지 다른 방법이 비어레이(non-array) 언어에서 나왔는데, 다 만족스럽지 않네요.10:30

세 가지 알고리즘에 대해 원하는 대로 균등하게 맵핑하고, 인접하게 정렬해서 세 언어에 적용하기는 어렵습니다. 하지만, 저희가 가진 언어 배열 중 가장 좋은 것으로 건너뛰도록 하겠습니다.10:38

이제 최고에서 최악으로 살펴보겠습니다. 다음은 WeWa입니다. 자, WeWa 환경에서 정렬을 먼저 해보도록 하겠습니다. 멋진 키워드-심볼 매핑이 있어서 바로 사용하면 되니까, 단축키를 외울 필요가 없죠.10:50

그 다음에는 인접한 마이너스 맵을 적용해서 델타를 처리하고 싶습니다.11:04

그리고 제가 호글 트랜슬레이트의 델타 개요에서 언급했듯이, 스텐실에 호출하고 이진 연산을 수행하면 델타 값을 얻을 수 있습니다.11:10

정말 아름답네요. 두 글자만으로 델타에 접근할 수 있는 유일한 배열 언어예요.11:21

정말 아름답습니다, 여러분. 그리고 할 수 있는 몇 가지 다른 방법들이 있어요. 제가 선호하는 방법은 또 다른 스텐실을 사용하고 그 다음에 이퀄스를 하는 건데, 인접한 모든 값들이 서로 같은지 물어보는 거죠.11:27

그리고 여기서부터는 그냥 and 축소 아니면 min 축소를 할 수 있습니다. 그리고 이게 참을 반환한다면, 모든 델타들이 서로 같다는 의미가 됩니다.11:40

이것(이)를 해결하는 방법 중 하나입니다. 다른 방법은 Python에서 하는 것처럼 모든 값을 기본적으로 중복을 제거하고 길이를 확인하는 것입니다. dedupe라는 함수가 있습니다.11:51

그럼 길이를 알아내서, 이게 1과 같은지 확인할 수 있습니다. 그리고 이것이 두 번째 Wiwa 솔루션이 됩니다.12:03

자, 제가 말씀드렸듯이, 이제부터 쭉 내리막길이에요. 그래서 제가 이 영상을 만들고 싶었던 이유 중 하나가 보통은 배열 언어에 대해 쉴 새 없이 칭찬만 하거든요. 하지만 중요한 건 여러분이 문제를 풀 때 원하는 어휘로 표현할 수 있는 기본 자료형에 접근할 수 있어야 한다는 점이에요.12:09

모자 디자인은 꽤 괜찮을 것 같아요. 다만, 스텐실 접근 권한이 없어서 조금 더 자세하게 설명하게 될 것 같습니다.12:27

두 번씩 묶는 연산을 활용해야 합니다. 먼저 정렬 함수를 사용하는데, 다행히 캡에는 정렬 기능이 있어요. 아주 좋아요, 여러분. 그리고 두 번씩 묶는 연산을 하고 싶습니다.12:34

설명하기 위해서, 여기서는 'catnate' 함수나 'pair' 함수를 사용하는 것을 보여드리겠습니다. 두 번씩 묶어주는 두 자리 감소를 할 때, 이런 식으로 묶이는 것을 볼 수 있습니다.12:45

하지만 이 부분을 어떤 이항 연산으로든 대체할 수 있습니다. 여기서는 차이를 구하기 위해 빼기를 사용해 보겠습니다. 그리고 첫 번째 해법을 따르고 싶다면, 다시 두 번의 축소를 해서 서로 같은지 확인할 수 있습니다.12:56

그리고 나서 우리는 AND 연산을 수행할 수 있고, 이게 우리가 원하는 해법이 됩니다. 괄호로 묶어서 보여드릴게요. 왜냐하면 우리는 세 개의 기차가 캡에 있지 않고, 두 개의 기차와 왼쪽 바운드 함수만 가지고 있기 때문에, 이 해법을 타시트(tacit) 함수로 만들기 위해 별도로 아무것도 할 필요가 없거든요. 이건 정말 아름다운 특징입니다.13:08

캡(CAP)의 경우를 생각해 보면, 두 번째 해결책을 적용하려면 델타 값의 고유한 값을 찾아서 길이가 1인지 확인하고, 이것이 1과 같은지 확인하기만 하면 됩니다. 캡에서 사용할 수 있는 매우 아름다운 해결책 두 가지가 있지만, 문자 수가 하나 더 많습니다.13:25

스텐실(stencil)이 없기 때문에, 두 Y 축소(two Y's reduction)를 활용해야 합니다.13:44

다음은 다이얼로그 APL입니다. 여기서는 저희의 라이드 에디터에 있습니다. 이미 정렬을 입력했는데, 다이얼로그 20에는 뒤에 있지만 아직 정렬 기능이 없는 상태거든요.13:48

정렬을 꼭 해야 합니다, 여러분. CAP 와 Wiwa 정렬과 비교해 보세요. 이건 터무니없네요. 치열한 삶이죠. 다음으로 해야 할 일은 뺄셈 2회입니다.13:59

그 다음에는 이퀄스 두 개로 줄일 수 있고, 그 다음에는 앤드 줄임도 할 수 있어요.14:10

신기하게도, 세 개의 트레인을 가지고 있음에도 불구하고, 유니 함수가 뒤따르고 이분 함수가 있어서 이것은 유효한 암시적 표현입니다.14:17

이것은 AGH 포크입니다. 이것은 AGH 포크입니다.14:28

그리고 나서 한 개의 단항 함수가 두 세 개의 열 다음에 옵니다.14:32

그래서 이것은 작동할 겁니다. 시간이 없어서 두 번째 DialogAPL 솔루션은 건너뛸게요. 그리고 BQN으로 넘어가죠. BQN은 제가 가장 좋아하는 것 중 하나인데, 동시에 가장 실망스러운 결과물을 보여줄 수도 있습니다.14:36

우리 둘 다 현명한 분들이 계시지 않아서요...14:51

마이너스 감소나 스텐실 작업을 할 거라면, 윈도우를 활용해야 하고, 그 윈도우 결과를 바탕으로 행렬의 행에 마이너스 감소를 적용해야 합니다. 그리고 델타를 구하는 거죠.14:54

여기서부터 우리는 몇 가지 선택지를 가지고 있습니다.15:08

원한다면 이걸 복사해서 여기에 붙여넣고, 이걸 우리껄로 바꿔서, 그리고 나서 AND 연산을 해야 하는데, 아마 이런 형태로 될 거예요. 그런데 그 안에 아무것도 넣어야 해요.15:10

그래서 이것이 첫 번째 BQN 솔루션인데, 중복 제거를 한다고 해도 크게 나아지는 건 아니에요, 여러분. 여기 중복 제거가 있습니다. 또 다른 아무것도 필요하고요. 길이도 필요하고, 또 다른 아무것도 필요하고, 그리고 equals 하나도 필요합니다.15:24

훨씬 낫긴 한데, 캡이랑 비교하면, 아니면 Wiwa랑 비교하면 꽤나 안 좋아요, 여러분. 스텐실이나 맵 어자센트나 n의 리덕션이 없어서 힘들어요.15:37

힘들어요, 여러분. 다음 주제로 넘어가서, 마지막이지만 아주 중요한 건 젤로 솔루션이에요. 여기 젤로에 있습니다.15:48

혹시 필요하신 분들을 위해 다시 한번 말씀드리자면, 저는 1년 전, 몇 달 전에 라이브 스트림을 통해 젤리라는 난해한 코드 골프 언어를 이해하는 데 도움이 되는 이 도구를 만들고 있었습니다. 그래서 젤로(Jello)는 젤리의 키워드화된 버전입니다.15:55

이건 젤로 표현인데, 아래쪽에 젤리처럼 변환돼요. 여기서 'I'는 identity의 줄임말이고, 나머지는 키워드들입니다.16:11

정렬하면 볼 수 있듯이, 이 함수를 호출하면 이 부분이 's.next'에 매핑돼요. 그 다음으로 델타를 가져오는데, 바로 여기 있네요. 그리고 나서 'all equal'을 가져오는데, 여기 있습니다. 젤로에서는 'sort deltas all eek'이지만, 젤리에서는 's.next' 즉, 이 세 가지를 모두 가지고 있습니다.16:21

필요한 알고리즘들, 정말 멋진 전문성 있는 사람들, 정말 아름답네요. B-컴비네이터가 연달아 두 번이나요.16:42

완벽한 1-1-1 만틱 체인인데요, 더 뭘 바라겠어요? 이거야말로 이 문제를 해결하는 정점이라고 할 수 있죠, 여러분.16:50

젤라틴과 젤리, 승리! 이걸로 이 비디오의 결론을 맺게 되네요. 제목은 알고리즘의 아름다움이고, 이게 바로 우리가 말하려는 전부입니다.16:57

배열 언어를 좋아하지만, 항상 원하는 원시 타입과 알고리즘을 갖는 건 아니에요. Wiwa에서는 거의 3/3을 달성했죠.17:08

정렬 기능이 있고, 스텐실도 있죠. 지도 인접 요소가 델타의 일반적인 버전이라고 생각해서 포함시켰습니다.17:17

스텐실이 그거랑 같은 개념이어서 초록색 체크박스가 뜹니다. 모든 게 똑같지는 않지만, 네 글자로 표현할 수 있고, 두 가지 다른 방식으로 쓸 수 있습니다. 제가 저희 배열 언어들의 가장 짧은 해결책들을 보여드릴게요.17:23

설명란에 GitHub 저장소 링크가 있습니다. 모든 솔루션이 거기에 있어요.17:37

캡에서도 정렬 기능을 가지고 있습니다. 두 가지 지혜로운 감소를 사용하는데, 저는 그걸 초록색 체크 표시로 칩니다.17:40

다시 한번 말씀드리지만, 정확히 'all equal'은 없지만, 네 개의 원시 요소로 표현할 수는 있습니다. 그래서 노란색 원이 됩니다. 하지만 APL로 넘어가면 sort 기능이 없습니다.17:47

거기는 빨간색, 진입 금지입니다. 델타를 위한 두 가지 축소로 녹색 체크 표시를 받습니다. 그리고 다시 한번 말씀드리지만, 완전히 동일하게 표현하는 것은 아니지만, 몇 개의 문자로 표현할 수 있어서 노란색 원을 받습니다.17:55

BQN은 델타도 없고, 스텐실도 없고, NY 감소도 없어요. 그래서, 안 된다는 표지판이 붙는 거죠, 여러분. 하지만 정렬 기능은 가지고 있고, 'all equal'을 단 두 글자로 표현할 수 있어요.18:08

하지만 젤로, 그게 최고예요, 여러분, 세 가지 알고리즘 모두요. 그게 알고리즘의 아름다움인 거죠, 여러분. 그걸 가지고 있으면 코딩하는 것 자체가 아니에요. 그냥 원하는 어휘로 조합하는 것뿐이죠.18:20

마이너스 리듀스 셀즈를 윈도우로 스펠링할 필요가 없어요, 제가 원하는 건 델타든, 스텐실 마이너스든, 아니면 어자신트 트랜스폼 마이너스든 그걸 활용하고 싶을 뿐이에요.18:31

제가 그걸 가지고 있으면, 그걸 활용해서 코딩하고 싶어요.18:41

사실 여기 젤리(jello)는 있는데, 위에 있어야 할 젤리(jelly)는 없어요. 그래서 여기는 8개 언어, 젤리(jelly)를 포함하면 9개 언어의 전체 비교를 보여드리고 있습니다.18:45

젤리 솔루션은 숫자 1번입니다. 세 가지 기본 요소가 있습니다. S가 점 아래에 있어서 이상해 보이지만, 정렬에 접근할 수 있고, 델타에 접근할 수 있고, all equal에도 접근할 수 있습니다. C++, Rust, Python의 경우, 이들은 모두 '접근 불가' 표시를 받지 않습니다.18:54

정확히 맞으면 초록색 체크 표시가 되고, 표현할 수 있으면 노란색 체크 표시가 됩니다. C++은 'all equal'이 없었지만, 비슷한 기능을 사용할 수 있죠.19:09

러스터랑 파이썬도 똑같아요. 알고리즘을 잘 알아두시고, 필요할 때 사용하세요. 그리고 없을 때는, 그걸 표현할 수 있게 해 줄 뭔가를 찾으셨으면 좋겠어요.19:19

영상에 제가 보여드린 언어나 보여드리지 않은 언어에 다른 해결책이 있다면, 댓글 섹션 아래에 자유롭게 의견을 남겨주세요.19:29

혹은 제가 영상 초반에 말씀드렸듯이, GitHub 저장소에 풀 리퀘스트를 보내주셔도 되고, 저는 기꺼이 그 해결책들을 받겠습니다.19:39

시청해주셔서 감사합니다. 즐거우셨으면 좋겠네요. 배우는 거 있으셨으면 좋고, 좋은 하루 보내세요.19:47

AI Summary

이 비디오는 코드 골프 컨테스트를 통해 다양한 프로그래밍 언어로 특정 알고리즘 문제를 해결하는 과정을 분석합니다. Jelly & Jello가 가장 효율적인 해결책을 제시했으며, 각 언어별로 정렬, 스텐실, 감소 연산 등 다양한 기능을 활용하여 문제 해결 방법을 보여줍니다. 비디오는 알고리즘의 아름다움, 언어의 한계, 지속적인 학습의 중요성, 코드 공유 및 협업의 필요성을 강조하며, 프로그래밍을 즐기는 새로운 관점을 제시합니다.

Key Highlights

  • Jelly & Jello가 가장 효율적인 해결책을 보여줌
  • 각 언어별로 다양한 기능 활용 방법 분석
  • 알고리즘 구현은 원시 타입과 알고리즘 조합의 예술
  • 모든 언어가 필요한 기능과 효율성을 제공하지는 않음
  • 코드 공유 및 협업을 통해 함께 성장해야 함

Related Videos