주석(2)

책너두 5기 9일차 로버트 C. 마틴의 클린코드 p.74 ~ p.83 내용정리 나쁜 주석 대부분은 나쁜 주석이다. 주절거리는 주석 특별한 목적이나 이유가 없는 주석. 달아야 한다면 제대로 명확하게 달자 같은 이야기를 중복하는 주석 코드 내용을 그대로 중복하는, 쓸데없는 주석 오해할 여지가 있는 주석 값이 반환되는 곳, 조건 등이 불확실하게 전달되선 안된다. 의무적으로 다는 주석 모든 코드에 주석을 달아야 한다는 등의 규칙은 불필요하다. 이력을 기록하는 주석 이젠 깃과 같은 관리 시스템이 존재하니 필요 없어졌다. ...

2023년 8월 9일 · 1 분 · 배준수

파이썬 알고리즘 : 트리의 부모 찾기, 이분 그래프, 아침 산책

2023년 8월 9일 알고리즘 문제풀이 문제 1 백준 11725 문제 링크 1차 시도 나의 생각 연결된 두 점 중 누구를 부모로 할 것인가에 대해 많이 고민했다. 확실한 것은, 1번과 연결된 노드들의 부모는 모두 1번 노드일 것이라는 것이다. 그래서 모두 1번노드 쪽으로 향하니 번호가 작은 노드가 부모인 것으로 설정해야하나 고민했다. 물론 나도 지금 생각해보면 뭔 말도 안되는 소리인지 모르겠다. 결국 어떤 방법으로 풀어야 할지 감을 못잡았다 결과 오답 코드 X 2차 시도 나의 생각 지금 내가 공부하고 있는 단원이 DFS인 것을 떠올리니 쉽게 해결됐다. 실제 코딩 테스트에선 단원을 모로는 채로 풀어야 하기 때문에 문제만 보고 알아차려야 하는데.. 걱정이다 ...

2023년 8월 9일 · 6 분 · 배준수

주석(1)

책너두 5기 8일차 로버트 C. 마틴의 클린코드 p.67 ~ p.73 내용정리 4. 주석 나쁜 코드에 주석을 달지 마라. 새로 짜라. 브라이언 W. 커니핸, P. J. 플라우거 주석은 실패를 만회하기 위해 사용된다. 주석 없이는 자신을 표현할 방법을 찾지 못해 할 수 없이 사용하기 때문이다. 주석은 거짓말을 한다. 코드는 유지 보수 되지만 주석은 그렇지 않기 때문이다. 코드가 수정되고 변화하고 진화하지만 주석은 그대로면서 거짓이 되고 잘못된 정보를 퍼뜨린다. 엄격하게 관리된 주석이 필요할 수도 있지만, 결국 최선은 주석이 필요없는 코드이다. ...

2023년 8월 8일 · 2 분 · 배준수

파이썬 알고리즘 : codility, 운동

2023년 8월 8일 알고리즘 문제풀이 곧 있을 크래프톤 코딩테스트를 위한 연습으로 오늘은 Codility에서 문제를 풀었다. 혹시 백준에서만 하시는 분들은 해보시길 권한다. 나는 리트코드를 한 경험이 있는데 비슷한 느낌이다. 링크 각 주제별로 문제를 푸는 Lesson의 링크 문제 1 문제 A binary gap within a positive integer N is any maximal sequence of consecutive zeros that is surrounded by ones at both ends in the binary representation of N. For example, number 9 has binary representation 1001 and contains a binary gap of length 2. The number 529 has binary representation 1000010001 and contains two binary gaps: one of length 4 and one of length 3. The number 20 has binary representation 10100 and contains one binary gap of length 1. The number 15 has binary representation 1111 and has no binary gaps. The number 32 has binary representation 100000 and has no binary gaps. ...

2023년 8월 8일 · 6 분 · 배준수

함수(2)

책너두 5기 7일차 로버트 C. 마틴의 클린코드 p.57 ~ p.66 내용정리 명령과 조회를 분리하라! 함수는 뭔가를 수행하거나 답하거나 둘 중 하나만 해야한다. public boolean set(String attribute, String value); if (set("username", "unclebob"))... 대신 1 2 3 4 if (attributeExists("username")) { setAttribute("username", "unclebob"); ... } 로 명확하게 해서 혼란을 주지 말자. 오류 코드보다 예외를 사용하라! 오류 코드를 반환하면 명령/조회 분리 규칙이 위반된다. ...

2023년 8월 7일 · 2 분 · 배준수

4. 분할정복

4.분할정복 4.2 행렬곱셈을 위한 스트라센 알고리즘 행렬의 곱셈은 다음과 같다 1 2 3 4 5 6 7 8 n = A.rows C는 새로운 n x n 행렬이라 하자. for i - 1 to n for j = 1 to n c_ij = 0 for k = 1 to n c_ij = c_ij + (a_ik)(b_kj) return C 3중 반복문이기 때문에 수행시간 Θ(n^3)이다. Ω(n^3)이라고 예상하지만 사실 o(n^3) 방법이 있따. ...

2023년 8월 6일 · 7 분 · 배준수

함수(1)

책너두 5기 6일차 로버트 C. 마틴의 클린코드 p.46 ~ p.56 내용정리 3. 함수 함수 당 추상화 수준은 하나로! 추상화 수준이 섞이면 안된다. 위에서 아래로 코드 읽기: 내려가기 규칙 다음 함수로 나아갈 수록, 추상화 수준이 낮아져야 한다. SWITCH 문 짧게 만들기 힘들지만 최대한 적게 쓰고, 반복을 줄인다. before 1 2 3 4 5 6 7 8 9 10 11 12 13 public Money calculatePay(Employee e) throws InvalidEmployeeType { switch (e.type) { case COMMISSIONED: return calculateCommissionedPay(e); case HOURLY: return calculateHourlyPay(e); case SALARIED: return calculateSalariedPay(e); default: throw new InvalidEmployeeType(e.type); } } after ...

2023년 8월 5일 · 2 분 · 배준수

의미있는 이름(2)

책너두 5기 5일차 로버트 C. 마틴의 클린코드 p.35 ~ p.45 내용 정리 2장 의미있는 이름 의미 있는 맥락을 추가하라 state만 보고는 주소인지, 상태인지 알 수없다. addrstate면 주소에서 ‘주’를 뜻한다는 것을 파악할 수 있다. 예시) 맥락이 불분명한 함수 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 private void printGuessStatistics(char candidate, int count) { String number; String verb; String pluralModifier; if (count = 0) { number = "no"; verb = "are"; pluralModifier = "s"; } else if ( count == 1) { number = "1"; verb = "is"; pluralModifier = ""; } else { number = Integer.toString(count); verb = "are"; pluralModifer = "s"; } String guessMessage = String.format( "There %s %s %s%s", verb, number, candidate, pluralModifier ); print(guessMessage); } GuessStatisticsMessage 클래스를 만든 후 세 변수를 넣는다. ...

2023년 8월 4일 · 5 분 · 배준수

파이썬 알고리즘 : DFS와 BFS, 연결 요소의 개수, 바이러스

2023년 8월 4일 알고리즘 문제풀이 백준 1260 문제 링크 1차 시도 나의 생각 오랜만에 dfs, bfs라 당황했다. 우선 2차원 배열로 그래프를 그린 후 두 정점 사이의 간선이 있으면 1, 없으면 0으로 표현했다. 그리고 방문한 정점을 표시하기 위한 배열도 만들었다. dfs는 이동할 수 있는 다음 정점으로 재귀를 통해 확인하는 과정을 거쳤다. bfs는 현재 정점에서 이동할 수 있는 정점 모두를 deque에 담은 후 popleft하면서 각각마다 그 다음 목적지를 확인하였다. bfs를 큐로 관리하는 것이 기억해내느라 푸는데 시간이 촉박했다. ...

2023년 8월 4일 · 3 분 · 배준수

의미있는 이름(2)

책너두 5기 4일차 로버트 C. 마틴의 클린코드 p.24 ~ p.34 내용 정리 그릇된 정보를 피하라 이름을 지을 때 비슷한 이름으로 헷갈리게 하거나, 실제 List가 아닌데 list를 넣거나, 소문자l과 대문자 O 등으로 헷갈리게 해선 안된다. 의미 있게 구분하라 다른 이름을 지을 때 명확히 구분되도록 이름을 차별화해라. a1,a2,a3 라던가, customor와 customerobject처럼 어떤 차이인지 모르도록 해선 안된다. 발음하기 쉬운 이름을 사용하라 팀 프로젝트다보니 대화를 나눠야 하는데 한 글자씩 말해야 하면 불편하다. 읽고 발음할 수 있는 단어를 사용해라. ...

2023년 8월 3일 · 2 분 · 배준수