본문 바로가기

SW LAB/Algorithm

Clean Architecture : 서론 프롬스의 SWDEVLAB 서론 두달 전쯤 .. 회사 지원해주는 도서구입 혜택을 누리며 여러 IT 서적을 주문하였지만 .. 자격증 취득이라는 핑계로 미루던 책을 하나하나 보고 있습니다. 예전부터 보려고 했었던 Clean Architecture ! 저녁마다 시간을 내어서 꾸준히 보도록 해야겠습니다 :-) 추천사 아키텍처를 이야기할 때 우리는 무엇에대해 이야기하나요 ? 비유라는 것이 늘 그렇듯이 아키텍처라는 렌즈를 통해 소프트웨어를 살펴보면, 알 수 있는 것만큼이나 숨겨진 것도 있게 마련입니다. 그래서 아키텍처가 실제로 제공할 수 있는 것 이상을 약속하기도 하지만, 약속한 것보다 많은 것을 제공할 때도 있습니다. 아키텍처의 매력은 그 구조에 있다고 합니다. 구조란 패러다임을 지배하고 소프트웨어 개발 논의를 지.. 더보기
Clean Code : (0) 서론 프롬스의 SWDEVLAB Clean Code : 서론 요즘 다른 공부를 하느라 IT 서적을 좀 멀리한 듯 싶습니다. 다시 힘을 내어, Clean Code를 읽으며 포스팅을 꾸준히 다루어볼까 합니다. 서론 장인 정신을 익히는 과정은 두 단계로 나뉩니다. 바로 이론과 실전입니다. 첫째, 장인에게 필요한 원칙, 패턴, 기법, 경험이라는 지식을 습득해야 합니다. 둘째, 열심히 일하고 연습해 지식을 몸과 마음으로 체득해야 합니다. 깨끗한 코드를 작성하는 방법은 배우기 어렵습니다. 단순히 원칙과 패턴을 안다고 깨끗한 코드가 나오지 않습니다. 고생을 해야 합니다. 스스로 연습하고 실패도 맛봐야 합니다. 남들이 시도하다 실패하는 모습도 봐야 합니다. 그들이 넘어지고 일어서는 모습도 봐야 합니다. 결정을 내리느라 고민하.. 더보기
Git 사용하기 : 기초 Git 기초 Git Local Repository 생성 다음 파일 생성 C:\git-my-repository C:\git-my-repository\README.txt git 초기화 폴더 우클릭 및 Git Bash Here 클릭 명령어 git init 입력 후 실행 Git File 추가 명령어 git add README.txt 를 입력 후 실행 명령어 git commit -m "설명 추가" 를 입력 후 실행 Git 이전 Commit으로 돌아가기 명령어 git log로 로그 확인 명령어 git checkout GIT_ID 를 입력 후 실행 원격 저장소에 Commit 올리기 원격 저장소 생성 명령어 git remote add origin 저장소_주소 를 입력 후 실행 명령어 git push origin mas.. 더보기
CodingTest : MaxCounters (Codility) 주어진 정수에 부여된 특정 명령을 수행하고, 완성된 배열을 반환하는 문제 .. 효율성 테스트도 있기 때문에, 시간복잡도를 고려해서 코딩해야한다. 단순 흐름대로 하면 2중 for문이 나오게 되는데, 이를 회피하기 위한 최적의 알고리즘을 찾는 것이 관건 최대 값을 모든 배열에 세팅하는 순간이 올 때 .. 모든 배열에 바로 반영하는 것이 아니라, 이를 기억했다가 최종적으로 1회만 반영하는 알고리즘을 설계해야한다. class Solution { public int[] solution(int N, int[] A) { int maxCount = 0; int bigCount = 0; int[] answer = new int[N]; boolean[] applyMax = new boolean[N]; for(int cmd.. 더보기
빅오 표기법 (Big-Oh Notation) 알고리즘을 분석하기에 앞서, 기본적인 소스코드를 바탕으로 빅오 표기법을 완성하기까지의 과정을 포스팅하도록 하겠습니다. 1. 다음과 같은 소스코드가 주어졌다고 합니다. 2. 각 라인을 분석해봅시다. 'int sum=0' 의 경우 1번 'for(int i =0; i < _n; i++)' 의 경우 n+1번 'sum++'의 경우 n번 따라서 1 + (n+1) + n 이다. 즉, 2n + 2의 결과값을 갖습니다. 3. 표기법에 대해서 증명해봅니다. 2n + 2 더보기
알고리즘 - 이분매칭 N 개의 리스트 A와 N 개의 리스트 B 라는 두 개의 컬렉션이 주어집니다. 즉, 리스트 A와 B의 길이는 갖고 서로 다른 데이터를 갖습니다. 기능 구현의 목적은 A와 B에 있는 데이터가 각각 1:1 매칭을 이루도록 하는 것입니다. 간단한 예로 다음과 같이 있을 때 .. List aList = Arrays.asList("A", "B", "C", "D"); List bList = Arrays.asList("1", "2", "3", "4"); A-1, B-2, C-3, D-4 로 매칭을 시켜야 합니다. 즉, 매칭을 시킬 때 간선이 발생하지 않도록 해야 합니다. 이와 관련된 다양한 알고리즘이 있습니다. 최대 유량 알고리즘 디닉(Dinic's) 알고리즘 - O(V^2*E) 에드몬드 카프(Edmonds k.. 더보기