경계(2)

책너두 5기 17일차 로버트 C. 마틴의 클린코드 p.151 ~ p.160 내용 정리 8. 경계 깨끗한 경계 통제하지 못하는 코드를 사용할 때는 과투자나 향후 변경 비용의 과대화를 주의해야 한다. 통제 불가능한 외부 패키지보다 통제 가능한 우리 코드에 의존하는 것이 좋다. 9.단위 테스트 과거의 단위 테스트는 자기 프로그램이 ‘돌아간다’는 사실만 확인하는 일회성 코드였다. TDD 법칙 세가지 첫째 법칙 : 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 둘째 법칙 : 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. ...

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

파이썬 알고리즘 : N과 M (4), 최솟값과 최댓값

2023년 8월 18일 알고리즘 문제풀이 문제 1 백준 15652 문제 링크 1차 시도 나의 생각 처음엔 조합(combination)을 이용해야하나 생각했다. 하지만 문제가 수를 구하는게 아니라 모든 결과를 출력해야 하기 때문에 조합은 의미가 없을 것이라 생각했다. 어떻게 해야할까 고민하다가 모든 경우를 탐색해야하니 dfs로 풀면 좋겠다는 생각을 했다. 실마리를 찾으니 푸는건 쉬웠다. 결과 정답 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import sys sys.setrecursionlimit(10**6) n, m = map(int, sys.stdin.readline().split()) arr = [i for i in range(n+1)] def dfs(x, tmp): if len(tmp) == m: print(*tmp) return for i in range(x,n+1): tmp.append(i) dfs(i,tmp) tmp.pop() for i in range(1, n+1): tmp = [] tmp.append(i) dfs(i, tmp) 문제 2 백준 2357 문제 링크 ...

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

경계

책너두 5기 16일차 로버트 C. 마틴의 클린코드 p.142 ~ p.150 내용 정리 8. 경계 패키지나 오픈 소스를 사용할 때, 외부 코드를 우리 코드에 깔끔하게 통합해야 한다. 이를 위해 소프트웨어 경계를 깔끔하게 처리해야 한다. 외부 코드 사용하기 인터페이스 제공자는 많은 고객이 사용하길 바라기 때문에 적용성을 넓히지만, 사용자는 자신의 니즈에 집중하는 인터페이스를 바란다. 이 사이에서 문제가 발생한다. 예시 : java.util.Map 사용자는 마음만 먹으면 어떤 객체 유형도 추가할 수 있다. 아래처럼 Sensor라는 객체를 담는 Map을 만든다. ...

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

파이썬 알고리즘 : 올바른 괄호, 디스크 컨트롤러, 피보나치 함수

2023년 8월 17일 알고리즘 문제풀이 문제 1 올바른 괄호 문제 링크 1차 시도 나의 생각 문자열을 앞부터 한글자씩 스택에 넣는다. 여는 괄호’(‘는 무조건 넣고, 닫는 괄호’)‘는 경우가 나누어진다. 스택에 마지막으로 들어가있는 원소가 여는 괄호면 합쳐서 올바른 괄호니 마지막에 들어간것을 pop해준다. 스택이 비어있으면 올바른 괄호가 아니라는 의미이다. 단어의 모든 글자를 순회했는데 아직 스택에 괄호가 남아있다면 올바르지 못한 괄호이다. 결과 정답 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 from collections import deque def solution(s): answer = True arr = list(s) q = deque() for i in range(len(s)): if arr[i] == '(': q.append(arr[i]) else: if not q or q[-1] != '(': return False elif q[-1] == '(': q.pop() continue if q: return False else: return answer 문제 2 디스크 컨트롤러 문제 링크 ...

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

오류 처리

책너두 5기 15일차 로버트 C. 마틴의 클린코드 p.132 ~ p.141 내용 정리 7. 오류 처리 Try-Catch-Finally 문부터 작성하라 예시 : 파일이 없으면 예외를 던지는지 알아보는 단위 테스트. 1 2 3 4 @Test(expeccted = StroageException.class) public void retrieveSectionShouldThrowOnInvalidFileName() { sectionStore.retrieveSection("invalid - file"); } 위 단위 테스트에 맞춰 다음 코드를 구현 1 2 3 4 public List<RecordedGrip> retrieveSection(String sectionName) { // 실제로 구현할 때까지 비어 있는 더미를 반환한다. return new ArrayList<RecordedGrip>(); } 위 코드는 예외를 던지지 않으므로 테스트는 실패. 코드를 변경한다. ...

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

객체와 자료 구조

책너두 5기 14일차 로버트 C. 마틴의 클린코드 p.123 ~ p.131 내용 정리 6. 객체와 자료 구조 디미터 법칙 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙. 즉, 객체는 조회 함수로 내부 구조를 공개하면 안된다. final String outputDir = ctxt.getoptions().getScratchDir().getAbsolutePath(); 위 코드는 디미터 법칙을 어겼다. 각 함수가 반환하는 객체의 함수를 호출하기 때문이다. 기차 충돌 위와 같은 코드를 기차 충돌(train wreck)으로 부른다. 길게 이어진 기차같은 이 코드는 다음과 같이 수정할 수 있다. ...

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

파이썬 알고리즘 : 숨바꼭질, 비밀번호, 등산

2023년 8월 15일 알고리즘 문제풀이 문제 1 백준 1697 문제 링크 1차 시도 나의 생각 처음엔 재귀나 피보나치 등 여러 방법을 고민했다. 결국 다이나믹 프로그래밍으로 푸는게 적절하다고 생각했다. 맨처음 n에서 1초후 갈 수 있는 곳은 2n, n+1, n-1 이다. 이들을 큐에 저장하고 이들까지 도달하는데 걸린 시간도 같이 저장한다. 이 큐에서 하나씩 순회하며 2배한 좌표, +1, -1 한 좌표에 시간을 업데이트하고 큐에 다시 저장하는 것을 반복했다. 하지만 예시를 입력하면 올바른 정답이 나오지 않았다. 디버깅해봐야겠다. ...

2023년 8월 15일 · 10 분 · 배준수

4. 분할정복

4.분할정복 4.3 점화식을 풀기 위한 치환 치환(Substitution)법 : 귀납 가정을 더 작은 문제에 적용할 때 추측한 해로 치환한다. 해의 모양을 추측한다. 상수들의 값을 찾아내기 위해 수학적 귀납법을 사용하고 그 해가 제대로 동작함을 보인다. 이 책에서는 결과로 나올 해의 모양을 추측하여 치환하는 것에 대한 설명이 많다. 하지만 실제로 양 변에서 공통된 모양을 추출하여 새로운 수열로 치환함으로서 풀 수 있는 점화식 이많다. 예시

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

형식 맞추기(3)

책너두 5기 13일차 로버트 C. 마틴의 클린코드 p.111 ~ p.122 내용 정리 5. 형식 맞추기 들여쓰기 계층에서 각 수준은 이름을 선언하는 범위이자 선언문과 실행문을 해석하는 범위이다. 들여쓰는 정도는 계층에서 코드가 자리잡은 수준에 비례한다. 들여쓰기한 파일은 구조가 한눈에 들어온다. 변수, 생성자 함수, 접근자 함수, 메서드가 금방 보인다. 들여쓰기 무시하기 한 행에 범위를 뭉뜽그린 코드를 피해야 한다. 간단한 if 문, 짧은 while 문 등에서도 마찬가지. 가짜 범위 빈 while문이나 for문은 피해야 한다. 필요하다면 빈 블록을 올바로 들여쓰고 괄호로 감싸야 한다. ...

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

2023년 8월 1주차 주간 기록

주간기록 날짜 2023년 8월 7일 ~ 2023년 8월 13일 계획 매일 오전(9시 ~ 11시 30분) 알고리즘 3문제 풀기 Geek News 읽기 Cleancode 읽기 오후(12시 30분 ~ 17시 30분) 월 : 정글에서 배운 내용 복습 화 : CS & 백엔드 공부 수 : 대면면접 목 : 코딩테스트 금 : 알고리즘 이론 공부 토, 일 : 미진한 내용 보충 밤(18시 30분 ~ 23시) 월, 화, 목, 금 : 회사 과제 수 : 알고리즘 스터디 결과 리듬이 모두 엉망이 되버렸다.. 알고리즘 문제도 놔버렸다. 회사에서 요구한 과제보랴, 면접보랴, 코테보랴 꼬여버렸다 WIL 그래도 express.js와 mysql을 이용해 서버를 구현하고 데이터를 조회/업데이트 하는 과제를 완료했다. AWS 서버에 배포도 성공했다. 코딩테스트 풀긴 다 풀었다. 면접볼때 회사가 무슨일 하는지는 철저히 조사하자.. 버릇은 예외가 생기면 안된다. 회고 이번 주에 스케쥴이 많이 생겨서, 기존에 하던 루틴들이 다 망가졌다. 다음주 무리해서라도 빨리 제대로 잡아야지.. 기존에 만들던 과제는 지원한 회사에서 요구한 과제가 있어서 멈췄다. 그래도 두 과제가 비슷하게 서버 구현하는 과제라 다행이다. 한번 해봤으니 더 쉽게 할 수 있을 것 같다! 그래도 바쁘니 빨리 해야지.. 알고리즘 문제좀 열심히 풀고, 책도 열심히 읽자. 이론 공부 빼먹지말고.. 내년엔 나도 휴가 갈수 있었으면 좋겠다. ...

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