Mgcllee

[Clean Code] 나쁜 코드와 좋은 코드

나쁜 코드 다양한 프로젝트를 진행하면서 어려웠던 것 중 하나가 좋은 코드를 작성하는 것 이였습니다. 설계 단계에서는 매번 객체지향의 SOLID 규칙을 지키며 좋은 코드를 작성하려고 하였으나 마무리는 위 코드처럼 정리되지 않은 코드로 작성되었습니다. 이러한 작성 방법은 파일과 클래스, 메소드, 변수 등 네이밍 규칙이 매번 다르고 현재 문제점만...

[알고리즘] 정렬 알고리즘

이것이 취업을 위한 코딩 테스트다 with 파이썬 (나동빈 저) 를 참고해 작성한 포스트입니다. 정렬은 데이터 집합을 특정한 기준 에 따라 순서대로 나열하는 작업입니다. 특정한 기준으로는 숫자의 내림차순과 오름차순, 문자열의 길이 혹은 각 문자의 합 등 사용자의 필요에 따라 여러 가지가 될 수 있습니다. 정렬 알고리즘은 알고리즘의 효율성을 표...

[알고리즘] 그리디(Greedy) 알고리즘

이것이 취업을 위한 코딩 테스트다 with 파이썬 (나동빈 저) 를 참고해 작성한 포스트입니다. Greedy(탐욕적인) 알고리즘 그리디(Greedy) 알고리즘은 단순하지만 강력한 문제 해결 방법입니다. Greedy 의 사전적 의미는 “탐욕스러운, 욕심이 많은” 이라는 뜻으로 그리디 알고리즘 대신 탐욕법, 탐욕 알고리즘 등의 이름으로 부르기도 ...

[알고리즘] Rabin-karp 문자열 매칭 알고리즘

이전 문자열 매칭 포스트인 KMP 알고리즘 O(M + N)과 동일하게 특정 문자열을 찾고자 할 때 사용되는 알고리즘인 라빈카프 알고리즘을 이번 포스트에서 설명해보겠습니다. 라빈카프 알고리즘에서 해싱(Hashing) 사용 방법 라빈카프 알고리즘은 해싱으로 문자열을 탐색하는 알고리즘입니다. 문자열 M에서 문자열 N을 찾는 상황에서 라빈카프 알고리즘...

[알고리즘] KMP 문자열 매칭 알고리즘

길이가 100’000 인 문자열에서 길이가 10 인 특정 문자열을 찾으려면 어떻게 해야 할까요? 이번 포스트에서는 문자열 탐색을 위한 알고리즘은 무엇이 있는지 알아보겠습니다. 하나씩 전부 비교하기 O(M x N) 구현이 가장 간단한 방법은 찾는 문자열을 100’000 자에서 한 글자씩 이동하면서 전부 비교하는 방법 입니다. 100’000 자를...

[C#] async 및 await를 사용한 비동기 프로그래밍

async 한정자 이번 포스트에서는 비동기와 병렬에서 설명한 비동기를 C#에서 직접 사용해 보겠습니다. C# 에서는 비동기 프로그래밍을 위해 async 한정자와 await 키워드가 존재합니다. C# 컴파일러가 async 한정자를 만나면 반환을 기다리지 않고 다음 다음 코드를 실행할 수 있도록 컴파일합니다. async 한정자를 사용하는 메서드는 ...