형식 맞추기(1)

책너두 5기 11일차 로버트 C. 마틴의 클린코드 p.95 ~ p.102 내용 정리 5. 형식 맞추기 처음 코드를 봤을 때 깔끔하고 일관적이며 꼼꼼한 코드로 보여야 한다. 그러기 위해선 규칙을 따라야 한다. 형식을 맞추는 목적 분명히 코드 형식은 중요하다. 오늘 구현한 기능이 다음 버전엣 ㅓ바뀔 확률은 아주 높다. 따라서 오늘 작성한 코드의 가독성은 미래에도 영향을 끼친다. 적절한 행 길이를 유지하라 파일의 세로 길이가 조금만 차이나도 실제 파일의 크기는 크게 달라진다. 비교적 적은 줄의 파일로도 커다란 시스템을 구축할 수 있다. 반드시는 아니지만 바람직한 규칙이다. ...

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

주석(3)

책너두 5기 10일차 로버트 C. 마틴의 클린코드 p.84 ~ p.94 내용 정리 함수나 변수로 표현할 수 있다면 주석을 달지 마라 명명법을 올바르게 사용하여 주석의 필요성을 없애자. 위치를 표시하는 주석 // Actions //////////// 같은 배너 아래에 모아두는 것은 필요할 때도 있지만 극히 드물게 사용해야 한다. 닫는 괄호에 다는 주석 차라리 함수를 줄이는데 시간을 쓰자 저자를 표시하는 주석 준수가 작성함은 소스 코드 관리 시스템이 있는 한 무의미한 주석이다. 주석으로 처리한 코드 내가 주석으로 처리하면, 다른 사람은 지우기를 주저 한다. 이전의 기록은 소스 코드 관리 시스템이 한다. 지금 필요없으면 지우자. 기록은 존재한다. ...

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

파이썬 알고리즘 : 연산자 끼워넣기, 빙산, 구슬 찾기

2023년 8월 10일 알고리즘 문제풀이 문제 1 백준 14888 문제 링크 1차 시도 나의 생각 각 경우에 알맞은 연산을 처리한 후 재귀를 탔다. 정의한 dfs 재귀 함수는 몇번의 재귀를 탔는지, 각 연산이 몇번 남아있는지를 parameter로 받도록 정의하였다. 나눗셈은 음수일때는 양수로 변환한 후 결과에 음수를 다시 붙이도록 하였다. 결과 정답 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 import sys n = int(sys.stdin.readline()) nums = list(map(int, sys.stdin.readline().split())) plus, minus, multiple, division = map(int, sys.stdin.readline().split()) arr = [] def dfs(tmp, cnt, a, b, c, d): if cnt == n: arr.append(tmp) return if a: tmp += nums[cnt] a -= 1 cnt += 1 dfs(tmp, cnt, a, b, c, d) cnt -= 1 a += 1 tmp -= nums[cnt] if b: tmp -= nums[cnt] b -= 1 cnt += 1 dfs(tmp, cnt, a, b, c, d) cnt -= 1 b += 1 tmp += nums[cnt] if c: tmp *= nums[cnt] c -= 1 cnt += 1 dfs(tmp, cnt, a, b, c, d) cnt -= 1 c += 1 tmp = tmp // nums[cnt] if d: if tmp >= 0: tmp = tmp//nums[cnt] else: r_tmp = abs(tmp)//nums[cnt] tmp = -1 * r_tmp d -= 1 cnt += 1 dfs(tmp, cnt, a, b, c, d) cnt -= 1 d += 1 if tmp >= 0: tmp = abs(tmp)*nums[cnt] else: r_tmp = abs(tmp)*nums[cnt] tmp = -1 * r_tmp dfs(nums[0], 1, plus, minus, multiple, division) print(max(arr)) print(min(arr)) 문제 2 백준 2573 문제 링크 ...

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

주석(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 분 · 배준수

2023년 7월 5주차 주간 기록

주간기록 날짜 2023년 7월 31일 ~ 2023년 8월 6일 계획 매일 오전(9시 ~ 11시 30분) 알고리즘 3문제 풀기 Geek News 읽기 오후(12시 30분 ~ 17시 30분) 월 : 정글에서 배운 내용 복습 화 : CS & 백엔드 공부 수 : 정글에서 배운 내용 복습 목 : CS & 백엔드 공부 금 : 알고리즘 이론 공부 토, 일 : 미진한 내용 보충 밤(18시 30분 ~ 23시) 월, 화, 목, 금 : 원티드 프리온보딩 백엔드 과제 수 : 알고리즘 스터디 결과 오전에 Geek 뉴스를 자꾸 빼먹음 알고리즘 난이도에 따라 시간의 편차가 너무 큼 오후 공부 양이 너무 부족함 WIL 알고리즘 문제풀이 Express 와 MySQL을 연동한 로그인 네트워크의 기본 용어 알고리즘 이론 Strassen algorithm 회고 하기로 한 공부들을 한번 씩은 건드려 봤지만 이 속도로는 많이 부족할 것 같다. 알고리즘에 시간이 많이 소모되고 있지만 그렇다고 알고리즘을 많이 푸는 것 같지도 않아서 걱정이다. 언제 끝나나 생각할 시간에 오늘 하루 할 일을 다 했나 스스로 냉정하게 평가하자. 월요일부터 일요일 까지 주 7회 도서관이 여는 9시에 들어가서 닫는 10시에 나오고 있다. 앉아있는 시간에 만족하지 말고, 그 시간이 얼마나 값어치 있는지에 집중해야겠다. 언젠간 좋은날 오겠지.. ...

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

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 분 · 배준수